前言
kubernetes 是什么具则?
kubernetes 是一個容器管理平臺三圆。
kubernetes 提出了 pod 的概念鸽扁,pod 是一組容器的集合。有時一個服務(wù)拆分到幾個容器當(dāng)中歧胁,此時 pod 的概念就派上大用場了滋饲。
環(huán)境
kubernetes: 1.16
正文
kubernetes 架構(gòu)圖
如上圖,當(dāng)發(fā)送一個創(chuàng)建服務(wù)的任務(wù)喊巍,簡單流程:
- 命令行發(fā)送任務(wù)到 api
- api 接收到任務(wù)屠缭,進行調(diào)度,選擇合適的計算節(jié)點運行服務(wù)崭参。
- 對應(yīng)計算節(jié)點上的 kubelet 收到 api 的任務(wù)勿她,開始創(chuàng)建服務(wù)。
- 如圖阵翎,具體服務(wù)運行在容器中逢并,而容器又運行在 pod 中。
當(dāng)訪問一個運行中的服務(wù)時郭卫,簡單流程:
- 外部流量首先到達 proxy(kube-proxy)
- 經(jīng)由 proxy 轉(zhuǎn)發(fā)至合適的 pod 上(可轉(zhuǎn)發(fā)至其他計算節(jié)點的 pod)砍聊。
kubernetes 組件介紹
如其它集群軟件一般,kubernetes 也劃分主節(jié)點(master)贰军,計算節(jié)點(node)玻蝌。主節(jié)點和計算節(jié)點的區(qū)別僅僅是運行的組件不同。kubernetes 沒有獨立的網(wǎng)絡(luò)節(jié)點概念词疼。
因各組件的分工不同俯树,因此劃分為【主節(jié)點組件】和【計算節(jié)點組件】來分別說。
1. 主節(jié)點的組件
主節(jié)點組件贰盗,主要提供管理集群许饿、調(diào)度之類的功能。比如對外提供訪問接口舵盈、將創(chuàng)建任務(wù)調(diào)度到哪個計算節(jié)點上執(zhí)行等陋率。
kube-apiserver
對外提供 resetful api。是 kubernetes 集群的門戶秽晚。
etcd
數(shù)據(jù)庫瓦糟。鍵值存儲類型。用于保存 kubernetes 集群基礎(chǔ)信息赴蝇。
kube-schduler
調(diào)度 pod 到合適的計算節(jié)點上菩浙。
kube-controller-manager
維護集群所需的一系列功能,每個功能模塊均拆分出來形成獨立的 controller 。這些 controller 包含:
- node controller:維護計算節(jié)點的狀態(tài)(比如可用劲蜻、不可用)
- replication controller:維護pod的副本數(shù)量
- endpoint controller:維護service和pods之間的映射陆淀。
- service account & token controllers:為新命名空間創(chuàng)建默認(rèn)賬戶和api訪問令牌
cloud-controller-manager
當(dāng)與第三方云平臺集成時,可由第三方云平臺實現(xiàn)某些 kubernetes 需要的功能斋竞。這些功能模塊也拆分出來形成獨立的 controller。這些 controller 包含:
- node controller: 可以在node節(jié)點無響應(yīng)后秃殉,通過第三方云平臺確定計算節(jié)點狀態(tài)坝初。
- route controller:通過第三方云平臺提供路由功能。
- service controller:通過第三方云平臺提供負(fù)載均衡功能钾军。
- volume controller:通過第三方云平臺提供卷功能鳄袍。
2. 計算節(jié)點的組件
計算節(jié)點組件,主要圍繞實現(xiàn) pod吏恭、創(chuàng)建容器拗小、提供訪問 pod 的網(wǎng)絡(luò)展開。
kubelet
管理容器和 pod樱哼。
kube-proxy
實現(xiàn) pod 與集群內(nèi)部或外部的網(wǎng)絡(luò)通信哀九。
container-runtime
實際運行容器的組件。
實現(xiàn)容器的技術(shù)有多種搅幅,這里將其抽象出來阅束。kubernetes 目前支持 docker、containerd茄唐、cri-o息裸、rktlet
擴展
說到 kubernetes,不得不提 swarm沪编。swarm 也是容器管理平臺呼盆。
swarm 是一個小巧,易于使用的容器管理平臺蚁廓,但是它沒有自己的界面访圃、監(jiān)控等,以及功能耦合度高相嵌,功能較少挽荠。在無需各種復(fù)雜功能的場景下,swarm 是一個好的選擇平绩。
相比之下圈匆,kubernetes 的功能就要全面許多,擁有自己的用戶系統(tǒng)捏雌,界面跃赚,監(jiān)控,耦合度低,模塊插件化纬傲,以及各種容器相關(guān)的高級功能(比如回滾)等满败。
由于kubernetes 復(fù)雜度高,定制化叹括、二次封裝在所難免算墨。比較有名的有 openshift、rancher 等汁雷。
值得一提的是净嘀,無論 master 還是 node 節(jié)點,其上所有組件均獨立進程運行侠讯。