每次開始學(xué)習(xí)和了解一個新的開源系統(tǒng)時改橘,我都會習(xí)慣性問自己幾個問題:
- 是怎么發(fā)展來的?
- 它是用的是什么架構(gòu)玉控,這些架構(gòu)解決了哪些問題飞主?
- 它的適用場景是什么?
下面就按著上面這些問題的脈絡(luò)來一步步了解一下高诺,我們經(jīng)常聽說的kubernete到底是啥
Kubernete的由來
kubernete是一個容器編排工具碌识,最開始由谷歌進行開發(fā),隨后開源并成為CNCF基金會的第一個項目虱而。它能夠提供自動的容器部署筏餐、負載均衡、資源隔離和故障恢復(fù)等功能牡拇,讓運維人員從在成百上千的容器部署的繁雜工作中解放出來魁瞪。kubernete把多臺的服務(wù)物理服務(wù)器抽象成一個集群,集群上的計算資源惠呼、存儲导俘、網(wǎng)絡(luò)由kubernete來統(tǒng)一管理和分配。讓組件繁多的微服務(wù)部署變得簡單剔蹋。
kubernete之所以能夠快速的發(fā)展主要基于兩點旅薄,一個是從單體應(yīng)用的微服務(wù)的轉(zhuǎn)變,另一個是容器規(guī)模的增長泣崩。
Kubernete的基礎(chǔ)架構(gòu)
kubernete在架構(gòu)上可以分為兩種不同的邏輯節(jié)點少梁,一種是Master,一種是Worker矫付。
worker
容器實際上是跑在Worker節(jié)點上的凯沪,每個worker節(jié)點都有一個叫kubelet的節(jié)點代理進程,負責(zé)節(jié)點間的通信买优,接收master的調(diào)度指令進行容器部署
master
master節(jié)點是這個集群管理的入口著洼,包含了幾個主要的kubernete進程
- API Server, k8s集群的入口, 包含webUI樟遣、API、CLI
- Controller Manager, 監(jiān)控容器是不是掛了身笤,需不需要重新部署
- Scheduler Manager, 根據(jù)每個節(jié)點的資源和負載情況,把容器應(yīng)用部署到資源比較充足的節(jié)點上
- ectd, kv存儲, 存儲整個集群的容器狀態(tài)葵陵、資源狀態(tài)等元信息
看下幾種不同的容器部署流程:
# 命令行觸發(fā)
etcd _ __ __
/ \
CLI -> Scheduler Manager -> Worker
# Controller Manager 發(fā)現(xiàn)故障重新部署
etcd _ __ __ __
/ \ \
/ \ \
Controller Manager -> Scheduler Manager -> Worker
kubernete幫我們做了大部分的事情液荸,當我們需要部署一個容器是不再需要逐個登錄到具體機器上,看資源是否足夠脱篙。字需要在UI或CLI觸發(fā)一個部署命令娇钱,kubernete就能幫忙你把事情完成。
從上面的架構(gòu)绊困,可以看出來容器應(yīng)用是運行在worker節(jié)點上的文搂,因此worker節(jié)點比master節(jié)點需要更多的資源。在部署集群時考慮把配置高的機器傾斜給worker節(jié)點
Kubernete的最小調(diào)度單位
kubernete的最小調(diào)度單位是一個pod秤朗。pod封裝了一個或多個容器煤蹭,每個節(jié)點可以運行一個或多個pod
和pod關(guān)聯(lián)的資源:
- service(ip), 和pod綁定, pod消亡重啟可以復(fù)用service的ip地址,同時service可以提供負載均衡的能力
參考
What is Kubernetes | Kubernetes explained in 15 mins - YouTube