1.基本概念
Kubernetes 中的絕大部分概念都抽象成 Kubernetes 管理的一種資源對象
Master:
Master 節(jié)點是 Kubernetes 集群的控制節(jié)點久又,負責整個集群的管理和控制籽孙。Master 節(jié)點上包含以下組件:
kube-apiserver:
集群控制的入口火俄,提供 HTTP REST 服務
kube-controller-manager:
Kubernetes 集群中所有資源對象的自動化控制中心
kube-scheduler:
負責 Pod 的調(diào)度
Node:
Node 節(jié)點是 Kubernetes 集群中的工作節(jié)點,Node 上的工作負載由 Master 節(jié)點分配瓜客,工作負載主要是運行容器應用。Node 節(jié)點上包含以下組件:
kubelet:
負責 Pod 的創(chuàng)建玻熙、啟動嗦随、監(jiān)控列荔、重啟、銷毀等工作枚尼,同時與 Master 節(jié)點協(xié)作贴浙,實現(xiàn)集群管理的基本功能。
kube-proxy:
實現(xiàn) Kubernetes Service 的通信和負載均衡
運行容器化(Pod)應用
Pod:
Pod 是 Kubernetes 最基本的部署調(diào)度單元署恍,是一組容器的集合崎溃。每個 Pod 可以由一個或多個業(yè)務容器和一個根容器(Pause基礎容器)組成。一個 Pod 表示某個應用的一個實例最小部署單元盯质,一個Pod中的容器共享網(wǎng)絡命名空間
ReplicaSet:
是 Pod 副本的抽象袁串,用于解決 Pod 的擴容和伸縮
Deployment:
無狀態(tài)應用部署,Deployment 表示部署呼巷,在內(nèi)部使用ReplicaSet 來實現(xiàn)囱修。可以通過 Deployment 來生成相應的 ReplicaSet 完成 Pod 副本的創(chuàng)建
StatefulSet :
有狀態(tài)應用部署
Service:
Service 是 Kubernetes 最重要的資源對象朵逝。Kubernetes 中的 Service 對象可以對應微服務架構中的微服務蔚袍。Service 定義了服務的訪問入口,服務的調(diào)用者通過這個地址訪問 Service 后端的 Pod 副本實例。Service 通過 Label Selector 同后端的 Pod 副本建立關系芋膘,Deployment 保證后端Pod 副本的數(shù)量为朋,也就是保證服務的伸縮性。
Job
: 一次性任務
Cronjob
: 定時任務
Label
: 標簽霞溪,附加到某個資源上坊饶,用于關聯(lián)對象、查詢和篩選
Namespaces
: 命名空間根蟹,將對象邏輯上隔離
2.Kubernetes 主要由以下幾個核心組件組成
etcd
保存了整個集群的狀態(tài)尿赚,就是一個數(shù)據(jù)庫悲龟;
apiserver
提供了資源操作的唯一入口,并提供認證轻腺、授權贬养、訪問控制迷殿、API 注冊和發(fā)現(xiàn)等機制蚊夫;
controller manager
負責維護集群的狀態(tài)奏窑,比如故障檢測埃唯、自動擴展、滾動更新等漠趁;
scheduler
負責資源的調(diào)度,按照預定的調(diào)度策略將 Pod 調(diào)度到相應的機器上甥绿;
kubelet
負責維護容器的生命周期,同時也負責 Volume(CSI)和網(wǎng)絡(CNI)的管理图谷;
Container runtime
負責鏡像管理以及 Pod 和容器的真正運行(CRI)澄峰;
kube-proxy
負責為 Service 提供 cluster 內(nèi)部的服務發(fā)現(xiàn)和負載均衡;
當然了除了上面的這些核心組件魂毁,還有一些推薦的插件:
kube-dns
負責為整個集群提供 DNS 服務
Ingress Controller
為服務提供外網(wǎng)入口
Heapster
提供資源監(jiān)控
Dashboard
提供 GUI
3.組件通信
Kubernetes 多組件之間的通信原理:
apiserver 負責 etcd 存儲的所有操作税稼,且只有 apiserver 才直接操作 etcd 集群
apiserver 對內(nèi)(集群中的其他組件)和對外(用戶)提供統(tǒng)一的 REST API兜蠕,其他組件均通過 apiserver 進行通信
controller manager
、scheduler
晶府、kube-proxy
和 kubelet
等均通過 apiserver watch API 監(jiān)測資源變化情況,并對資源作相應的操作
所有需要更新資源狀態(tài)的操作均通過 apiserver 的 REST API 進行
apiserver 也會直接調(diào)用 kubelet API(如 logs, exec, attach 等),默認不校驗 kubelet 證書购对,但可以通過 --kubelet-certificate-authority 開啟(而 GKE 通過 SSH 隧道保護它們之間的通信)
4.最典型的創(chuàng)建 Pod 的流程:
??- 用戶通過 REST API 創(chuàng)建一個 Pod
- apiserver 將其寫入 etcd
- scheduluer 檢測到未綁定 Node 的 Pod解幽,開始調(diào)度并更新 Pod 的 Node 綁定
- kubelet 檢測到有新的 Pod 調(diào)度過來,通過 container runtime 運行該 Pod
- kubelet 通過 container runtime 取到 Pod 狀態(tài)霜定,并更新到 apiserver 中