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