一、基本概念
Kubernetes 中的絕大部分概念都抽象成 Kubernetes 管理的一種資源對(duì)象寨躁,下面我們一起學(xué)習(xí)一些資源對(duì)象:
- Master:Master 節(jié)點(diǎn)是 Kubernetes 集群的控制節(jié)點(diǎn)穆碎,負(fù)責(zé)整個(gè)集群的管理和控制。Master 節(jié)點(diǎn)上包含以下組件:
- kube-apiserver:集群控制的入口职恳,提供HTTP REST 服務(wù)
- kube-controller-manager: Kubernetes集群中所有資源對(duì)象的自動(dòng)化控制中心
- kube-scheduler:負(fù)責(zé)Pod調(diào)度
- Node: Node節(jié)點(diǎn)是Kubernetes 集群中的工作節(jié)點(diǎn)所禀,Node上的工作負(fù)載由Master節(jié)點(diǎn)分配,工作負(fù)載主要是運(yùn)行容器應(yīng)用放钦。Node 節(jié)點(diǎn)上包含以下組件:
? - kubelet:負(fù)責(zé)Pod的創(chuàng)建色徘、啟動(dòng)、監(jiān)控操禀、重啟褂策、銷(xiāo)毀等工作,同時(shí)與Master 節(jié)點(diǎn)協(xié)作颓屑,實(shí)現(xiàn)集群管理的基本功能斤寂。
? - kube-proxy:實(shí)現(xiàn)Kubernetes Service 的通信和負(fù)載均衡
? - 運(yùn)行容器化(Pod)應(yīng)用
Pod:Pod是Kubernetes 最基本的部署調(diào)度單元。每個(gè)Pod可以由一個(gè)或者多個(gè)業(yè)務(wù)容器和一個(gè)根容器(Pause容器)組成揪惦。一個(gè)Pod表示某個(gè)應(yīng)用的實(shí)例
ReplicaSet:是Pod副本的抽象遍搞,用于解決Pod的擴(kuò)容和伸縮
Deployment: Deployment 表示部署,在內(nèi)部使用ReplicaSet來(lái)實(shí)現(xiàn)器腋,可以通過(guò)Deployment 來(lái)生成相應(yīng)的Pod副本的創(chuàng)建
-
Service: Service是Kubernetes 最重要的資源對(duì)象溪猿。Kubernetes中的Service對(duì)象可以對(duì)應(yīng)微服務(wù)架構(gòu)中的微服務(wù)钩杰。Service定義了服務(wù)的訪問(wèn)入口,服務(wù)的調(diào)用者通過(guò)這個(gè)抵制訪問(wèn)Service后端的Pod副本實(shí)例诊县。Service通過(guò)Label Selector 同后端的Pod副本建立關(guān)系讲弄,Deployment 保證后端Pod副本的數(shù)量,也就是保證服務(wù)的伸縮性翎冲。
Kubernetes 主要由以下幾個(gè)核心組件組成:
etcd 保存了整個(gè)集群的狀態(tài)垂睬,就是一個(gè)數(shù)據(jù)庫(kù);
apiserver 提供了資源操作的唯一入口抗悍,并提供認(rèn)證驹饺、授權(quán)、訪問(wèn)控制缴渊、API注冊(cè)和發(fā)現(xiàn)等機(jī)制赏壹;
controller manager 負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)衔沼、自動(dòng)擴(kuò)展蝌借、滾動(dòng)更新等;
scheduler 負(fù)責(zé)資源的調(diào)度指蚁,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的機(jī)器上菩佑;
kubelet 負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé) Volume(CSI)和網(wǎng)絡(luò)(CNI)的管理凝化;
Container runtime 負(fù)責(zé)鏡像管理以及Pod和容器的真正運(yùn)行(CRI)稍坯;
kube-proxy 負(fù)責(zé)為Service 提供 cluster 內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡;
當(dāng)然除了上面這些核心組件還有一些插件:
- kube-dns 負(fù)責(zé)為整個(gè)集群提供DNS服務(wù)
- Ingress Controller 為服務(wù)提供外網(wǎng)入口
- Heapster 提供資源監(jiān)控
- Dashboard 提供GUI
組件通信
Kubernetes 多組件之間的通信原理:
- apiserver 負(fù)責(zé) etcd 存儲(chǔ)的所有操作搓劫,且只有apiserver 才直接操作etcd集群
- apiserver 對(duì)內(nèi)(集群中的其他組件)和對(duì)外(用戶(hù))提供統(tǒng)一的REST API瞧哟,其他組件均通過(guò)apiserver 進(jìn)行通信
? - controller manager、 scheduler枪向、 kube-proxy 和 kubelet 等均通過(guò)apiserver watch API 監(jiān)控資源變化情況勤揩,并對(duì)資源作相應(yīng)的操作
? - 所有需要更新資源狀態(tài)的操作均通過(guò) apiserver 的REST API 進(jìn)行 - apiserver 也會(huì)直接調(diào)用 kubelet API(如 logs,exec秘蛔,attach等)陨亡,默認(rèn)不校驗(yàn)kubelet 證書(shū),但可以通過(guò) <code>- -kubelet -certificate-authority</code> 開(kāi)啟(而GKE通過(guò)SSH隧道保護(hù)他們之間的通信)
比如最典型的創(chuàng)建Pod的流程:
- 用戶(hù)通過(guò)REST API 創(chuàng)建一個(gè)Pod
- apiserver 將其寫(xiě)入etcd
- scheduler 檢測(cè)到未綁定 Node 的 Pod缠犀,開(kāi)始調(diào)度并更新Pod 的 Node 綁定
- kubelet 檢測(cè)到有新的 Pod 調(diào)度過(guò)來(lái)数苫,通過(guò) container runtime 運(yùn)行該 Pod
- kubelet 通過(guò) container runtime 取到 Pod 狀態(tài),并更新到 apiserver 中