1. kubernetes總架構圖
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaug2YyFWLzhzavwVbvNmLuVnahlnbhhmLuR2Yvw1LcpDc0RHaiojIsJye.jpg)
2. kubernetes 各元件介紹
2.1 Master 節點
Master是kubernetes的大腦,運作的Deamon 服務包括kube-apiserver、kube-scheduler、kube-contronller-
manager、etcd和pod網絡
2.1.1 各元件介紹
- API Server(kube-apiserver)
API Server提供HTTP/HTTPS RESTful API,即Kubernetes API。API Server是Kubernetes Cluster的前端接
口,各種用戶端工具(CLI或UI)以及Kubernetes其他元件可以通過它管理Cluster的各種資源。
- Scheduler(kube-scheduler)
Scheduler負責決定将Pod放在哪個Node上運作。Scheduler在排程時會充分考慮Cluster的拓撲結構,目前各個
節點的負載,以及應用對高可用、性能、資料親和性的需求。
- Controller Manager(kube-controller-manager)
Controller Manager負責管理Cluster各種資源,保證資源處于預期的狀态。Controller Manager由多種Controller
組成,包括replication controller、endpoint controller、namespace controller、serviceaccounts controller等。
不同的controller管理不同的資源。例如,replication controller管理Deployment、StatefulSet、DaemonSet的生
命周期,namespace controller管理Namespace資源。
- etcd
etcd負責儲存Kubernetes Cluster的配置資訊和各種資源的狀态資訊。當資料發生變化時,etcd會快速通知
Kubernetes相關元件。
- Pod網絡
Pod要能夠相同通信,Kubernetes Cluster必須部署Pod網絡,flannel是其中一個可選方案。
2.1.2 master工作流程圖
- Kubecfg将特定的請求,比如建立Pod,發送給Kubernetes Client。
- Kubernetes Client将請求發送給API server。
- API Server根據請求的類型,比如建立Pod時storage類型是pods,然後依此選擇何種REST Storage API對請求作出處理。
- REST Storage API對的請求作相應的處理。
- 将處理的結果存入高可用鍵值存儲系統Etcd中。
- 在API Server響應Kubecfg的請求後,Scheduler會根據Kubernetes Client擷取叢集中運作Pod及Minion/Node資訊。
- 依據從Kubernetes Client擷取的資訊,Scheduler将未分發的Pod分發到可用的Minion/Node節點上。
2.2 Node節點
Node節點屬于工作節點,是pod運作的地方。
2.2.1 各元件介紹
- kubelet
node的agent,當scheduler去确定在某個node上運作pod後,會将pod的具體配置資訊發送給該節點的
kubelet, kubelet會根據遮羞資訊建立和運作容器,并向master報告運作狀态。
-
kube-proxy
每個node都會運作kube-proxy服務,外界通過service通路pod,kube-proxy負責将降通路service的TCP/UDP數
據流轉發到後端的容器。如果有多個副本,kube-proxy會實作負載均衡。
- pod網絡
2.2.2 kubectl 架構解讀
Kubelet[節點上的Pod管家]
負責Node節點上pod的建立、修改、監控、删除等全生命周期的管理
定時上報本Node的狀态資訊給API Server。
kubelet是Master API Server和Minion/Node之間的橋梁,接收Master API Server配置設定給它的commands和work,
通過kube-apiserver間接與Etcd叢集互動,讀取配置資訊。
具體的工作如下:
- 設定容器的環境變量、給容器綁定Volume、給容器綁定Port、根據指定的Pod運作一個單一容器、給指定的Pod建立network 容器。
- 同步Pod的狀态、同步Pod的狀态、從cAdvisor擷取container info、 pod info、 root info、 machine info。
- 在容器中運作指令、殺死容器、删除Pod的所有容器。
檢視叢集節點資訊
kubectl get nodes -o wide
參考連結:
https://yq.aliyun.com/articles/47308?spm=5176.100240.searchblog.19.jF7FFa