摘要:負載均衡一組副本分配一個私有的集群地址,負載均衡轉發請求到后端容器。在節點上實現網絡代理,維護網絡規則和四層負載均衡工作。
一、Kubernetes介紹
?Kubernetes是Google在2014年6月開源的一個容器集群管理系統,使用Go語言開發,Kubernetes也叫K8S。K8S是Google內部一個叫Borg的容器集群管理系統衍生出來的,Borg已經在Google大規模生產運行十年之久。K8S主要用于自動化部署、擴展和管理容器應用,提供了資源調度、部署管理、服務發現、擴容縮容、監控等一整套功能。2015年7月,Kubernetes v1.0正式發布,截止到2017年9月29日最新穩定版本是v1.8.0 Kubernetes目標是讓部署容器化應用簡單高效。
官方網站:www.kubernetes.io
??Pod中容器之間共享數據,可以使用數據卷。
2、應用程序健康檢查??容器內服務可能進程堵塞無法處理請求,可以設置監控檢查策略保證應用健壯性。
3、復制應用程序實例??控制器維護著Pod副本數量,保證一個Pod或一組同類的Pod數量始終可用。
4、彈性伸縮??根據設定的指標(CPU利用率)自動縮放Pod副本數。
5、服務發現??使用環境變量或DNS服務插件保證容器中程序發現Pod入口訪問地址。
6、負載均衡??一組Pod副本分配一個私有的集群IP地址,負載均衡轉發請求到后端容器。在集群內部其他Pod可通過這個ClusterIP訪問應用。
7、滾動更新??更新服務不中斷,一次更新一個Pod,而不是同時刪除整個服務。
8、服務編排??通過文件描述部署服務,使得應用程序部署變得更高效。
9、資源監控??Node節點組件集成cAdvisor資源收集工具,可通過Heapster匯總整個集群節點資源數據,然后存儲到InfluxDB時序數據庫,再由Grafana展示。
10、提供認證和授權??支持屬性訪問控制(ABAC)、角色訪問控制(RBAC)認證授權策略。
基本對象概念 基本對象: 1、Pod??Pod是最小部署單元,一個Pod有一個或多個容器組成,Pod中容器共享存儲和網絡,在同一臺Docker主機上運行。
2、Service??Service一個應用服務抽象,定義了Pod邏輯集合和訪問這個Pod集合的策略。
??Service代理Pod集合對外表現是為一個訪問入口,分配一個集群IP地址,來自這個IP的請求將負載均衡轉發后端Pod中的容器。
??Service通過LableSelector選擇一組Pod提供服務。
3、Volume??數據卷,共享Pod中容器使用的數據。
4、Namespace??命名空間將對象邏輯上分配到不同Namespace,可以是不同的項目、用戶等區分管理,并設定控制策略,從而實現多租戶。
??命名空間也稱為虛擬集群。
5、Lable??標簽用于區分對象(比如Pod、Service),鍵/值對存在;每個對象可以有多個標簽,通過標簽關聯對象。
基于基本對象更高層次抽象: 1、ReplicaSet??下一代ReplicationController。確保任何給定時間指定的Pod副本數量,并提供聲明式更新等功能。
??RC與RS唯一區別就是lableselector支持不同,RS支持新的基于集合的標簽,RC僅支持基于等式的標簽。
2、Deployment??Deployment是一個更高層次的API對象,它管理ReplicaSets和Pod,并提供聲明式更新等功能。
??官方建議使用Deployment管理ReplicaSets,而不是直接使用ReplicaSets,這就意味著可能永遠不需要直接操作ReplicaSet對象。
3、StatefulSet??StatefulSet適合持久性的應用程序,有唯一的網絡標識符(IP),持久存儲,有序的部署、擴展、刪除和滾動更新。
4、DaemonSet??aemonSet確保所有(或一些)節點運行同一個Pod。當節點加入Kubernetes集群中,Pod會被調度到該節點上運行,當節點從集群中移除時,DaemonSet的Pod會被刪除。刪除DaemonSet會清理它所有創建的Pod。
5、Job??一次性任務,運行完成后Pod銷毀,不再重新啟動新容器。還可以任務定時運行。
二、k8s架構Kubernetes API,集群的統一入口,各組件協調者,以HTTPAPI提供接口服務,所有對象資源的增刪改查和監聽操作都交給APIServer處理后再提交給Etcd存儲。
2、kube-controller-manager處理集群中常規后臺任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的。
3、kube-scheduler根據調度算法為新創建的Pod選擇一個Node節點。
Node組件: 1、kubeletkubelet是Master在Node節點上的Agent,管理本機運行容器的生命周期,比如創建容器、Pod掛載數據卷、下載secret、獲取容器和節點狀態等工作。kubelet將每個Pod轉換成一組容器。
2、kube-proxy在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工作。
3、docker或rocket(rkt)運行容器。
第三方服務: 1、etcd分布式鍵值存儲系統。用于保持集群狀態,比如Pod、Service等對象信息。
三、K8S常用命令 查看node-o wide以yaml格式顯示詳細信息 [root@linux-node1 ~]# kubectl get node -o wide NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME 192.168.56.12 Ready創建deployments6d v1.10.8 CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1 192.168.56.13 Ready 6d v1.10.8 CentOS Linux 7 (Core) 3.10.0-514.el7.x86_64 docker://18.6.1
[root@linux-node1 ~]# kubectl run net-test --image=alpine --replicas=2 sleep 360000 deployment.apps "net-test" created ###查看deployments [root@linux-node1 ~]# kubectl get deployments --all-namespaces -o wide NAMESPACE NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR default net-test 2 2 2 2 13s net-test alpine run=net-test查看deployments詳情
[root@linux-node1 ~]# kubectl describe deployment net-test Name: net-test Namespace: default CreationTimestamp: Fri, 28 Sep 2018 05:25:49 -0400 Labels: run=net-test Annotations: deployment.kubernetes.io/revision=1 Selector: run=net-test Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge Pod Template: Labels: run=net-test Containers: net-test: Image: alpine Port:刪除deploymentsHost Port: Args: sleep 360000 Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: net-test-5767cb94df (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 9m deployment-controller Scaled up replica set net-test-5767cb94df to 2
[root@linux-node1 ~]# kubectl delete deployment net-test -n default deployment.extensions "net-test" deleted查看pod
[root@linux-node1 ~]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-7lwtq 1/1 Running 0 3m 10.2.96.11 192.168.56.13 net-test-5767cb94df-wcwg5 1/1 Running 0 3m 10.2.96.10 192.168.56.12 -o wide以yaml格式顯示Pod的詳細信息 kubectl get pod查看pod的詳情-o wide [root@linux-node1 ~]# kubectl get pod net-test-5767cb94df-7lwtq -o wide NAME READY STATUS RESTARTS AGE IP NODE net-test-5767cb94df-7lwtq 1/1 Running 0 2m 10.2.96.11 192.168.56.13
[root@linux-node1 ~]# kubectl describe pod net-test-5767cb94df-7lwtq Name: net-test-5767cb94df-7lwtq Namespace: default Node: 192.168.56.13/192.168.56.13 Start Time: Fri, 28 Sep 2018 05:25:49 -0400 Labels: pod-template-hash=1323765089 run=net-test Annotations:Status: Running IP: 10.2.96.11 Controlled By: ReplicaSet/net-test-5767cb94df Containers: net-test: Container ID: docker://fc0889ca3141cdcd29fc137da45dcb913b7aece71dea76e1508cf34aa93ed0ce Image: alpine Image ID: docker-pullable://alpine@sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528 Port: Host Port: Args: sleep 360000 State: Running Started: Fri, 28 Sep 2018 05:25:56 -0400 Ready: True Restart Count: 0 Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-xr766 (ro) Conditions: Type Status Initialized True Ready True PodScheduled True Volumes: default-token-xr766: Type: Secret (a volume populated by a Secret) SecretName: default-token-xr766 Optional: false QoS Class: BestEffort Node-Selectors: Tolerations: Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m default-scheduler Successfully assigned net-test-5767cb94df-7lwtq to 192.168.56.13 Normal SuccessfulMountVolume 3m kubelet, 192.168.56.13 MountVolume.SetUp succeeded for volume "default-token-xr766" Normal Pulling 3m kubelet, 192.168.56.13 pulling image "alpine" Normal Pulled 3m kubelet, 192.168.56.13 Successfully pulled image "alpine" Normal Created 3m kubelet, 192.168.56.13 Created container Normal Started 3m kubelet, 192.168.56.13 Started container
https://blog.csdn.net/liumiaocn/article/details/73913597 Kubernetes之kubectl常用命令使用指南:1:創建和刪除 https://blog.csdn.net/qq_32828145/article/details/81429232 k8s之Deployment與service
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/33084.html
摘要:下面我想介紹另一種學習思路,自頂向下的學習。是通過虛擬機創建集群,支持多種虛擬機,我這里用的。對內或對外暴露服務。和的控制器,通過配置的規則來管理。三個主要的命令行程序用了啟動集群。需要在所以節點上運行,處理集群內部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運用到生產上。構建一個docker鏡像,把他run起來很簡單;難的是容器的部署(CICD),容器的網絡,數據持...
摘要:下面我想介紹另一種學習思路,自頂向下的學習。是通過虛擬機創建集群,支持多種虛擬機,我這里用的。對內或對外暴露服務。和的控制器,通過配置的規則來管理。三個主要的命令行程序用了啟動集群。需要在所以節點上運行,處理集群內部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運用到生產上。構建一個docker鏡像,把他run起來很簡單;難的是容器的部署(CICD),容器的網絡,數據持...
摘要:下面我想介紹另一種學習思路,自頂向下的學習。是通過虛擬機創建集群,支持多種虛擬機,我這里用的。對內或對外暴露服務。和的控制器,通過配置的規則來管理。三個主要的命令行程序用了啟動集群。需要在所以節點上運行,處理集群內部通訊,類似。 之前就玩過docker,但是一直不知道怎么把容器運用到生產上。構建一個docker鏡像,把他run起來很簡單;難的是容器的部署(CICD),容器的網絡,數據持...
摘要:將用戶命令通過接口傳送給,從而進行資源的增刪改等操作。要使用編寫應用程序,當下大多語言都可以很方便地去實現請求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優雅地實現的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術棧打造個人私有云系列文章目錄】 利用K8S...
摘要:將用戶命令通過接口傳送給,從而進行資源的增刪改等操作。要使用編寫應用程序,當下大多語言都可以很方便地去實現請求來操作的接口從而控制和查詢資源,但本文主要是利用已有的客戶端來更加優雅地實現的資源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技術棧打造個人私有云系列文章目錄】 利用K8S...
閱讀 3508·2021-11-24 11:17
閱讀 2295·2021-11-15 11:38
閱讀 3376·2021-10-14 09:42
閱讀 2949·2019-08-30 15:54
閱讀 2036·2019-08-28 18:09
閱讀 548·2019-08-26 11:48
閱讀 1643·2019-08-26 10:48
閱讀 2161·2019-08-26 10:45