一、背景
如何在 Kubernetes 集群中部署節(jié)點組件呢献宫?相信大家對 DaemonSet 并不陌生愿待,它能夠幫助我們將定義好的 Pod 部署到所有符合條件的 Node 上,這大大減輕了過去我們維護節(jié)點上各類守護進程的痛苦拉盾。
在阿里巴巴內(nèi)部的云原生環(huán)境中桨菜,存在不少網(wǎng)絡(luò)、存儲捉偏、GPU倒得、監(jiān)控等等相關(guān)的節(jié)點組件都是通過 DaemonSet 部署管理的。但是隨著近兩年 Kubernetes 集群規(guī)模越來越大夭禽,所有核心業(yè)務(wù)逐漸全量上云原生之后霞掺,我們越發(fā)感受到原生 DaemonSet 很難滿足大規(guī)模、高可用的復(fù)雜場景需求讹躯。
大家可以理解為原生的 DaemonSet 確實解決了 0 -> 1 的問題菩彬,避免了直接管理 Node 上各類軟件包和守護進程的難題,能做到用一致化的 Pod 來部署節(jié)點組件潮梯。但是在部署之后呢骗灶?我們面臨的是 1 -> N 的不斷迭代升級的問題了,而在升級能力方面秉馏,原生 DaemonSet 做的實在有些敷衍了事的感覺耙旦。
二、由來
相信多數(shù)人使用 DaemonSet 基本都是默認(rèn)的 RollingUpdate 滾動升級萝究,這本身是沒問題的母廷,問題就在于滾動升級時只支持了 maxUnavailable 一個策略,這就讓我們很難接受了糊肤。目前阿里巴巴內(nèi)的 Kubernetes 不少已經(jīng)做到單集群上萬節(jié)點琴昆,這些節(jié)點可能有不同的機型、拓?fù)涔萑唷⒑诵某潭纫瞪帷?nèi)核版本等等,而 DaemonSet 升級也覆蓋到這上萬節(jié)點上的 daemon Pod升酣、涉及所有節(jié)點上的應(yīng)用 Pod舷暮。
面對如此復(fù)雜和規(guī)模化的環(huán)境噩茄,原生 DaemonSet 沒有灰度下面、沒有分批、沒有暫停绩聘、沒有優(yōu)先級沥割,僅僅用一個 maxUnavailable 策略顯然是無法滿足的耗啦。要知道 daemon Pod 即使配置了 readinessProbe 往往也只能檢查容器內(nèi)進程是否啟動運行,而對于進程的運行情況很難考量机杜。
因此帜讲,即使 DaemonSet 發(fā)布了一個代碼有 bug 的版本,只要進程能正常啟動則 maxUnavailable 策略就無法保護椒拗,DaemonSet 會一直發(fā)布下去似将;如果升級開始了一段時間后才發(fā)現(xiàn)問題,那此時很可能故障范圍就已經(jīng)覆蓋到整個集群了蚀苛。
三 什么是OpenKruise
Kruise 是 cruise的諧音在验,'k' for Kubernetes. 字面意義巡航,豪華游艇堵未。寓意Kubernetes上應(yīng)用的自動巡航译红,滿載阿里巴巴多年應(yīng)用部署管理經(jīng)驗。
Kruise 的目標(biāo)是automate everything on Kubernetes ! Kruise 項目源自于阿里巴巴經(jīng)濟體應(yīng)用過去多年的大規(guī)模應(yīng)用部署兴溜、發(fā)布與管理的最佳實踐,源于容器平臺團隊對集團應(yīng)用規(guī)某苌拢化運維拙徽,規(guī)模化建站的能力诗宣,源于阿里云Kubernetes服務(wù)數(shù)千客戶的需求沉淀膘怕。Kruise 借力于云原生社區(qū),集成阿里巴巴云原生實踐之精華召庞,反哺社區(qū)岛心,指引業(yè)界云原生化最佳實踐,少走彎路篮灼。
四忘古、OpenKruise 核心特性
OpenKruise 是 Kubernetes 的一個標(biāo)準(zhǔn)擴展,它可以配合原生 Kubernetes 使用诅诱,并為管理應(yīng)用容器髓堪、sidecar、鏡像分發(fā)等方面提供更加強大和高效的能力娘荡。
核心功能
- 原地升級
原地升級是一種可以避免刪除干旁、新建 Pod 的升級鏡像能力。它比原生 Deployment/StatefulSet 的重建 Pod 升級更快炮沐、更高效争群,并且避免對 Pod 中其他不需要更新的容器造成干擾。
- Sidecar 管理
支持在一個單獨的 CR 中定義 sidecar 容器大年,OpenKruise 能夠幫你把這些 Sidecar 容器注入到所有符合條件的 Pod 中换薄。這個過程和 Istio 的注入很相似玉雾,但是你可以管理任意你關(guān)心的 Sidecar。
- 跨多可用區(qū)部署
定義一個跨多個可用區(qū)的全局 workload专控,容器抹凳,OpenKruise 會幫你在每個可用區(qū)創(chuàng)建一個對應(yīng)的下屬 workload。你可以統(tǒng)一管理他們的副本數(shù)伦腐、版本赢底、甚至針對不同可用區(qū)采用不同的發(fā)布策略。
...
CRD 列表
- CloneSet
提供更加高效柏蘑、確定可控的應(yīng)用管理和部署能力幸冻,支持優(yōu)雅原地升級、指定刪除咳焚、發(fā)布順序可配置洽损、并行/灰度發(fā)布等豐富的策略,可以滿足更多樣化的應(yīng)用場景革半。
- Advanced StatefulSet
基于原生 StatefulSet 之上的增強版本碑定,默認(rèn)行為與原生完全一致,在此之外提供了原地升級又官、并行發(fā)布(最大不可用)延刘、發(fā)布暫停等功能。
- SidecarSet
對 sidecar 容器做統(tǒng)一管理六敬,在滿足 selector 條件的 Pod 中注入指定的 sidecar 容器碘赖。
- UnitedDeployment
通過多個 subset workload 將應(yīng)用部署到多個可用區(qū)。
- BroadcastJob
配置一個 job外构,在集群中所有滿足條件的 Node 上都跑一個 Pod 任務(wù)普泡。
- Advanced DaemonSet
基于原生 DaemonSet 之上的增強版本,默認(rèn)行為與原生一致审编,在此之外提供了灰度分批撼班、按 Node label 選擇、暫停垒酬、熱升級等發(fā)布策略权烧。
五、未來規(guī)劃Roadmap
Kruise 核心在于自動化伤溉,我們將從不同維度解決 Kubernetes之上應(yīng)用的自動化般码,包括,部署乱顾,升級板祝,彈性擴縮容,Qos調(diào)節(jié)走净,健康檢查券时,遷移修復(fù)等等孤里。此次Kruise開源的內(nèi)容主要在應(yīng)用部署,升級方面橘洞,即一套增強版controller組件用于應(yīng)用的部署和級和運維捌袜。后續(xù),Kruise會依次開源智能化的彈性擴縮容組件炸枣,以及應(yīng)用Qos自調(diào)節(jié)能力的組件等虏等。