Kubernetes 的主要優(yōu)勢(shì)在于,它提供了一個(gè)便捷有效的平臺(tái),讓用戶(hù)可以在物理機(jī)和虛擬機(jī)集群上調(diào)度與運(yùn)行容器。進(jìn)一步來(lái)說(shuō),Kubernctes 是一個(gè)支持彈性運(yùn)行的分布式系統(tǒng)框架,是一種支撐其他平臺(tái)的平臺(tái)型基礎(chǔ)設(shè)施,可以幫助用戶(hù)在生產(chǎn)環(huán)境中依托容器實(shí)施的基礎(chǔ)架構(gòu)。Kubernetes 的本質(zhì)在于實(shí)現(xiàn)操作任務(wù)自動(dòng)化,包括應(yīng)用擴(kuò)展、故障轉(zhuǎn)移和部署模式等,因而它能代替用戶(hù)執(zhí)行大部分煩瑣的操作任務(wù),減輕用戶(hù)負(fù)擔(dān),降低出錯(cuò)的概率。
簡(jiǎn)言之,Kubernetes 整合并抽象了底層的硬件和系統(tǒng)環(huán)境等基礎(chǔ)設(shè)施,對(duì)外提供了一個(gè)統(tǒng)一的資源池供終端用戶(hù)通過(guò) API 進(jìn)行調(diào)用。Kubernetes 具有以下幾個(gè)重要特性。
(1)自動(dòng)裝箱
構(gòu)建于容器之上,基于資源依賴(lài)及其他約束自動(dòng)完成容器部署且不能響其可用性,并在同一節(jié)點(diǎn)通過(guò)調(diào)度機(jī)制混合運(yùn)行關(guān)鍵型應(yīng)用和非關(guān)鍵型應(yīng)用的工作負(fù)載,以提升資源利用率。
(2)自我修復(fù)(自愈)
支持容器故障后自動(dòng)重啟、節(jié)點(diǎn)故障后重新調(diào)度容器到其他可用節(jié)點(diǎn)、健康狀態(tài)檢查失敗后關(guān)閉容器并重新創(chuàng)建等自我修復(fù)機(jī)制。
(3)水平擴(kuò)展
支持通過(guò)簡(jiǎn)單命令或 UI 手動(dòng)水平擴(kuò)展,以及基于 CPU 等資源負(fù)載率的自動(dòng)水平擴(kuò)展機(jī)制。
(4)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
Kubernetes 通過(guò)其附加組件之一的 KubeDNS(或 CoreDNS)為系統(tǒng)內(nèi)置了服務(wù)發(fā)現(xiàn)功能,它會(huì)為每個(gè) Service 配置 DNS 名稱(chēng),并允許集群內(nèi)的客戶(hù)端直接使用此名稱(chēng)發(fā)出訪問(wèn)請(qǐng)求,而 Service 通過(guò) iptables 或 ipvs 內(nèi)置了負(fù)載均衡機(jī)制。
(5)自動(dòng)發(fā)布和回滾
Kubernetes 支持“灰度”更新應(yīng)用程序或其配置信息,它會(huì)監(jiān)控更新過(guò)程中應(yīng)用程序的健康狀態(tài),以確保不會(huì)在同一時(shí)刻殺掉所有實(shí)例,而此過(guò)程中一旦有故障發(fā)生,它會(huì)立即自動(dòng)執(zhí)行回滾操作。
(6)密鑰和配置管理
Kubernetes 的 ConfigMap 實(shí)現(xiàn)了配置數(shù)據(jù)與 Docker 鏡像解耦,需要時(shí),僅對(duì)配置做出變更而無(wú)須重新構(gòu)建 Docker 鏡像,這為應(yīng)用開(kāi)發(fā)部署提供了很大的靈活性。此外,對(duì)于應(yīng)用所依賴(lài)的一些敏感數(shù)據(jù),如用戶(hù)名和密碼、令牌、密鑰等信息,Kubernetes 專(zhuān)門(mén)提供了Secret 對(duì)象使依賴(lài)解耦,既便利了應(yīng)用的快速開(kāi)發(fā)和交付,又提供了一定程度上的安全保障。
(7)存儲(chǔ)編排
Kubernetes 支持 Pod 對(duì)象按需自動(dòng)掛載不同類(lèi)型存儲(chǔ)系統(tǒng),這包括節(jié)點(diǎn)本地存儲(chǔ)公有云服務(wù)商的云存儲(chǔ)(如 AWS 和 GCP 等),以及網(wǎng)絡(luò)存儲(chǔ)系統(tǒng),例如 NFS、iSCSI、Gluster、Ceph、Cinder 和 Flocker 等。
(8)批量處理執(zhí)行
除了服務(wù)型應(yīng)用,Kubernetes 還支持批處理作業(yè)、CI(持續(xù)集成),以及容器故障后恢復(fù)。另一方面,以應(yīng)用為中心的 Kubernetes 本身并未直接提供一套完整的“開(kāi)箱即用”的應(yīng)用管理體系,需要基礎(chǔ)設(shè)施工程師基于云原生社區(qū)和生態(tài)的實(shí)際需求手動(dòng)構(gòu)建。換句話說(shuō),在典型的生產(chǎn)應(yīng)用場(chǎng)景中,Kubernetes 還需要同網(wǎng)絡(luò)、存儲(chǔ)、遙測(cè)(監(jiān)控和日志)、鏡像倉(cāng)庫(kù)、負(fù)載均衡器、CI/CD 工具鏈及其他服務(wù)整合,以提供完整且 API 風(fēng)格統(tǒng)一的基礎(chǔ)設(shè)施平臺(tái)。
下面對(duì)容器編排系統(tǒng)中的要素進(jìn)行簡(jiǎn)單介紹:
Docker Registry 和工件倉(cāng)庫(kù):通過(guò) Harbor 工件倉(cāng)庫(kù)、Docker Registry 等項(xiàng)目實(shí)現(xiàn)。
網(wǎng)絡(luò):借助 Flannel、Calico 或 WeaveNet 等項(xiàng)目實(shí)現(xiàn)。
遙測(cè):借助 Prometheus 和 EFK 棧(或者由 Promtail、Loki 和 Grafana 組成的 PLG 棧)等項(xiàng)目實(shí)現(xiàn)。
容器化工作負(fù)載:借助 Kubernetes 內(nèi)置的工作負(fù)載控制器資源,甚至由社區(qū)擴(kuò)展而來(lái)的各種 Operator完成應(yīng)用的自動(dòng)化編排,包括自愈和自動(dòng)擴(kuò)縮容等;而便捷的應(yīng)用打包則要借助 Helm 或 Kustomize 等項(xiàng)目完成。
基于容器編排系統(tǒng)的 CI/CD :借助 Jcnkins、Tekton、Flagger 或 Kepton 等項(xiàng)目,甚至遵循 GitOps 規(guī)范實(shí)現(xiàn)應(yīng)用交付、發(fā)布和部署等。