掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者:知了一笑 2023-06-06 08:14:18
云計算
云原生 docker:作為開源的應用容器引擎,可以把應用程序和其相關(guān)依賴打包生成一個Image鏡像文件,是一個標準的運行環(huán)境,提供可持續(xù)交付的能力。

基于分布式的架構(gòu)中,需要管理的服務是非常多的,無論是服務的數(shù)量還是體系劃分;
從服務的能力上看,可以進行分層管控,只是其中有相當一部分服務層,改動更新的頻率很低,所以感知也不明顯;
就以自己當下參與研發(fā)的系統(tǒng)來說;
通過K8S進行管理的服務近百個,這中間有部分服務采用集群模式,即便是這個規(guī)模的系統(tǒng),也幾乎不可能依賴純?nèi)斯み\維的形式,自動化流程必不可少;
此前圍繞該主題寫過一個完整的實踐案例,主要圍繞Jenkins、Docker、K8S等組件的使用層面,總結(jié)源碼編譯、打包、鏡像構(gòu)建、部署等自動化管理的流程;
Jenkins:是一個擴展性非常強的軟件,用于自動化各種任務,包括構(gòu)建、測試和部署等;
Docker:作為開源的應用容器引擎,可以把應用程序和其相關(guān)依賴打包生成一個Image鏡像文件,是一個標準的運行環(huán)境,提供可持續(xù)交付的能力;
Kubernetes:作為開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理;
Control-Plane-Components:控制平面組件
對集群做出全局決策,例如:資源調(diào)度、檢測、事件響應,可以在集群中的任何節(jié)點上運行;
Node:節(jié)點組件
該組件會在每個節(jié)點上運行,負責維護運行的Pod并提供Kubernetes運行環(huán)境;
Container-Runtime:容器運行時
負責運行容器的軟件,支持Docker、containerd、CRI-O等多個容器運行環(huán)境,以及任何實現(xiàn)Kubernetes-CRI容器運行環(huán)境接口;
從整體的功能上來考慮,K8S集群可以分為:用戶、控制平面、節(jié)點三個模塊;
用戶側(cè):不論是CLI命令行還是UI界面,會與控制面板的APIserver進行交互,APIserver再與其他組件交互,最終執(zhí)行相應的操作命令;
控制平面:以前也稱為Master,核心組件包括APIserver、controller、scheduler、etcd,主要用來調(diào)度整個集群,以及做出全局決策;
節(jié)點:通過將容器放入在節(jié)點上運行的Pod中來執(zhí)行工作負載,簡單的理解工作負載就是各種應用程序等,節(jié)點上的核心組件包括Pod、kubelet、Container-Runtime、kube-proxy等;
站在研發(fā)的視角來看,K8S提供極其強大的應用服務管理能力;
服務Service可以將運行在一個或一組Pod上的網(wǎng)絡應用程序公開為網(wǎng)絡服務的方法,通常使用標簽對資源對象進行篩選過濾;
調(diào)度器通過監(jiān)測機制來發(fā)現(xiàn)集群中新創(chuàng)建且尚未被調(diào)度到節(jié)點上的Pod,由于Pod中的容器和Pod本身可能有不同的資源要求,調(diào)度會將Pod放置到合適的節(jié)點上;
K8S可以通過指標檢查工作負載的資源需求,例如CPU利用率、響應時長、內(nèi)存利用率、或者其他,從而判斷是否需要執(zhí)行伸縮,垂直維度可以是更多的資源分配,水平維度可以是更多的集群部署;
K8S可以自動伸縮,也具備自動修復的能力,當節(jié)點故障或者應用服務異常時,會被檢查到,可能會進行節(jié)點遷移或者重啟;
在此前的實踐案例中,用CLI命令行和腳本文件的方式,完成的部署動作,而在整個流程中涉及集群的多個組件協(xié)作,多次的通信和調(diào)度;
kubectl create -f pod.yaml
【1】CLI命令行和UI界面,都是通過APIserver接口,與集群內(nèi)部組件交互,比如上述的Pod部署操作;
【2】在APIserver收到請求之后,會將序列化狀態(tài)的對象寫入到etcd中完成存儲操作;
【3】Scheduler調(diào)度器通過監(jiān)測(Watch)機制來發(fā)現(xiàn)集群中新創(chuàng)建且尚未被調(diào)度到節(jié)點上的Pod;
【4】在集群中找到一個Pod的所有可調(diào)度節(jié)點,對這些可調(diào)度節(jié)點打分,選出其中得分最高的節(jié)點來運行Pod,然后調(diào)度器將這個調(diào)度決定通知給APIserver;
【5】APIserver完成信息存儲后,然后通知相應節(jié)點的Kubelet;
【6】Kubelet是基于PodSpec來工作的,確保這些PodSpec中描述的容器處于運行狀態(tài)且運行狀況良好,每個PodSpec是一個描述Pod的YAML或JSON對象;
【7】Pod是可以在Kubernetes中創(chuàng)建和管理的、最小的可部署的計算單元,包括一個或多個容器;
文檔倉庫:
https://gitee.com/cicadasmile/butte-java-note
腳本倉庫:
https://gitee.com/cicadasmile/butte-auto-parent 
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流