日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

KubeNode:阿里巴巴云原生 容器基础设施运维实践

發(fā)布時(shí)間:2025/3/20 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 KubeNode:阿里巴巴云原生 容器基础设施运维实践 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 周濤??阿里云技術(shù)專(zhuān)家
來(lái)源 | 阿里巴巴云原生公眾號(hào)

阿里巴巴節(jié)點(diǎn)運(yùn)維的挑戰(zhàn)

在阿里巴巴的場(chǎng)景下,做節(jié)點(diǎn)運(yùn)維面臨的挑戰(zhàn)主要來(lái)自于這幾個(gè)方面:規(guī)模、復(fù)雜性、穩(wěn)定性。

首先是規(guī)模大。從 18 年第一個(gè)集群的搭建,到現(xiàn)在線(xiàn)上共運(yùn)行著數(shù)百個(gè) ASI 集群、數(shù)十萬(wàn)個(gè)節(jié)點(diǎn),其中單集群的節(jié)點(diǎn)數(shù)最多有超過(guò)1萬(wàn)臺(tái)。在這之上,運(yùn)行著阿里巴巴集團(tuán)數(shù)萬(wàn)個(gè)不同的應(yīng)用,比如,大家熟知的淘寶、天貓等,總?cè)萜鲗?shí)例數(shù)有數(shù)百萬(wàn)規(guī)模。ASI 是指 Alibaba Serverless ?Infrastructure,也就是阿里巴巴 Serverless 基礎(chǔ)設(shè)施。ASI 的概念同時(shí)包含集群的管控面和節(jié)點(diǎn)兩方面。每一個(gè) ASI 集群都是調(diào)用 Aliyun 標(biāo)準(zhǔn)的 OpenAPI 創(chuàng)建的 ACK 托管版集群,然后在此之上,我們自研了調(diào)度器、開(kāi)發(fā)部署了很多的 addon,進(jìn)行功能增強(qiáng)、性能優(yōu)化,并對(duì)接集團(tuán)的各個(gè)系統(tǒng),并做到節(jié)點(diǎn)全托管,不需要應(yīng)用開(kāi)發(fā)運(yùn)維人員關(guān)心底層的容器基礎(chǔ)設(shè)施。

其次是環(huán)境非常復(fù)雜。目前 IaaS 層運(yùn)行著很多種異構(gòu)的機(jī)型,有x86服務(wù)器,也有 ARM 國(guó)產(chǎn)化機(jī)型,同時(shí)為了服務(wù)新計(jì)算、AI 的業(yè)務(wù),也有 GPU、FPGA 的機(jī)型。線(xiàn)上的內(nèi)核版本也非常多,4.19 是去年開(kāi)始規(guī)模上線(xiàn)的內(nèi)核版本,同時(shí) 3.10 / 4.9 內(nèi)核版本上的節(jié)點(diǎn)問(wèn)題也需要繼續(xù)支撐,不同的內(nèi)核版本演進(jìn)也需要具備規(guī)模化輪轉(zhuǎn)的運(yùn)維能力。目前上萬(wàn)個(gè)在線(xiàn)應(yīng)用包含了像淘寶、天貓、菜鳥(niǎo)、高德、餓了么、考拉、盒馬 等各種不同的業(yè)務(wù),同時(shí)跟在線(xiàn)應(yīng)用一起運(yùn)行著混部、安全容器的業(yè)務(wù),像大數(shù)據(jù)、離線(xiàn)計(jì)算、實(shí)時(shí)計(jì)算、搜索等這些業(yè)務(wù)類(lèi)型也都跟在線(xiàn)業(yè)務(wù)運(yùn)行在同一個(gè)主機(jī)環(huán)境中。

最后是對(duì)穩(wěn)定性的高要求。在線(xiàn)業(yè)務(wù)的特點(diǎn)是對(duì)延遲和抖動(dòng)非常敏感,單節(jié)點(diǎn)的抖動(dòng)、夯機(jī)、宕機(jī)等故障都可能會(huì)影響某個(gè)用戶(hù)在淘寶的下單付款,引發(fā)用戶(hù)的吐槽和投訴,所以整體對(duì)穩(wěn)定性的要求非常高,要求對(duì)單節(jié)點(diǎn)故障的處理有很高的及時(shí)性和有效性。

KubeNode:云原生節(jié)點(diǎn)運(yùn)維底座介紹

KubeNode,是阿里巴巴自研的基于云原生方式來(lái)管理和運(yùn)維節(jié)點(diǎn)的底座項(xiàng)目,相比于傳統(tǒng)的過(guò)程式的運(yùn)維手段,KubeNode 通過(guò) K8s 擴(kuò)展 CRD 以及對(duì)應(yīng)的一組 Operator,能提供完整的節(jié)點(diǎn)生命周期和節(jié)點(diǎn)組件生命周期管理,通過(guò)申明式、面向終態(tài)的方式,把節(jié)點(diǎn)及節(jié)點(diǎn)組件的管理變得跟管理 K8s 中的一個(gè)應(yīng)用一樣簡(jiǎn)單,并實(shí)現(xiàn)節(jié)點(diǎn)的高度一致性以及自愈修復(fù)的能力。

上圖右側(cè)是 KubeNode 一個(gè)簡(jiǎn)化的架構(gòu),整體是由這幾個(gè)部分組成的:

中心端有 Machine Operator 負(fù)責(zé)節(jié)點(diǎn)和節(jié)點(diǎn)組件管理,Remedy Operator 負(fù)責(zé)節(jié)點(diǎn)的故障自愈修復(fù)。節(jié)點(diǎn)側(cè)有 Kube Node Agent,這個(gè)單機(jī) agent 組件負(fù)責(zé) watch 中心 Machine Operator、Remedy Operator 生成的 CRD 對(duì)象實(shí)例,并執(zhí)行相應(yīng)的操作,像節(jié)點(diǎn)組件的安裝、故障自愈任務(wù)的執(zhí)行等。

配合著 KubeNode,阿里巴巴還使用 NPD 進(jìn)行單機(jī)的故障檢測(cè),以及對(duì)接 Kube Defender (阿里自研組件) ?進(jìn)行統(tǒng)一風(fēng)控。當(dāng)然社區(qū)版本的 NPD 提供的故障檢測(cè)項(xiàng)是比較有限的,阿里巴巴在社區(qū)的基礎(chǔ)上進(jìn)行了擴(kuò)展,結(jié)合阿里巴巴多年節(jié)點(diǎn)、容器運(yùn)維的實(shí)踐,加入了很多節(jié)點(diǎn)的故障檢測(cè)項(xiàng),大大豐富了單機(jī)故障檢測(cè)的能力。

1. KubeNode 和社區(qū)項(xiàng)目關(guān)系

  • github.com / kube-node:不相關(guān),該項(xiàng)目 2018 年初已停止。

  • ClusterAPI:KubeNode 可以作為 ClusterAPI 節(jié)點(diǎn)終態(tài)的補(bǔ)充。

功能對(duì)比:

這里解釋下阿里巴巴自研的 KubeNode 項(xiàng)目跟社區(qū)項(xiàng)目的關(guān)系。大家看到 kube-node 這個(gè)名字的時(shí)候,可能會(huì)覺(jué)得有點(diǎn)似曾相識(shí),在 github 上是有一個(gè)同名的項(xiàng)目 github.com/kube-node,但其實(shí)這個(gè)項(xiàng)目早在 2018 年初的時(shí)候就已經(jīng)停止了,所以只是名字相同,兩者并沒(méi)有關(guān)系。

另外社區(qū)的 ClusterAPI 是一個(gè)創(chuàng)建并管理 K8s 集群和節(jié)點(diǎn)的項(xiàng)目,這里對(duì)比了兩個(gè)項(xiàng)目的關(guān)系:

  • 集群創(chuàng)建:ClusterAPI 負(fù)責(zé)集群的創(chuàng)建,KubeNode 不提供此功能。
  • 節(jié)點(diǎn)創(chuàng)建:ClusterAPI 和 KubeNode 都可以創(chuàng)建節(jié)點(diǎn)。
  • 節(jié)點(diǎn)組件管理和終態(tài)維持:ClusterAPI 沒(méi)有提供相應(yīng)的功能,KubeNode 可以管理節(jié)點(diǎn)組件并保持終態(tài)。
  • 節(jié)點(diǎn)故障自愈:ClusterAPI 主要提供基于節(jié)點(diǎn)健康狀態(tài)重建節(jié)點(diǎn)的自愈能力;KubeNode 提供了更豐富的節(jié)點(diǎn)組件自愈功能,能對(duì)節(jié)點(diǎn)上的各種軟硬件故障進(jìn)行自愈修復(fù)。

總的來(lái)說(shuō),KubeNode 可以和 ClusterAPI 一起配合工作,是對(duì) ClusterAPI 的一個(gè)很好補(bǔ)充。

這里提到的節(jié)點(diǎn)組件,是指運(yùn)行在節(jié)點(diǎn)上的 kubelet,Docker 的軟件,阿里內(nèi)部使用 Pouch 作為我們的容器運(yùn)行時(shí)。除了 kubelet,Pouch 這些調(diào)度必須的組件外,還有用于分布式容器存儲(chǔ)、監(jiān)控采集、安全容器、故障檢測(cè)等總共十多個(gè)組件。

通常安裝升級(jí) kubelet,Docker 是通過(guò)類(lèi)似 Ansible 等面向過(guò)程的一次性動(dòng)作來(lái)完成的。在長(zhǎng)時(shí)間運(yùn)行過(guò)程中,軟件版本被意外修改或是碰到 bug 不能工作的問(wèn)題是很常見(jiàn)的,同時(shí)這些組件在阿里巴巴的迭代速度非常快,往往一兩周就需要發(fā)布推平一個(gè)版本。為了滿(mǎn)足組件快速迭代又能安全升級(jí)、版本一致的需求,阿里巴巴自研了 KubeNode,通過(guò)將節(jié)點(diǎn)以及節(jié)點(diǎn)組件通過(guò) K8s CRD 的方式進(jìn)行描述,并進(jìn)行面向終態(tài)的管理,從而確保版本一致性,配置一致性以及運(yùn)行態(tài)正確性。

2. KubeNode - Machine Operator

上圖是 Machine Operator 的架構(gòu),一個(gè)標(biāo)準(zhǔn)的 Operator 設(shè)計(jì):擴(kuò)展的一組 CRD 再加上中心的控制器。
CRD 定義包括:跟節(jié)點(diǎn)相關(guān)的 Machine、MachineSet,以及跟節(jié)點(diǎn)組件相關(guān)的 MachineComponent、MachineComponentSet。

中心端的控制器包括:Machine Controller、MachineSet Controller、MachineComponentSet Controller,分別用來(lái)控制節(jié)點(diǎn)的創(chuàng)建、導(dǎo)入,節(jié)點(diǎn)組件的安裝、升級(jí)。

Infra Provider 具有可擴(kuò)展性,可以對(duì)接不同的云廠(chǎng)商,目前只對(duì)接了阿里云,但是也可通過(guò)實(shí)現(xiàn)相應(yīng)的 Provider 實(shí)現(xiàn)對(duì)接 AWS、Azure 等不同的云廠(chǎng)商。

單機(jī)上的 KubeNode 負(fù)責(zé) watch CRD 資源,當(dāng)發(fā)現(xiàn)有新的對(duì)象實(shí)例時(shí),則進(jìn)行節(jié)點(diǎn)組件的安裝升級(jí),定期檢查各個(gè)組件是否運(yùn)行正常,并上報(bào)組件的運(yùn)行狀態(tài)。

1)Use Case:節(jié)點(diǎn)導(dǎo)入

下面分享基于 KubeNode 對(duì)已有節(jié)點(diǎn)的導(dǎo)入過(guò)程。

首先用戶(hù)會(huì)在我們的多集群管理系統(tǒng)中提交一個(gè)已有節(jié)點(diǎn)的導(dǎo)入操作,接下來(lái)系統(tǒng)先下發(fā)證書(shū),并安裝 KubeNode Agent,等 agent 正常運(yùn)行并啟動(dòng)之后,第3步會(huì)提交 Machine CRD,接下來(lái) Machine Controller 會(huì)修改狀態(tài)為導(dǎo)入 phase,并等 Node ready 之后從 Machine 上同步 label / taint 到 Node。第 5 步是 MachineComponentSet, 根據(jù) Machine 的信息確定要安裝的節(jié)點(diǎn)組件,并同步到 Machine 上。最后 Kube Node Agent 會(huì) watch 到 Machine、MachineComponent 的信息,完成節(jié)點(diǎn)組件的安裝,并等所有組件運(yùn)行正常后,節(jié)點(diǎn)導(dǎo)入操作完成。整個(gè)過(guò)程跟用戶(hù)提交一個(gè) Deployment 并最終啟動(dòng)一個(gè)業(yè)務(wù) Pod 是類(lèi)似的。

節(jié)點(diǎn)組件的終態(tài)一致主要包含了軟件版本、軟件配置和運(yùn)行狀態(tài)的正確、一致。

2)Use Case:組件升級(jí)

這里介紹下組件的升級(jí)過(guò)程,主要依賴(lài)的是 MachineComponentSet Controller 提供的分批次升級(jí)的能力。

首先用戶(hù)在多集群管理系統(tǒng)上面提交一個(gè)組件升級(jí)操作,然后就進(jìn)入一個(gè)逐批次循環(huán)升級(jí)的過(guò)程:先更新 MachineComponentSet 一個(gè)批次升級(jí)的機(jī)器數(shù)量是多少,之后 MachineComponentSet Controller 會(huì)計(jì)算并更新相應(yīng)數(shù)量的節(jié)點(diǎn)上組件的版本信息。接下來(lái) Kube Node Agent watch 到組件的變化,執(zhí)行新版本的安裝,并檢查狀態(tài)正常后上報(bào)組件狀態(tài)正常。當(dāng)這個(gè)批次所有的組件都升級(jí)成功后,再開(kāi)始下一個(gè)批次的升級(jí)操作。

上面描述的單集群?jiǎn)蝹€(gè)組件的升級(jí)流程是比較簡(jiǎn)單的,但對(duì)于線(xiàn)上十多個(gè)組件、上百個(gè)集群,要在所有的集群都完成版本推平工作就不那么簡(jiǎn)單了,我們通過(guò) ASIOps 集群統(tǒng)一運(yùn)維平臺(tái)進(jìn)行操作。在 ASIOps 系統(tǒng)中,將上百個(gè)集群配置到了有限的幾個(gè)發(fā)布流水線(xiàn),每條發(fā)布流水線(xiàn)都按照:測(cè)試 -> 預(yù)發(fā) -> 正式 的順序編排。一次正常的發(fā)布流程,就是選定一條發(fā)布流水線(xiàn),按其預(yù)先設(shè)定好的集群順序進(jìn)行發(fā)布,在每個(gè)集群內(nèi)部,又按照 1/5/10/50/100/… 的順序進(jìn)行自動(dòng)發(fā)布,每一個(gè)批次發(fā)布完成,會(huì)觸發(fā)健康巡檢,如果有問(wèn)題則暫停自動(dòng)發(fā)布,沒(méi)問(wèn)題的話(huà)等觀察期結(jié)束,則自動(dòng)開(kāi)始下一個(gè)批次的發(fā)布。通過(guò)這樣的方式,做到了既安全又高效的完成一個(gè)組件新版本發(fā)布上線(xiàn)的過(guò)程。

3. KubeNode - Remedy Operator

接下來(lái)分享 KubeNode 里面的 Remedy Operator,也是一個(gè)標(biāo)準(zhǔn)的 Operator,用來(lái)做故障自愈修復(fù)。

Remedy Operator 也是由一組 CRD 以及對(duì)應(yīng)的控制器組成。CRD 定義包括:NodeRemedier 和 RemedyOperationJob,控制器包括:Remedy Controller、RemedyJob Controller,同時(shí)也有故障自愈規(guī)則的注冊(cè)中心,在單機(jī)側(cè)有 NPD 和 Kube Node Agent。

Host Doctor 是在中心側(cè)的一個(gè)獨(dú)立的故障診斷系統(tǒng),對(duì)接云廠(chǎng)商獲取主動(dòng)運(yùn)維事件并轉(zhuǎn)換為節(jié)點(diǎn)上的故障 Condition。在阿里云公有云上,ECS 所在的物理機(jī)發(fā)生的硬件類(lèi)的故障或是計(jì)劃中的運(yùn)維操作,都會(huì)通過(guò)標(biāo)準(zhǔn) OpenAPI 的形式獲取,對(duì)接后就可以提前感知節(jié)點(diǎn)的問(wèn)題,并提前自動(dòng)遷移節(jié)點(diǎn)上的業(yè)務(wù)來(lái)避免故障。

Use Case:夯機(jī)自愈

這里以夯機(jī)自愈的案例來(lái)介紹一個(gè)典型的自愈流程。

首先我們會(huì)在多集群管理系統(tǒng) ASI Captain 上配置下發(fā) CRD 描述的自愈規(guī)則,并且這些規(guī)則是可以靈活動(dòng)態(tài)增加的,針對(duì)每一種 Node Condition 都可以配置一條對(duì)應(yīng)的修復(fù)操作。

接下來(lái)節(jié)點(diǎn)上的 NPD 會(huì)周期性的檢查是否有發(fā)生各種類(lèi)型的故障,當(dāng)發(fā)現(xiàn)內(nèi)核日志中有出現(xiàn) “task xxx blocked for more than 120 seconds” 的異常日志之后,判定節(jié)點(diǎn)夯機(jī),并給 Node 上報(bào)故障 Condition,Remedy Controller watch 到變化后,就觸發(fā)自愈修復(fù)流程:首先會(huì)調(diào)用 Kube Defender 風(fēng)控中心接口判斷當(dāng)前自愈操作是否允許執(zhí)行,通過(guò)后就生成 RemedyOperationJob 自愈任務(wù),Kube Node Agent watch 到 job 后執(zhí)行自愈操作。

可以看到整個(gè)自愈流程不依賴(lài)于外部第三方系統(tǒng),通過(guò) NPD 做故障檢測(cè),Remedy Operator 執(zhí)行自愈修復(fù),以云原生的方式完成了整個(gè)的自愈修復(fù)流程,最快可以做到分鐘級(jí)的故障發(fā)現(xiàn)并修復(fù)。同時(shí),通過(guò)對(duì) NPD 檢測(cè)規(guī)則的增強(qiáng),處理的故障范圍覆蓋了從硬件故障、OS 內(nèi)核故障、到組件故障的全鏈路修復(fù)。值得強(qiáng)調(diào)的是,所有的自愈操作都會(huì)對(duì)接 Kube Defender 統(tǒng)一風(fēng)控中心,進(jìn)行分鐘級(jí)、小時(shí)級(jí)、天級(jí)別的自愈修復(fù)流控,防止當(dāng)出現(xiàn) Region / Zone 級(jí)別斷網(wǎng)、大規(guī)模 io hang、或是其他大面積軟件 bug 的情況下,觸發(fā)對(duì)整個(gè) Region 所有節(jié)點(diǎn)的故障自愈,引發(fā)更嚴(yán)重的二次故障。

KubeNode 數(shù)據(jù)體系

KubeNode 數(shù)據(jù)體系建設(shè)的好壞對(duì)整體度量并提升 SLO 起著非常重要的作用。

在節(jié)點(diǎn)側(cè),NPD 會(huì)檢測(cè)故障并上報(bào)事件中心,同時(shí) walle 是單機(jī)側(cè)的指標(biāo)采集組件,會(huì)采集節(jié)點(diǎn)以及容器的各種指標(biāo)項(xiàng)信息,包括像 CPU / Memory / IO / Network 等常見(jiàn)的指標(biāo),以及很多其他的像內(nèi)核、安全容器等的指標(biāo)項(xiàng)。中心側(cè) Promethes (阿里云公有云上的 ARMS 產(chǎn)品) 會(huì)采集所有節(jié)點(diǎn)的指標(biāo)并進(jìn)行存儲(chǔ),同時(shí)也采集擴(kuò)展過(guò)的 Kube State Metrics 的數(shù)據(jù),獲取 Machine Operator 和 Remedy Operator 的關(guān)鍵指標(biāo)信息。在獲取到這些數(shù)據(jù)的基礎(chǔ)之上,再在上層面向用戶(hù),配置監(jiān)控大盤(pán)、故障報(bào)警、以及全鏈路診斷的能力。

通過(guò)數(shù)據(jù)體系的建設(shè),我們就可以用來(lái)做資源利用率的分析統(tǒng)計(jì),可以提供實(shí)時(shí)的監(jiān)控報(bào)警,進(jìn)行故障分析統(tǒng)計(jì),也可以分析整體 KubeNode 中的節(jié)點(diǎn)以及節(jié)點(diǎn)組件的覆蓋率、一致率、節(jié)點(diǎn)自愈的效率,并提供針對(duì)節(jié)點(diǎn)的全鏈路診斷功能,當(dāng)排查節(jié)點(diǎn)問(wèn)題時(shí),可以查看該節(jié)點(diǎn)上歷史發(fā)生過(guò)的所有的事件,從而幫助用戶(hù)快速定位原因。

未來(lái)展望

目前 KubeNode 已經(jīng)覆蓋了阿里巴巴集團(tuán)的所有的 ASI 集群,接下來(lái),將隨著阿里巴巴集團(tuán)“統(tǒng)一資源池”的項(xiàng)目,推進(jìn) KubeNode 覆蓋更大的范圍、更多的場(chǎng)景,讓云原生的容器基礎(chǔ)設(shè)施運(yùn)維架構(gòu)發(fā)揮更大的價(jià)值。

作者簡(jiǎn)介

周濤??阿里云技術(shù)專(zhuān)家,2017 年加入的阿里,過(guò)去幾年一直負(fù)責(zé)阿里巴巴數(shù)十萬(wàn)規(guī)模集群節(jié)點(diǎn)管控系統(tǒng)的研發(fā)工作,參與了歷年的雙十一大促。隨著 2018 年底開(kāi)始的集團(tuán)上云項(xiàng)目,管理的節(jié)點(diǎn)從云下的物理機(jī)覆蓋到了阿里云公有云上的神龍裸金屬服務(wù)器,并支撐 雙11 大促實(shí)現(xiàn)了交易核心系統(tǒng)的全面云原生化改造。

總結(jié)

以上是生活随笔為你收集整理的KubeNode:阿里巴巴云原生 容器基础设施运维实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。