k8s元件介紹
-
- k8s架構圖
- etcd
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kubelet
- kube-proxy
- CoreDNS
- Ingress
- ReplicationController(RC)
- ReplicaSet(RS)
- deployment
- statefullSet
- prometheus
- ELK
- Node元件
k8s架構圖

說明:排程器和控制器都不直接和etcd打交道,都是通過api server進行操作的
etcd
etcd分布式鍵值資料庫,可以為整個分布式叢集提供關鍵資料的存儲,協助整個叢集正常運作,Etcd v2版已經在 k8s v1.11中棄用,目前是V3版。
kube-apiserver
Kubernetes API,叢集的統一入口,各元件協調者,以HTTPAPI提供接口服務,所有對象資源的增删改查和監聽操作都交給APIServer處理後再送出給Etcd存儲。
kube-controller-manager
處理叢集中正常背景任務,一個資源對應一個控制器,而ControllerManager就是負責管理這些控制器的(多個控制器)。
kube-scheduler
根據排程算法為新建立的Pod選擇合适的Node節點。
kubelet
kubelet是Master在Node節點上的Agent,管理本機運作容器的生命周期,比如建立容器、Pod挂載資料卷、下載下傳secret、擷取容器和節點狀态等工作,kubelet将每個Pod轉換成一組容器。
kube-proxy
在Node節點上實作Pod網絡代理,維護網絡規則和四層負載均衡工作(負責寫入規則至 IPTABLES IPVS 實作服務映射通路)。
CoreDNS
可以為叢集的SVC建立一個域名IP的對應關系解析
Ingress
可以實作k8s的七層代理(基于域名或ip),k8s本身隻能實作4層代理
ReplicationController(RC)
用來確定容器應用的副本數保持在客戶指定的個數,如果有容器異常退出,就會建立新的pod;如果異常多出來的容器也會被回收。新版本中建議使用ReplicaSet(RS)來替代RC
ReplicaSet(RS)
RS和RC可以了解為RS是RC的更新版,RS支援集合式的selector,但是一般還是建議使用depoyment來自動管理RS,這樣就無需擔心相容問題(比如RS不支援rolling-update,但是deployment支援)
deployment
deployment 通過建立rs來建立pod,在控制滾動更新時rs并不會被删除,而是被停用這樣可以達到版本回退的目的
statefullSet
是為了解決有狀态服務問題(RS和deployment是為無狀态服務設計的),其應用場景:
- 穩定的持久化存儲,pod重新排程後 ,還能夠通路到相同的持久化資料,基于pvc來實作
- 穩定的網絡辨別,pod重新排程後 其podName和HostName不變,基于HeadLess Service(沒有clusterId 的service)來實作
- 有序部署,有序擴充,即pod是有序的,在部署或擴充時要按照定義的順序依次進行(即從0到N-1,在下一個pod運作之前,所有之前的pod都必須是running或ready狀态),基于init-container來實作
- 有序收縮,有序删除(N-1到0)
prometheus
提供K8S的叢集監控能力
ELK
k8s叢集日志統一分析介入平台
Node元件
Node:是kubernetes叢集的工作負載節點。Master為其配置設定工作,當某個Node當機時,Master會将其工作負載自動轉移到其他節點