容器/Kubernetes開發(fā)者工作內(nèi)容有哪些?
近期我的知識(shí)星球,有一些學(xué)員在問容器/Kubernetes 開發(fā)一般有哪些工作內(nèi)容。不少人會(huì)覺得 Kubernetes 開發(fā)偏運(yùn)維開發(fā)。其實(shí)不是的,Kubernetes 開發(fā)也是一個(gè)純純的研發(fā)崗位。今天就來分享下 Kuberentes 開發(fā)中涉及到的工作內(nèi)容,供你未來選擇時(shí)參考。
我會(huì)從以下幾個(gè)維度來跟你分享下 Kubernetes 開發(fā)的內(nèi)容:
- 產(chǎn)品類型;
- 工作內(nèi)容;
提示:因?yàn)?Kubernetes 開發(fā)涉及到的產(chǎn)品、內(nèi)容和細(xì)節(jié)太多,文章有不對(duì)的地方,還請(qǐng)多包容。
一、產(chǎn)品類型
圍繞著 Kubernetes 有很多產(chǎn)品線類型,例如:
- 容器云平臺(tái): Kubernetes 開發(fā)中最基礎(chǔ)的平臺(tái),通常包括:集群生命周期管理、Kubernetes 資源生命周期管理、授權(quán)、網(wǎng)絡(luò)、存儲(chǔ)等能力。
- 多集群管理(混合云、分布式云): 單個(gè)集群的 Kubenretes 能夠接納的 Node 數(shù)一定是有限的,當(dāng)單集群不能容納更多節(jié)點(diǎn),但又需要更多節(jié)點(diǎn)的時(shí)候,只能拆分集群。拆分集群就會(huì)帶來很多問題,例如:應(yīng)用的分發(fā)、應(yīng)用更新、監(jiān)控、日志等的查看等。這時(shí)候,就需要一個(gè)具備統(tǒng)一管控能力的多集群管理平臺(tái),能夠統(tǒng)一管控、調(diào)度多個(gè)集群。該平臺(tái)主要聚焦在多集群應(yīng)用分發(fā)能力的建設(shè);
- Serverless Kubernetes: Serverless Kubernetes 是 Kubernetes 集群是 Serverless 理念的一個(gè)落地產(chǎn)品形態(tài)。Serverless Kubernetes 集群核心目的是將 Kubernetes 的 Master 節(jié)點(diǎn) Serverless 化。也就是讓用戶,不用關(guān)注 Kubernetes 集群控制面組件的運(yùn)維,這部分運(yùn)維交給云廠商來負(fù)責(zé)。以此,簡(jiǎn)化 Kubernetes 集群的運(yùn)維復(fù)雜度;
- Serverless Pod(彈性容器): 傳統(tǒng) Kubernetes 架構(gòu)一般以節(jié)點(diǎn)為中心,需要基于云服務(wù)器等資源節(jié)點(diǎn)搭建集群,并圍繞節(jié)點(diǎn)進(jìn)行運(yùn)維管理。隨著業(yè)務(wù)規(guī)模的擴(kuò)大和節(jié)點(diǎn)數(shù)的增加,這種架構(gòu)在容器應(yīng)用的部署和運(yùn)行等方面往往存在諸多局限性,例如節(jié)點(diǎn)運(yùn)維復(fù)雜、資源利用率低、資源擴(kuò)容速度慢等問題。Serverless Pod 底層基于 Virtual Kubelet 技術(shù),能夠讓用戶快速的庫(kù)容一個(gè) Pod,而不用關(guān)注底層節(jié)點(diǎn)的購(gòu)買、創(chuàng)建和初始化;
- 邊緣容器: 邊緣計(jì)算容器解決方案使用戶能夠在邊緣設(shè)備上部署和管理容器化應(yīng)用,以減少延遲并提高響應(yīng)速度。
- 鏡像倉(cāng)庫(kù): 鏡像倉(cāng)庫(kù)用于存儲(chǔ)和管理 Docker 鏡像,并提供安全性、訪問控制和快速部署。
- Serverless 云函數(shù): 以函數(shù)形態(tài)運(yùn)行應(yīng)用。以此,為基礎(chǔ)提供整個(gè)無服務(wù)器運(yùn)行環(huán)境;
- 異步任務(wù)平臺(tái): 基于 Kubernetes CronJob/Job 封裝的一個(gè)平臺(tái),用來運(yùn)行異步任務(wù),任務(wù)以 Pod 的形式運(yùn)行。
二、工作內(nèi)容
1. 集群生命周期管理
集群 CURD、節(jié)點(diǎn) CURD、Workerload(Deployment、StatefulSet、DaemonSet、Job、CronJob) CURD 等。
(1) 集群生命周期管理
集群生命周期管理包括:集群創(chuàng)建、集群升級(jí)、集群刪除、集群查詢等。
集群創(chuàng)建中,需要去申請(qǐng)很多資源,例如:Etcd、VPC、云盤、虛擬機(jī)、負(fù)載均衡等。公有云環(huán)境下,是通過調(diào)用云 API 接口來申請(qǐng)創(chuàng)建的。但如果是私有云,可能沒有相關(guān)的 API 接口供調(diào)用。這時(shí)候,還會(huì)涉及到集群部署平臺(tái)的開發(fā)。
目前集群初始化有很多種方法,例如:可以從 0 到 1 適配一套汲取初始化流程,但目前用的比較多的是使用 cluster-api 來創(chuàng)建一套集群。
(2) 節(jié)點(diǎn)生命周期管理
節(jié)點(diǎn)生命周期管理包括對(duì)節(jié)點(diǎn)的:增加、刪除、添加已有節(jié)點(diǎn)、查詢、升級(jí)等操作。在公有云廠商中,例如:阿里云、騰訊云,為了提高對(duì)節(jié)點(diǎn)的管理和運(yùn)維效率,通常會(huì)基于節(jié)點(diǎn)抽象出一個(gè)節(jié)點(diǎn)池的概念。所以,節(jié)點(diǎn)管理中也會(huì)涉及到節(jié)點(diǎn)池的管理。
節(jié)點(diǎn)生命周期管理底層還會(huì)涉及到非常多的工作,例如:節(jié)點(diǎn)初始化架構(gòu)設(shè)計(jì)、節(jié)點(diǎn)初始化相關(guān)組件開發(fā)、虛擬機(jī)的 CURD 等。
2. Workload 生命周期管理
Workload 管理主要包括:Deployment、StatefulSet、DaemonSet、Job、CronJob 等資源的 CURD。在公有云前端控制臺(tái),通常會(huì)將這些資源中的核心參數(shù)暴露給控制臺(tái)界面,方便用戶直接通過界面進(jìn)行操作,降低負(fù)載創(chuàng)建難度,提高負(fù)載創(chuàng)建效率。
在很多 Kubernetes 集群中,還會(huì)有一個(gè)專門的 Pod 管理頁(yè)面,專門用來管理 Pod,例如:Pod 的日志、事件、登錄等操作。因此也會(huì)涉及到相關(guān)功能的開發(fā),例如:登錄 Pod 功能的組件開發(fā)。
底層是通過調(diào)用 client-go 來訪問 Kubernetes 集群中的對(duì)應(yīng)資源的,所以會(huì)涉及到管控面組件開發(fā)和 client-go 相關(guān)接口的調(diào)用。
3. 網(wǎng)絡(luò)相關(guān)能力開發(fā)
企業(yè)通常都有自己的內(nèi)外網(wǎng)路環(huán)境。在 Kubernetes 集群中,也需要將 Kubernetes 的整個(gè)網(wǎng)絡(luò)環(huán)境跟企業(yè)自己的內(nèi)外網(wǎng)絡(luò)環(huán)境進(jìn)行適配和打通。所以,容器/Kubernetes 開發(fā)中,還需要開發(fā)網(wǎng)絡(luò)相關(guān)組件,并對(duì)網(wǎng)絡(luò)進(jìn)行適配。
網(wǎng)絡(luò)開發(fā)一般包括以下內(nèi)容:
- 網(wǎng)絡(luò)適配:跟網(wǎng)絡(luò)團(tuán)隊(duì)合作,一起打通整個(gè) Kubernetes 的網(wǎng)絡(luò)環(huán)境;
- CNI 組件的開發(fā)和適配:例如:Cillium 組件的魔改和適配;
上面介紹了網(wǎng)絡(luò)基礎(chǔ)組件的開發(fā)和適配。此外,Kubernetes 集群中的網(wǎng)絡(luò)能力開發(fā)還涉及到 Service、Ingress、Egress 等能力的開發(fā)。例如:負(fù)載均衡組件的開發(fā),通常會(huì)開發(fā)一個(gè) service-controller,通過 List-Watch Kubernetes 集群中的 Service 資源,調(diào)用負(fù)載均衡相關(guān)的 API 接口,創(chuàng)建內(nèi)外網(wǎng)負(fù)載均衡器。并將 Service、Pod 等信息上報(bào)給負(fù)載均衡中心;
4. 彈性伸縮伸縮
設(shè)計(jì)對(duì) Kubernetes 內(nèi)資資源 HPA、VPA、EHPA 組件的 CURD 操作。底層是通過調(diào)用 client-go 來訪問 Kubernetes 集群中的對(duì)應(yīng)資源的。
HPA/VPA/EHPA 用來對(duì) Pod 進(jìn)行彈性伸縮。在 Kuberntes 集群中,還會(huì)涉及到對(duì) Node 的彈性伸縮。目前對(duì) Node 的彈性伸縮基本都是基于 Cluster Autoscaler 來進(jìn)行開發(fā)的。Cluster Autoscaler 會(huì)調(diào)用節(jié)點(diǎn)的伸縮組。
所以彈性伸縮能力還需要 Kubernetes 去適配 Cluster Autoscaler 組件以及跟節(jié)點(diǎn)的伸縮組進(jìn)行交互(接口調(diào)用)。
5. 配置管理
主要是對(duì) Kubernetes 內(nèi)置資源 ConfigMap、Secret 資源的 CURD 操作。底層是通過調(diào)用 client-go 來訪問 Kubernetes 集群中的對(duì)應(yīng)資源的。
6. Kubernetes 授權(quán)管理
主要設(shè)計(jì)對(duì) Role、ClusterRole、RoleBinding、ClusterRoleBinding、ServiceAccount 等 Kubernetes 內(nèi)置資源的 CURD。
Role、ClusterRole、ServiceAccount 中的授權(quán)主體通常需要跟企業(yè)內(nèi)部的授權(quán)主體進(jìn)行適配和打通。
底層是通過調(diào)用 client-go 來訪問 Kubernetes 集群中的對(duì)應(yīng)資源的,所以會(huì)涉及到管控面組件開發(fā)和 client-go 相關(guān)接口的調(diào)用。
7. AddOn 管理
Kubernetes 提供了很強(qiáng)大的擴(kuò)展能力,其中一個(gè)很重要的擴(kuò)展點(diǎn)便是支持 AddOn。所謂的 AddOn,其實(shí)就是 Kubernetes 集群的一個(gè)插件,該插件通常是一個(gè) Operator,通過 Helm 或者類似 kubectl apply -f addon.yaml 這種方式直接部署在 Kubernetes 集群中。
AddOn 可以實(shí)現(xiàn)各種各樣的功能,依次增強(qiáng) Kubernetes 的能力,例如:HPC(定時(shí)HPA組件)、存儲(chǔ)類的 AddOn(安裝后,能讓集群支持某個(gè)存儲(chǔ)類型的掛載、解綁等)、NPD 等。
作為一個(gè) Kubernetes 開發(fā)人員,可能需要根據(jù)需要開發(fā)一個(gè)實(shí)用的 AddOn(Operator)。另外,AddOn 的 CURD 也是其中一個(gè)開發(fā)類型。
8. 存儲(chǔ)能力開發(fā)
通常會(huì)涉及到對(duì) Kubernetes 內(nèi)置資源 StorageClass、PersistentVolumeClaim、PersistentVolume 資源的適配。
StorageClass 的創(chuàng)建,可以選擇企業(yè)內(nèi)部支持的存儲(chǔ)類型。
底層是通過調(diào)用 client-go 來訪問 Kubernetes 集群中的對(duì)應(yīng)資源的,所以會(huì)涉及到管控面組件開發(fā)和 client-go 相關(guān)接口的調(diào)用。
另外,企業(yè)通常都會(huì)有自己的存儲(chǔ)產(chǎn)品。Kubernetes 集群中還需要支持企業(yè)自己的存儲(chǔ)產(chǎn)品。因此需要開發(fā) CSI 插件。
9. 事件/日志
Kubernetes 中運(yùn)行的各類資源都會(huì)產(chǎn)生日志,這些日志根據(jù)功能類別可以分為不同的日志類型:
- Kubernetes 集群控制面組件日志:kube-apiserver、kube-controller-manager、kube-scheduler 日志等;
- Kubernetes Pod 日志:容器業(yè)務(wù)進(jìn)程產(chǎn)生的日志;
- Event:Kubernetes 集群中各類資源產(chǎn)生的事件。
上述日志的量級(jí)很多時(shí)候是無法管控的,所以需要將上述日志轉(zhuǎn)存到專用的日志平臺(tái)中,防止大量日志對(duì) Kubernetes 集群帶來穩(wěn)定性隱患。如果想轉(zhuǎn)存日志,就需要涉及到日志采集組件的開發(fā)、跟日志平臺(tái)的對(duì)接等開發(fā)工作。
因?yàn)?Etcd 不適合存儲(chǔ)大量的日志事件,所以 Kuberneters 的 Event 在集群中的存活時(shí)間默認(rèn)是 1 個(gè)小時(shí)。但是 Eevent 又作為集群故障排障的一個(gè)主要日志參考。為了能夠?qū)?Eevent 這類關(guān)鍵的日志信息持久化報(bào)錯(cuò),方便日后的排障。還需要進(jìn)行 Eevent 持久化相關(guān)功能的開發(fā)。
10. 集群審計(jì)
為了提高整個(gè) Kubernetes 集群的安全能力,需要對(duì)集群中的所有操作進(jìn)行審計(jì)。Kubernetes 本身基本設(shè)計(jì)能力,在 Kubernetes 開發(fā)中,通常需要借助于 Kubernetes 自身的設(shè)計(jì)能力,將其中的審計(jì)日志上報(bào)到企業(yè)內(nèi)部的審計(jì)平臺(tái),方便統(tǒng)一查看。所以,還會(huì)涉及到對(duì)企業(yè)審計(jì)接口的調(diào)用適配和 Kubernetes 審計(jì)能力的集成適配。
11. Helm 能力開發(fā)
Kubernetes 集群目前標(biāo)準(zhǔn)的服務(wù)編排機(jī)制是使用 Helm 進(jìn)行服務(wù)編排、部署。所以,還需要適配整個(gè) Helm 能力。例如開發(fā) Helm 倉(cāng)庫(kù),Kubernetes 集群適配并支持 Hem 部署方式等。
12. 容器運(yùn)行時(shí)組件的開發(fā)
根據(jù)需要還需要開發(fā)、適配、修復(fù)底層的容器運(yùn)行時(shí) CRI 組件。當(dāng)社區(qū)支持多種 CRI,例如:CRI-O、Docker、Containerd 等。目前用的比較多的是 Containerd。
底層的容器運(yùn)行常常會(huì)因?yàn)椴僮飨到y(tǒng)環(huán)境、Pod 業(yè)務(wù)進(jìn)程等原因引入一些故障,這些故障的排查、修復(fù)、恢復(fù)等也是 Kubernetes 開發(fā)者的其中一個(gè)工作內(nèi)容。容器運(yùn)行時(shí)的工作展開需要開發(fā)者具備較強(qiáng)的 cgroup、namespace 開發(fā)能力。
13. 調(diào)度器適配
Kubernetes 調(diào)度器隨著 Kubernetes 能力的迭代目前已經(jīng)很強(qiáng)大了。例如從架構(gòu)上支持 scheduler framework 機(jī)制,Kubernetes 官方 Repo 或者 Kubernetes 社區(qū)也提供了各種各樣的調(diào)度器插件。
但在企業(yè)中,對(duì)調(diào)度器的訴求還遠(yuǎn)遠(yuǎn)未被滿足。例如:企業(yè)以為自身需要,會(huì)有各種各樣的調(diào)度場(chǎng)景需求;企業(yè)的調(diào)度插件需要適配企業(yè)內(nèi)部的基架環(huán)境,例如:metrics 系統(tǒng)、地域/可用區(qū)環(huán)境等。
因此 Kubernetes 開發(fā)中,還有一個(gè)很大的工作內(nèi)容是調(diào)度器開發(fā)。調(diào)度器開發(fā)通常包括以下工作內(nèi)容:
- 調(diào)度器開發(fā):借助于 scheduler framework 機(jī)制,開發(fā)企業(yè)自己的調(diào)度器,然后以默認(rèn)調(diào)度器或者多調(diào)度器的方式部署在 Kubernetes 集群中;
- 調(diào)度插件開發(fā):開發(fā)各種企業(yè)需要的調(diào)度器插件。例如:針對(duì) AI 場(chǎng)景的 Gang 調(diào)度器、GPU 調(diào)度器適配等;
14. 集群穩(wěn)定性保障
整個(gè) Kubernetes 集群中運(yùn)行著業(yè)務(wù)的重要 Pod 等核心資源。這些資源如果出現(xiàn)故障,就會(huì)影響到業(yè)務(wù)的正常運(yùn)行。Kubernetes 集群的穩(wěn)定性保障也是 Kubernetes 開發(fā)者的重要工作之一。
Kubernetes 集群的穩(wěn)定性保障氛圍很多類別,也有很多細(xì)節(jié)。這里不會(huì)一一列出,僅列出一些核心的開發(fā)內(nèi)容:
- 底層核心組件穩(wěn)定性保障:通過開發(fā)、適配、監(jiān)控告警、日志等手段,保障底層 Etcd、kube-apiserver、kubelet 等核心管控面組件的穩(wěn)定性;
- 穩(wěn)定性平臺(tái)構(gòu)建:開發(fā)類似云原生可觀測(cè)平臺(tái),監(jiān)控 Kubernetes 集群中的 Node、Pod、Event、Metrics 等資源的日志、狀態(tài)、事件等,將這些監(jiān)控內(nèi)容進(jìn)行統(tǒng)一收集和可視化,并基于這些內(nèi)容判斷集群的穩(wěn)定性,給出最終狀態(tài)、建議和修復(fù)方法。在這類穩(wěn)定性平臺(tái)中,也可以根據(jù)故障類型,添加自動(dòng)修復(fù)機(jī)制,達(dá)到故障探測(cè)、自動(dòng)修復(fù)一條龍服務(wù)。
- 集群穩(wěn)定性:保障整個(gè)集群的資源利用率,規(guī)避高負(fù)載帶來的各種業(yè)務(wù)故障。這會(huì)涉及到 Kubernetes 調(diào)度器、descheduler 等組件的開發(fā)、適配。
15. 集群混部
企業(yè)為了降低成本,通常需要提高 Kubernetes 集群層面的資源利用率。提高資源利用率其中一個(gè)有效的手段是實(shí)現(xiàn)在離線業(yè)務(wù)混部署。例如:將 AI 訓(xùn)練的 Pod 部署到在線業(yè)務(wù)的節(jié)點(diǎn)上。
要實(shí)現(xiàn)在離線混布功能就需要 Kubernetes 開發(fā)者開發(fā)在離線調(diào)度插件、并通過優(yōu)化底層的 namespace、cgroup、container runtime、kernel 等運(yùn)行時(shí)組件,來提高整個(gè)底層資源的隔離程度。集群混布設(shè)計(jì)到的點(diǎn)很多,例如還需要設(shè)計(jì)對(duì)租戶、作業(yè)資源的請(qǐng)求和限額等。
(1) 多租戶與資源管理
在 Kubernetes 中,多租戶支持允許多個(gè)用戶(租戶)在同一集群中獨(dú)立運(yùn)行他們的應(yīng)用,確保隔離性和資源的公平使用。權(quán)限管理則通過身份驗(yàn)證和授權(quán)來控制不同租戶對(duì)資源的訪問。
功能特點(diǎn):
- 命名空間:Kubernetes 使用命名空間(Namespaces)來實(shí)現(xiàn)多租戶環(huán)境中的資源隔離。
- 資源配額和限額:可以為每個(gè)命名空間設(shè)置資源配額(Quota)和限制(Limit),確保不同租戶的資源使用不會(huì)互相干擾。
關(guān)鍵工作:
- 配置和管理各個(gè)命名空間的資源配額,避免某個(gè)租戶的應(yīng)用占用過多資源。
- 設(shè)計(jì)和實(shí)現(xiàn)細(xì)粒度的授權(quán)策略,確保敏感資源和應(yīng)用受到適當(dāng)?shù)脑L問控制。
16. FinOps
云原生的目的是降本增效。所以這幾年 FinOps 的理念也很火。相關(guān)的產(chǎn)品、功能、特性不斷的被企業(yè)的 Kubernetes 平臺(tái)集成。
FinOps 的實(shí)現(xiàn)設(shè)計(jì)到多個(gè)關(guān)鍵組件、產(chǎn)品的開發(fā)例如:可觀測(cè)平臺(tái)、調(diào)度器適配、Request/Limit 推薦等。這就涉及到相關(guān)的開發(fā)工作。
17. 自定義異構(gòu)資源
Kubernetes 可以適配多種類型的計(jì)算資源,其中包括 CPU、GPU、FPGA等異構(gòu)計(jì)算資源。自定義異構(gòu)資源使得 Kubernetes 可以靈活適配各種實(shí)際需求。
功能特點(diǎn):
- 資源擴(kuò)展:支持用戶自定義資源的定義與管理,使得 Kubernetes 能夠調(diào)度和管理非標(biāo)準(zhǔn)資源。
- 靈活性:可部署在需要特定硬件加速的應(yīng)用,例如機(jī)器學(xué)習(xí)、圖像處理等場(chǎng)景。
關(guān)鍵工作:
- 開發(fā)和實(shí)現(xiàn)自定義資源定義(CRD),使得 Kubernetes 能夠理解并處理這些資源。
- 實(shí)現(xiàn)對(duì)新資源的監(jiān)控和管理功能,確保這些異構(gòu)資源能夠有效利用并集成到 Kubernetes 工作負(fù)載調(diào)度中。通常涉及到 Device Plugin 的開發(fā)和適配。
當(dāng)前自定義異構(gòu)資源中,最重要的是 GPU。GPU 調(diào)度主要用來滿足 AI 訓(xùn)練任務(wù)。伴隨而來的是對(duì) AI 場(chǎng)景下的調(diào)度策略優(yōu)化和開發(fā)、GPU 虛擬化、GPU 池化等一整套能力的開發(fā)。
18. 云原生產(chǎn)品
除了上面這些跟 Kubernetes 平臺(tái)強(qiáng)耦合的功能開發(fā)之外。還有一些依賴于 Kubernetes 編程能力的其他平臺(tái)開發(fā)。例如:云原生 Etcd、云原生 Prometheus、DevOps 平臺(tái)等。
上面這些產(chǎn)品的開發(fā),也依賴于 Kubernets 編程能力,也是 Kubernetes 開發(fā)者的從業(yè)方向之一。