一個K8S叢集由兩部分構成 master節點和node節點。
master節點主要負責叢集的控制,對pod進行排程,已經令牌管理等等功能。
node節點主要是負責幹活,啟動容器、管理容器。
master節點和node節點一般不要部署在一台機器上。
上面這個架構圖,舉例是一個master節點和2個node節點。但實際生産上,從高可用考慮,是需要部署多個master節點的。
将這張圖抽象一下,大約是這個樣子
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9EEZ5Z0Va9mSYRmdsNDWr5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL5YzM5EDO1kDM0EDOwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
master節點中又有很多元件
主要的是:
Api Server:對外暴露K8S的api接口,是外界進行資源操作的唯一入口,并提供認證、授權、通路控制、API注冊和發現等機制;
scheduler負責資源的排程,按照預定的排程政策将Pod排程到相應的機器上;就是監視新建立的 Pod,如果沒有配置設定節點,就選擇一個節點供他們運作,這就是pod的排程
controller manager負責維護叢集的狀态,比如故障檢測、自動擴充、滾動更新等,它們是處理叢集中正常任務的背景線程
etcd:kubernetes的後端資料庫,k/v方式存儲,所有的k8s叢集資料都存放在此處。儲存了整個叢集的狀态
其中有kube-scheduler和kube-controller-manager兩個元件是有leader選舉的,這個選舉機制是k8s對于這兩個元件的高可用保障。
apiserver是可以水準擴充的。
Node節點的元件:
kubelet負責維護容器的生命周期,同時也負責Volume(CSI)和網絡(CNI)的管理;
kube-proxy負責為Service提供cluster内部的服務發現和負載均衡;
fluentd 是一個守護程序,它有助于提供叢集層面日志 叢集層面的日志
再來一張綜合起來的圖:
解釋圖中的幾個詞:
CNI、CRI和CSI都是K8S的開放接口
Kubernetes作為雲原生應用的基礎排程平台,相當于雲原生的作業系統,為了便于系統的擴充,Kubernetes中開放的以下接口,可以分别對接不同的後端,來實作自己的業務邏輯:
CRI(Container Runtime Interface):容器運作時接口,提供計算資源CNI(Container Network Interface):容器網絡接口,提供網絡資源CSI(Container Storage Interface):容器存儲接口,提供存儲資源
這幾個屬于進階内容,新手先不用管。
另外附一個參考高可用部署架構:
在每台node節點上安裝nginx,nginx通過内部的負載均衡将node節點上需要通過通路master,kube-apiserver元件的請求,反代到兩台k8s-master節點上,這樣就可以實作master節點的高可用,當任意一台master節點當機後,也可以通過nginx負載均衡放文檔另一個master節點上
//來自百家号:IT有意思