溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Kubernetes架構(gòu)及組件介紹

發(fā)布時(shí)間:2022-01-10 17:07:54 來(lái)源:億速云 閱讀:131 作者:柒染 欄目:云計(jì)算

本篇文章為大家展示了如何進(jìn)行Kubernetes架構(gòu)及組件介紹,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

1. Kubernetes簡(jiǎn)介

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)者。

2. Kubernetes 架構(gòu)及組件介紹

2.1 kubernetes 架構(gòu)

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 Kubernetes組件介紹

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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI