您好,登錄后才能下訂單哦!
本篇文章為大家展示了如何進(jìn)行Kubernetes架構(gòu)及組件介紹,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
Kubernetes是谷歌開(kāi)源的容器集群管理系統(tǒng),是Google多年大規(guī)模容器管理技術(shù)Borg的開(kāi)源版本,主要功能包括:
基于容器的應(yīng)用部署、維護(hù)和滾動(dòng)升級(jí)
負(fù)載均衡和服務(wù)發(fā)現(xiàn)
跨機(jī)器和跨地區(qū)的集群調(diào)度
自動(dòng)伸縮
無(wú)狀態(tài)服務(wù)和有狀態(tài)服務(wù)
廣泛的Volume支持
插件機(jī)制保證擴(kuò)展性
Kubernetes發(fā)展非常迅速,已經(jīng)成為容器編排領(lǐng)域的領(lǐng)導(dǎo)者。
Kubernetes主要由以下幾個(gè)核心組件構(gòu)成:
etcd 保存整個(gè)集群的狀態(tài);
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)度策略將實(shí)例(Pod)調(diào)度到相應(yīng)的主機(jī)上;
kubelet 負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé)存儲(chǔ)卷和網(wǎng)絡(luò)的管理;
container runtime 負(fù)責(zé)鏡像管理以及容器的真正執(zhí)行,在我們系統(tǒng)中指的是Docker
kube-proxy 負(fù)責(zé)為應(yīng)用提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡
推薦的插件
helm - kubernetes包管理工具
kube-dns/coreDNS 負(fù)責(zé)為整個(gè)集群提供DNS服務(wù)
Ingress Controller 為服務(wù)提供外網(wǎng)入口
Heapster 提供資源監(jiān)控
Dashboard 提供GUI
Federation 提供跨可用區(qū)的集群
Fluentd-elasticsearch 提供集群日志采集、存儲(chǔ)與查詢
2.2.1 etcd
etcd是基于Raft一致性算法開(kāi)發(fā)的分布式key-value存儲(chǔ),可用于服務(wù)發(fā)現(xiàn)、共享配置以及一致性保障(如數(shù)據(jù)庫(kù)選主、分布式鎖等)
etcd主要功能:
基本的key-value存儲(chǔ)
監(jiān)聽(tīng)機(jī)制
key的過(guò)期及續(xù)約機(jī)制,用于監(jiān)控和服務(wù)發(fā)現(xiàn)
原子CAS和CAD,用于分布式鎖和leader選舉
Etcd基于RAFT的一致性
leader節(jié)點(diǎn)選舉方法
初始啟動(dòng)時(shí),節(jié)點(diǎn)處于follower狀態(tài)并被設(shè)定一個(gè)election timeout,如果在這一時(shí)間周期內(nèi)沒(méi)有收到來(lái)自leader的心跳檢測(cè),節(jié)點(diǎn)將發(fā)起選舉,將自己切換為candidate(候選人)節(jié)點(diǎn)之后,向集群中的其他follow節(jié)點(diǎn)發(fā)送請(qǐng)求,詢問(wèn)其是否選舉自己為leader
當(dāng)收到來(lái)自集群中過(guò)半數(shù)節(jié)點(diǎn)的接受投票后,節(jié)點(diǎn)即成為leader,開(kāi)始接收保存client的數(shù)據(jù)并向其他的follower節(jié)點(diǎn)同步日志。如果沒(méi)有達(dá)成一致,則candidate節(jié)點(diǎn)隨機(jī)選擇一個(gè)等待時(shí)間(150ms ~ 300ms)再次發(fā)起投票,得到集群中半數(shù)以上的follower接受的candidate將成為leader
leader節(jié)點(diǎn)依靠定時(shí)向follower節(jié)點(diǎn)發(fā)送心跳檢測(cè)來(lái)保持其地位
任何時(shí)候如果其他follower在election timeout期間沒(méi)有收到來(lái)自leader的心跳檢測(cè),同樣會(huì)將自己的狀態(tài)切換為candidate并發(fā)起選舉。每成功選舉一次,新leader的步進(jìn)數(shù)(Term)都會(huì)比之前l(fā)eader的步進(jìn)數(shù)加1
失效處理
leader失效:其他沒(méi)有收到心跳檢測(cè)的節(jié)點(diǎn)將發(fā)起新的選舉,當(dāng)leader恢復(fù)后由于步進(jìn)數(shù)小自動(dòng)成為follower(日志會(huì)被新leader的日志覆蓋)
follower節(jié)點(diǎn)不可用:follower節(jié)點(diǎn)不可用的情況相對(duì)比較容易解決。因?yàn)榧褐械娜罩緝?nèi)容始終是從leader節(jié)點(diǎn)同步,只要這一節(jié)點(diǎn)再次加入集群時(shí)重新從leader節(jié)點(diǎn)處復(fù)制日志即可
多個(gè)候選人(candidate):沖突后candidate將隨機(jī)選擇一個(gè)等待時(shí)間(150ms ~ 300ms)再次發(fā)起投票,得到集群中半數(shù)以上的follower接受的candidate將成為leader
講到這里可能有同學(xué)發(fā)現(xiàn)Etcd和Zookeeper、Consul等一致性協(xié)議實(shí)現(xiàn)框架有些類似,的確這些中間件是比較類似的,關(guān)于其中的異同點(diǎn),大家可以自行查閱資料。
2.2.2 kube-apiserver
kube-apiserver是Kubernetes最重要的核心組件之一,主要提供了如下功能:
提供集群管理的REST API接口,包括認(rèn)證授權(quán)、數(shù)據(jù)校驗(yàn)以及集群狀態(tài)變更等
提供同其他模塊之間的數(shù)據(jù)交互(其他模塊通過(guò)API Server查詢或修改數(shù)據(jù),只有API Server才直接操作etcd)
2.2.3 kube-scheduler
kube-scheduler負(fù)責(zé)分配調(diào)度Pod到集群內(nèi)的節(jié)點(diǎn)上,它監(jiān)聽(tīng)kube-apiserver,查詢還未分配Node的Pod,然后根據(jù)調(diào)度策略為這些Pod分配節(jié)點(diǎn)
通過(guò)以下三種方式可以指定Pod只運(yùn)行在特定的Node節(jié)點(diǎn)上
nodeSelector:只調(diào)度到匹配指定label的Node上
nodeAffinity:功能更豐富的Node選擇器,比如支持集合操作
podAffinity:調(diào)度到滿足條件的Pod所在的Node上
2.2.4 kube-controller-manager
kube-controller-manager是Kubernetes的大腦,通過(guò)kube-apiserver監(jiān)控整個(gè)集群的狀態(tài),并確保集群處于預(yù)期的工作狀態(tài),它由一系列的控制器組成,這些控制器主要包括三組:
1. 必須啟動(dòng)的控制器
eploymentController
DaemonSetController
NamesapceController
ReplicationController
RelicaSet
JobController
...
2. 默認(rèn)啟動(dòng)的控制器
NodeController
ServiceController
PVBinderController
...
3. 默認(rèn)禁止的可選控制器
BootstrapSignerController
TokenCleanerController
...
2.2.5 Kubelet
每個(gè)Node節(jié)點(diǎn)上都運(yùn)行一個(gè)kubelet守護(hù)進(jìn)程,默認(rèn)監(jiān)聽(tīng)10250端口,接收并執(zhí)行master發(fā)來(lái)的指令,管理Pod及Pod中的容器。每個(gè)kubelet進(jìn)程會(huì)在API Server上注冊(cè)節(jié)點(diǎn)自身信息,定期向master節(jié)點(diǎn)匯報(bào)節(jié)點(diǎn)的資源使用情況
節(jié)點(diǎn)管理
主要是節(jié)點(diǎn)自注冊(cè)和節(jié)點(diǎn)狀態(tài)更新:
Kubelet可以通過(guò)設(shè)置啟動(dòng)參數(shù) --register-node 來(lái)確定是否向API Server注冊(cè)自己;
如果Kubelet沒(méi)有選擇自注冊(cè)模式,則需要用戶自己配置Node資源信息,同時(shí)需要在Kubelet上配置集群中API Server的信息;
Kubelet在啟動(dòng)時(shí)通過(guò)API Server注冊(cè)節(jié)點(diǎn)信息,并定時(shí)向API Server發(fā)送節(jié)點(diǎn)狀態(tài)消息,API Server在接收到新消息后,將信息寫(xiě)入etcd
容器健康檢查
Pod通過(guò)兩類探針檢查容器的健康狀態(tài)
LivenessProbe 存活探針:通過(guò)該探針判斷容器是否健康,告訴Kubelet一個(gè)容器什么時(shí)候處于不健康的狀態(tài)。如果LivenessProbe探針探測(cè)到容器不健康,則kubelet將刪除該容器,并根據(jù)容器的重啟策略做相應(yīng)的處理。如果一個(gè)容器不包含LivenessProbe探針,那么kubelet認(rèn)為該容器的LivenessProbe探針?lè)祷氐闹涤肋h(yuǎn)是“Success”。
ReadinessProbe 就緒探針:用于判斷容器是否啟動(dòng)完成且準(zhǔn)備接收請(qǐng)求。如果 ReadinessProbe 探針探測(cè)到失敗,則Pod的狀態(tài)將被修改。Endpoint Controller將從Service的Endpoint中刪除包含該容器所在Pod的IP地址的Endpoint條目。
2.2.6 kube-proxy
每臺(tái)機(jī)器上都運(yùn)行一個(gè)kube-proxy服務(wù),它監(jiān)聽(tīng)API Server中service和Pod的變化情況,并通過(guò)userspace、iptables、ipvs等proxier來(lái)為服務(wù)配置負(fù)載均衡
代理模式(proxy-mode)提供如下三種類型:
1) userspace
最早的負(fù)載均衡方案,它在用戶空間監(jiān)聽(tīng)一個(gè)端口,所有請(qǐng)求通過(guò) iptables 轉(zhuǎn)發(fā)到這個(gè)端口,然后在其內(nèi)部負(fù)載均衡到實(shí)際的 Pod。service的請(qǐng)求會(huì)先從用戶空間進(jìn)入內(nèi)核iptables,然后再回到用戶空間(kube-proxy),由kube-proxy完成后端Endpoints的選擇和代理工作,這樣流量從用戶空間進(jìn)出內(nèi)核帶來(lái)的性能損耗是不可接受的,所以產(chǎn)生了iptables的代理模式
2) iptables:
iptables mode完全使用iptables來(lái)完成請(qǐng)求過(guò)濾和轉(zhuǎn)發(fā)。但是如果集群中存在大量的Service/Endpoint,那么Node上的iptables rules將會(huì)非常龐大,添加或者刪除iptables規(guī)則會(huì)引起較大的延遲。
3) ipvs:
為了解決存在大量iptables規(guī)則時(shí)的網(wǎng)絡(luò)延遲的問(wèn)題,Kubernetes引入了ipvs的模式,(ipvs是LVS - Linux Virtual Server 的重要組成部分,最早是由中國(guó)的章文嵩博士推出的一個(gè)開(kāi)源項(xiàng)目,提供軟件負(fù)載均衡的解決方案),下面是ipvs模式的原理圖:
上述內(nèi)容就是如何進(jìn)行Kubernetes架構(gòu)及組件介紹,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。