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