k8s 元件概覽
# kubectl get pods -A -owide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system canal-2w899 2/2 Running 0 46h 192.168.1.45 k8smaster <none> <none>
kube-system canal-wdnsw 2/2 Running 1 45h 192.168.1.47 k8s-s2 <none> <none>
kube-system canal-zv4qv 2/2 Running 1 45h 192.168.1.46 k8s-s1 <none> <none>
kube-system coredns-6967fb4995-2zsrw 1/1 Running 0 46h 10.244.0.2 k8smaster <none> <none>
kube-system coredns-6967fb4995-sfv7d 1/1 Running 0 46h 10.244.0.3 k8smaster <none> <none>
kube-system etcd-k8smaster 1/1 Running 0 46h 192.168.1.45 k8smaster <none> <none>
kube-system kube-apiserver-k8smaster 1/1 Running 0 46h 192.168.1.45 k8smaster <none> <none>
kube-system kube-controller-manager-k8smaster 1/1 Running 0 46h 192.168.1.45 k8smaster <none> <none>
kube-system kube-proxy-2hxwj 1/1 Running 0 46h 192.168.1.45 k8smaster <none> <none>
kube-system kube-proxy-jx8kp 1/1 Running 0 45h 192.168.1.47 k8s-s2 <none> <none>
kube-system kube-proxy-l9hc8 1/1 Running 0 45h 192.168.1.46 k8s-s1 <none> <none>
kube-system kube-scheduler-k8smaster 1/1 Running 0 46h 192.168.1.45 k8smaster <none> <none>
master 元件主要是叢集對控制(控制平面). master元件對全域性做決策(比如排程), 檢查監聽叢集事件(比如: 新新增的pod欄位型別符不符合此資源型別允許所需,欄位是否正確).
master元件可以在叢集中的任何機器上執行.但是,為了簡單起見,通常會在同一臺計算機上啟動所有master元件,而不會在此計算機上執行使用者容器(不再排程別的容器到master節點執行), 高可用叢集
kube-apiserver
kube-apiserver是控制叢集入口點,暴露叢集的API, 相當控制皮膚的前端.
kube-apiserver 設計為水平擴充套件, 可以通過多例項對其進行擴充套件 高可用叢集
etcd
etcd鍵值對儲存系統,它被用作於k8s資料落地(k8s叢集后端儲存系統), 為了安全起見要有規劃的對etcd資料進行備份.
etcd官方文件.
master節點上的元件,用於監視未分配節點的新建立的pod,並選擇要在其上執行的節點。
排程決策考慮的因素包括單個和集體資源需求、硬體/軟體/策略約束、關聯和反關聯規範、資料位置、工作負載間干擾和截止日期。(節點資源狀態,軟/硬親和,資源限制等等)
master節點上元件.
從邏輯上講,每個控制器都是一個單獨的程式,但是為了降低複雜性,它們都被編譯成一個二進位制檔案並在一個程式中執行。
其中包括:
Node Controller
:負責節點故障時的通知和響應。Replication Controller
:負責維護系統中每個replication controller物件的pod數量是否和設定的數量一致Endpoints Controller
: 負責service和pod相關聯,對外暴露訪問入口.Service Account & Token Controllers
:為新名稱空間建立預設帳戶和api訪問令牌。
node元件執行於每個工作節點上,其作用是維護執行的pods以及為k8s提供執行環境
kubelet
kubelet執行於每個node節點上,時刻監控著容器的執行.
kubelet通過PodSpecs檔案定義執行pods, 它監控著當前執行容器是否和PodSpecs設定的一致, 自定義容器(DockerFile)執行的容器不在kubelet管理範圍內.
kube-proxy
kube-proxy執行所有節點上,其實現 Kubernetes Service 概念的一部分.
kube-proxy管理每個節點上的網路規則,這些網路規則允許通過叢集內外的網路會話與pod進行網路通訊(允許叢集外網路訪問到叢集)
kube代理使用作業系統包過濾層 netfilter
(如果有且可用)。否則,kube代理轉發流量本身。
Container Runtime
容器執行時是負責執行容器的軟體(提供容器執行環境).
k8s支援多種容器執行環境: Docker, containerd, cri-o, rktlet 以及自己實現,只要符合CRI規範即可 Kubernetes CRI (Container Runtime Interface).
Addons(外掛)通過k8s資源(DaemonSet, Deployment等)來實現特定的功能集, 所以它名稱空間屬於kube-system下的資源
要實現某些功能,需要安裝外掛,可用的外掛列表Addons.
DNS (必須)
雖然其他外掛非硬性要求,但k8s叢集依賴DNS解析,它會作為Cluster DNS
記錄每個容器主機名和地址的解析
由k8s啟動管理的容器都會自動將主機名ip資訊加入到Cluster DNS
,已提供服務.
通常使用coredns作為k8s域名解析服務
Web UI (Dashboard) (非必須)
dashboard是kubernetes叢集的一個通用的、基於web的ui。它允許使用者管理和排除叢集中執行的應用程式以及叢集本身的故障。
Container Resource Monitoring
容器資源監視記錄中心資料庫中有關容器的通用時間序列度量,並提供用於瀏覽該資料的ui。
叢集日誌記錄
叢集級日誌記錄機制負責將容器日誌儲存到具有搜尋/瀏覽介面的中央日誌儲存。