- Nuclio實戰及源碼分析:基于Kubernetes的Serverless FaaS平臺
- 李彬 詹煜卓 任勝寒 張晨編著
- 1869字
- 2024-08-06 16:59:57
1.3.3 容器集群管理系統——Kubernetes
Kubernetes又稱k8s,是一個用于自動化部署、擴展和管理容器化應用程序的開源系統。它將構成應用程序的容器分組為最小的可部署計算單元,即Pod(一組容器,這些容器共享存儲、網絡,以及怎樣運行這些容器的聲明),以便于管理。Kubernetes建立在Google 15年生產工作負載運行經驗的基礎上,并結合了來自社區的最佳創意和實踐。Kubernetes是開源系統,可以自由地部署在企業內部的私有云、混合云或公有云。
Kubernetes的結構如圖1-5所示。

圖1-5 Kubernetes的結構
(1)Kubernetes控制平面
Kubernetes控制平面也稱為主節點,它負責管理工作節點,確保系統正常運行。對于管理員和用戶來說,它是管理集群節點的主要聯系點。
Kubernetes控制平面是Kubernetes集群的核心,負責集群中資源的調度和管理,并維護對象狀態(例如Pods、Services)。
Kubernetes控制平面包括:
1)調度器(Scheduler):負責監視新創建的、未指定運行節點(Node)的Pods,并選擇節點來讓Pod在上面運行。調度決策考慮的因素包括單個Pod及Pods集合的資源需求、軟/硬件及策略約束、親和性及反親和性規范、數據位置、工作負載間的干擾及最后時限。
2)控制管理器(Controller Manager):控制平面的組件負責運行控制器進程。從邏輯上講,每個控制器都是一個單獨的進程,但是為了降低復雜性,它們都被編譯到同一個可執行文件,并在同一個進程中運行。
控制管理器包括:
①節點控制器(Node Controller),負責在節點出現故障時進行通知和響應;
②任務控制器(Job Controller):監測代表一次性任務的Job對象,然后創建Pods來運行這些任務直至完成;
③端點控制器(Endpoints Controller):填充端點(Endpoints)對象,即加入Services與Pods;
④服務賬戶和令牌控制器(Service Account&Token Controller):為新的命名空間創建默認賬戶和API訪問令牌。
3)API服務器(API Server):該組件負責公開Kubernetes API,以及處理接收請求的工作;設計上考慮了水平擴縮,也就是說,它可通過部署多個實例來進行擴縮,并在這些實例之間平衡流量。
4)Etcd:具有一致性與高可用性的鍵值數據庫,可以作為保存Kubernetes所有集群數據的后臺數據庫。
5)云控制管理器(Cloud Controller Manager):該組件允許集群連接到云提供商的API之上,并將與該云平臺交互的組件同與用戶的集群交互的組件分離開來。云控制管理器是僅運行于特定云平臺的控制器,因此如果在用戶自己的環境中運行Kubernetes,或者在本地計算機中運行學習環境,所部署的集群不需要由云控制器管理器。
(2)Kubernetes Node組件
節點組件會在每個節點上運行,負責維護運行的Pods并提供Kubernetes運行環境。
1)節點代理(kubelet):該組件會在集群中的每個節點(Node)上運行。它保證容器都運行在Pod中。kubelet接收一組通過各類機制提供給它的Pod Specs,確保這些Pod Specs中描述的容器處于健康的運行狀態。kubelet不會管理不是由Kubernetes創建的容器。
2)網絡代理(kube-proxy):該組件是集群中每個節點上所運行的網絡代理,是實現Kubernetes服務概念的一部分。kube-proxy維護節點上的一些網絡規則,這些網絡規則會允許集群內部或外部的網絡會話與Pod進行網絡通信。
(3)Kubernetes的特點和優勢
1)自動化部署:Kubernetes可在應用程序的整個生命周期內實現一致的聲明式自動化。它允許自動化部署、擴展和管理容器化應用程序。這有助于提高運營和開發團隊的效率。
2)負載均衡:Kubernetes常見的應用之一就是將傳入的流量負載均勻分配給所有容器和服務。這有助于減輕單個容器的壓力,可實現同時輕松處理大量流量。
3)簡化的DevOps:Kubernetes包含GitOps的概念,其中Git存儲庫作為應用程序部署的主要事實來源。如果當前部署和Git歷史不同,Kubernetes將立即更新部署以反映當前Git的狀態。只需要使用所需的修改來更新Git歷史記錄,Kubernetes就會自動更新應用程序。使用Kubernetes,分配和釋放資源實現自動化,無須手動設置;添加或刪除節點也是非常的簡單,只需要部署Node部件,執行一條kubectl join命令即可加入新的節點。
4)簡化部署:Kubernetes顯著簡化了開發、發布和部署流程,它允許容器集成并簡化對來自多個提供商的存儲資源訪問的管理。
5)提高生產力:使用Kubernetes的好處之一是能夠更快地構建應用程序。Kubernetes能夠快速構建包含硬件抽象層的服務應用程序。開發人員能夠快速推出和發布新的版本,并通過Kubernetes master服務將所有節點作為一個實體進行管理。
6)降低成本:Kubernetes可以降低基礎設施成本。自動擴展邏輯(HPA、VPA)及允許動態配置資源的云供應商集成,Kubernetes使基礎設施上的手動操作減少了,這可以幫助企業節省時間和金錢。
7)可擴展性:Kubernetes天生具有可擴展性,它可以輕松處理數十個節點上的數百萬個請求和數十萬個容器。
8)安全性:Kubernetes在構建時考慮了安全性,并具有內置的安全功能,例如日志記錄、訪問控制和審計。
9)持續交付:持續交付涉及交付7×24h的應用程序,可以實現不停機升級應用。通過持續交付,可以部署新版本的應用程序,幾乎不需要人工干預,然后在需要時自動擴展這些應用程序。Kubernetes可以快速托管現代分布式云托管的應用程序并解決許多CI/CD問題。
- Learning NServiceBus(Second Edition)
- Vue.js設計與實現
- Spring Cloud Alibaba微服務架構設計與開發實戰
- R語言編程指南
- Learn Programming in Python with Cody Jackson
- Unreal Engine 4 Shaders and Effects Cookbook
- FFmpeg開發實戰:從零基礎到短視頻上線
- IoT Projects with Bluetooth Low Energy
- Practical Microservices
- OpenCV Android Programming By Example
- Mudbox 2013 Cookbook
- WildFly Cookbook
- 大學計算機基礎實訓教程
- Mastering SciPy
- jQuery Mobile Web Development Essentials(Second Edition)