當(dāng)你部署完 Kubernetes, 即擁有了一個(gè)完整的集群赁温。
一個(gè) Kubernetes 集群由一組被稱作節(jié)點(diǎn)的機(jī)器組成坛怪。這些節(jié)點(diǎn)上運(yùn)行 Kubernetes 所管理的容器化應(yīng)用。集群具有至少一個(gè)工作節(jié)點(diǎn)股囊。
工作節(jié)點(diǎn)托管作為應(yīng)用負(fù)載的組件的 Pod 酝陈。控制平面管理集群中的工作節(jié)點(diǎn)和 Pod 毁涉。 為集群提供故障轉(zhuǎn)移和高可用性沉帮,這些控制平面一般跨多主機(jī)運(yùn)行,集群跨多個(gè)節(jié)點(diǎn)運(yùn)行贫堰。
本節(jié)概述了交付正常運(yùn)行的 Kubernetes 集群所需的各種組件穆壕。
1、控制平面組件(Control Plane Components--master)
從上面的構(gòu)架圖可以看出來整個(gè)kubernetes集群分為control plane(master)和node節(jié)點(diǎn)兩部份其屏。master組件是集群的“腦力”輸出者喇勋。它維護(hù)有kubernetesr 的所有對(duì)象記錄,負(fù)責(zé)持續(xù)管理對(duì)象狀態(tài)并響應(yīng)集群中各種資源對(duì)象的管理操作川背,以及確保各資源對(duì)象的實(shí)際狀態(tài)與所需狀態(tài)相匹配贰拿。主要由API Server(kube-apiserver)、Control Manager(kube-controller-manager)和Scheduler(kube-scheduler)這3個(gè)組件熄云。以及一個(gè)用于集群狀態(tài)存儲(chǔ)的etcd存儲(chǔ)服務(wù)組成膨更。
1.1 API Server(kube-apiserver)
API Server是 Kubernetes控制平臺(tái)的前端。支持不同類型應(yīng)用的生命周期編排缴允,包括部署荚守、縮放和滾動(dòng)更新等。還是整個(gè)集群的網(wǎng)關(guān)接口,由kube-apiserver守護(hù)程序運(yùn)行為服務(wù)练般。通過HTTP/HTTPS協(xié)議將RESTful API公開給用戶矗漾。是發(fā)往集群的所有REST操作命令的接入點(diǎn),并提供認(rèn)證薄料、授權(quán)敞贡、訪問控制、API注冊(cè)和發(fā)現(xiàn)等所有的REST請(qǐng)求摄职。并將結(jié)果狀態(tài)持久存儲(chǔ)于集群狀態(tài)存儲(chǔ)系統(tǒng)(etcd)中誊役。
kube-apiserver 支持同時(shí)提供 https(默認(rèn)監(jiān)聽在 6443 端口)和 http API(默認(rèn)監(jiān)聽在 127.0.0.1 的 8080 端口),其中 http API 是非安全接口琳钉,不做任何認(rèn)證授權(quán)機(jī)制,不建議生產(chǎn)環(huán)境啟用蛛倦。兩個(gè)接口提供的 REST API 格式相同
1.2 Control Manager(kube-controller-manager)
Control Manager負(fù)責(zé)實(shí)現(xiàn)用戶通過API Server提交的終態(tài)聲明歌懒。它通過一系列操作步驟驅(qū)動(dòng)API對(duì)象的當(dāng)前狀態(tài)逼近或同于期望狀態(tài)。Kubernetes提供了驅(qū)動(dòng)Node溯壶、Pod及皂、Server、Endpoint且改、ServiceAccount和Token等數(shù)十種類型的API對(duì)象的控制器验烧。從邏輯上講,每個(gè)控制器都是一個(gè)單獨(dú)的進(jìn)程又跛, 但是為了降低復(fù)雜性碍拆,它們都被編譯到同一個(gè)可執(zhí)行文件,并在一個(gè)進(jìn)程中運(yùn)行慨蓝。
控制器包括:
節(jié)點(diǎn)控制器(Node Controller): 負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時(shí)進(jìn)行通知和響應(yīng)
任務(wù)控制器(Job controller): 監(jiān)測(cè)代表一次性任務(wù)的 Job 對(duì)象感混,然后創(chuàng)建 Pods 來運(yùn)行這些任務(wù)直至完成
端點(diǎn)控制器(Endpoints Controller): 填充端點(diǎn)(Endpoints)對(duì)象(即加入 Service 與 Pod)
服務(wù)帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創(chuàng)建默認(rèn)帳戶和 API 訪問令牌
-
pod高可用機(jī)制
1、node moniter period節(jié)點(diǎn)監(jiān)視5秒
Controller-manager控制器每間隔5秒檢查一次節(jié)點(diǎn)的狀態(tài)
如果controller-manager控制器沒有收到節(jié)點(diǎn)的心跳礼烈,則將該node節(jié)點(diǎn)標(biāo)記為不可達(dá)弧满。
2、node monitor grace period:節(jié)點(diǎn)監(jiān)視器寬限期為40秒
controller-manager將在標(biāo)記為無法訪問之前等待40秒;
3此熬、pod eviction timeout: pod驅(qū)逐超時(shí)時(shí)間5分鐘
如果該node節(jié)點(diǎn)被標(biāo)記為無法訪問后5分鐘還沒有恢復(fù)庭呜,controller-manager會(huì)刪除當(dāng)前node節(jié)點(diǎn)的所有pod并在其他節(jié)點(diǎn)重建這些pod.
1.3 kube-scheduler
Scheduler是指為API Server 接收到的每一個(gè)pod創(chuàng)建請(qǐng)求滑进,并在集群中為其匹配出一個(gè)最佳的工作節(jié)點(diǎn)為。調(diào)度決策考慮的因素包括單個(gè) Pod 和 Pod 集合的資源需求募谎、硬件/軟件/策略約束扶关、親和性和反親和性規(guī)范、數(shù)據(jù)位置近哟、工作負(fù)載間的干擾和最后時(shí)限等特性驮审。
1.4 etcd
kubernetes集群的所有狀態(tài)信息都需要持久存儲(chǔ)于存儲(chǔ)系統(tǒng)etcd中。etcd是由CoreOS基于Raft協(xié)議開發(fā)的分布式鍵值存儲(chǔ)吉执》枰可用于服務(wù)發(fā)現(xiàn)。共享配置以及一致性保障戳玫。生產(chǎn)環(huán)境中應(yīng)該以etcd集群的方式運(yùn)行以確保其服務(wù)可用性熙掺,并需要制周期備份策略以確保數(shù)據(jù)安全可靠。
etcd還為其存儲(chǔ)的數(shù)據(jù)提供了監(jiān)聽(watch)機(jī)制咕宿。用于監(jiān)視和推送變更币绩,API Server是kubernetes集群中唯一能夠與etcd通信的組件。封裝了這種監(jiān)聽機(jī)制府阀。并借此同其他各組件高效協(xié)同缆镣。
2、Node組件
Node組件是集群中的“體力”輸出者试浙,因而一個(gè)集群通常會(huì)有多個(gè)Node以提供足夠的承載力來運(yùn)行容器化應(yīng)用和其他工作負(fù)載董瞻。
2.1 kubelet
kubelet是運(yùn)行于每個(gè)node節(jié)點(diǎn)之上的“節(jié)點(diǎn)代理”服務(wù),負(fù)責(zé)維護(hù)容器的生命周期田巴,同時(shí)也負(fù)責(zé)Volume(CSI)和網(wǎng)絡(luò)(CNI)的管理钠糊;其主要功能概括如下:
持續(xù)監(jiān)聽node的健康狀態(tài)并向master匯報(bào)。
基于用戶自定義的探針進(jìn)行存活狀態(tài)探測(cè)壹哺,并在任何Pod出現(xiàn)問題時(shí)將其重建為新實(shí)例抄伍。
準(zhǔn)備pod所需的數(shù)據(jù)卷
返回pod的狀態(tài)
在node節(jié)點(diǎn)執(zhí)行容器的健康檢測(cè)
2.2 容器運(yùn)行時(shí)環(huán)境
Pod是一組容器組成的集合并包含這些容器的管理機(jī)制。安并未額外定義進(jìn)程的邊界或其他更多抽象管宵,因此真正負(fù)責(zé)運(yùn)行容器的依然是底層的容器運(yùn)行時(shí)截珍。kubelet通過CRI(容器運(yùn)行時(shí)接口)可支持多種類型的OCI容器運(yùn)行時(shí),例如docker箩朴、 containerd笛臣、CRI-O、runC隧饼、fraki和kata Containers等
2.3 kube-proxy
kube-proxy也是需要運(yùn)行于集群中每個(gè)節(jié)點(diǎn)之上的服務(wù)進(jìn)程沈堡。它把API Server上的Service資源對(duì)象轉(zhuǎn)換為當(dāng)前節(jié)點(diǎn)上的iptables或與ipvs規(guī)則。這些規(guī)則能夠?qū)⒛切┌l(fā)往該Service對(duì)象ClusterIP的流量分發(fā)至它后端的Pod端點(diǎn)上燕雁。kube-proxy是kubernetes的核心網(wǎng)絡(luò)組件诞丽。它本質(zhì)上更象是Pod的代理及負(fù)載均衡器鲸拥。負(fù)責(zé)確保集群中Node、Service和Pod對(duì)象之間的有效通信 僧免。
kube-proxy 不同的版本可支持三種工作模式
UserSpace: kubernetes V1.1之前使用刑赶,V1.2及以后就已淘汰
IPtables: Kubernetes 1.1版本開始支持。1.2開始為默認(rèn)
IPVS: kubernetes 1.9引入到1.11為正式版本懂衩,需要安裝ipvadm撞叨、ipset工具包和加載ip_vs內(nèi)核模塊家妆。
2.4 kubectl
是一個(gè)通過命令行對(duì)kubernetes集群管理的工具
kubectl [command] [TYPE] [NAME] [flags]
2.4 dashboard
基于Web的用戶接口牙甫,用于可視化k8s集群。dashborad可用于獲取集群中資源對(duì)象的詳細(xì)信息椿息,Dashboard提供GUI法希,作為運(yùn)維人員枷餐,使用kubectl命令行工具管理足矣
2.5 coredns
CoreDNS負(fù)責(zé)為整個(gè)集群提供DNS服務(wù),它自1.11版本起默認(rèn)使用CoreDNS苫亦,一種靈活毛肋,可擴(kuò)展的DNS服務(wù),之前的版本用到的是kube-dns項(xiàng)目屋剑,SkyDNS則是更早一代的解決方案润匙。