Kubernetes 的主要優勢在于,它提供了一個便捷有效的平臺,讓用戶可以在物理機和虛擬機集群上調度與運行容器。進一步來說,Kubernctes 是一個支持彈性運行的分布式系統框架,是一種支撐其他平臺的平臺型基礎設施,可以幫助用戶在生產環境中依托容器實施的基礎架構。Kubernetes 的本質在于實現操作任務自動化,包括應用擴展、故障轉移和部署模式等,因而它能代替用戶執行大部分煩瑣的操作任務,減輕用戶負擔,降低出錯的概率。
簡言之,Kubernetes 整合并抽象了底層的硬件和系統環境等基礎設施,對外提供了一個統一的資源池供終端用戶通過 API 進行調用。Kubernetes 具有以下幾個重要特性。

(1)自動裝箱
構建于容器之上,基于資源依賴及其他約束自動完成容器部署且不能響其可用性,并在同一節點通過調度機制混合運行關鍵型應用和非關鍵型應用的工作負載,以提升資源利用率。
(2)自我修復(自愈)
支持容器故障后自動重啟、節點故障后重新調度容器到其他可用節點、健康狀態檢查失敗后關閉容器并重新創建等自我修復機制。
(3)水平擴展
支持通過簡單命令或 UI 手動水平擴展,以及基于 CPU 等資源負載率的自動水平擴展機制。
(4)服務發現和負載均衡
Kubernetes 通過其附加組件之一的 KubeDNS(或 CoreDNS)為系統內置了服務發現功能,它會為每個 Service 配置 DNS 名稱,并允許集群內的客戶端直接使用此名稱發出訪問請求,而 Service 通過 iptables 或 ipvs 內置了負載均衡機制。
(5)自動發布和回滾
Kubernetes 支持“灰度”更新應用程序或其配置信息,它會監控更新過程中應用程序的健康狀態,以確保不會在同一時刻殺掉所有實例,而此過程中一旦有故障發生,它會立即自動執行回滾操作。
(6)密鑰和配置管理
Kubernetes 的 ConfigMap 實現了配置數據與 Docker 鏡像解耦,需要時,僅對配置做出變更而無須重新構建 Docker 鏡像,這為應用開發部署提供了很大的靈活性。此外,對于應用所依賴的一些敏感數據,如用戶名和密碼、令牌、密鑰等信息,Kubernetes 專門提供了Secret 對象使依賴解耦,既便利了應用的快速開發和交付,又提供了一定程度上的安全保障。
(7)存儲編排
Kubernetes 支持 Pod 對象按需自動掛載不同類型存儲系統,這包括節點本地存儲公有云服務商的云存儲(如 AWS 和 GCP 等),以及網絡存儲系統,例如 NFS、iSCSI、Gluster、Ceph、Cinder 和 Flocker 等。
(8)批量處理執行
除了服務型應用,Kubernetes 還支持批處理作業、CI(持續集成),以及容器故障后恢復。另一方面,以應用為中心的 Kubernetes 本身并未直接提供一套完整的“開箱即用”的應用管理體系,需要基礎設施工程師基于云原生社區和生態的實際需求手動構建。換句話說,在典型的生產應用場景中,Kubernetes 還需要同網絡、存儲、遙測(監控和日志)、鏡像倉庫、負載均衡器、CI/CD 工具鏈及其他服務整合,以提供完整且 API 風格統一的基礎設施平臺。
下面對容器編排系統中的要素進行簡單介紹:
Docker Registry 和工件倉庫:通過 Harbor 工件倉庫、Docker Registry 等項目實現。
網絡:借助 Flannel、Calico 或 WeaveNet 等項目實現。
遙測:借助 Prometheus 和 EFK 棧(或者由 Promtail、Loki 和 Grafana 組成的 PLG 棧)等項目實現。
容器化工作負載:借助 Kubernetes 內置的工作負載控制器資源,甚至由社區擴展而來的各種 Operator完成應用的自動化編排,包括自愈和自動擴縮容等;而便捷的應用打包則要借助 Helm 或 Kustomize 等項目完成。
基于容器編排系統的 CI/CD :借助 Jcnkins、Tekton、Flagger 或 Kepton 等項目,甚至遵循 GitOps 規范實現應用交付、發布和部署等。


