八、Kubernetes 架構(下)
? 上一節我們討論了 Kubernetes 架構 Master 上運行的服務,本節討論 Node 節點,
(一)node
? Node 是 Pod 運行的地方,Kubernetes 支持 Docker、rkt 等容器 Runtime, Node上運行的 Kubernetes 組件有 kubelet、kube-proxy 和 Pod 網路(例如 flannel),
(1)kubelet
? kubelet 是 Node 的 agent,當 Scheduler 確定在某個 Node 上運行 Pod 后,會將 Pod 的具體配置資訊(image、volume 等)發送給該節點的 kubelet,kubelet 根據這些資訊創建和運行容器,并向 Master 報告運行狀態,
(2)kube-proxy
? service 在邏輯上代表了后端的多個 Pod,外界通過 service 訪問 Pod,service 接收到的請求是如何轉發到 Pod 的呢?這就是 kube-proxy 要完成的作業,
? 每個 Node 都會運行 kube-proxy 服務,它負責將訪問 service 的 TCP/UPD 資料流轉發到后端的容器,如果有多個副本,kube-proxy 會實作負載均衡,
(3) Pod 網路
Pod 要能夠相互通信,Kubernetes Cluster 必須部署 Pod 網路,flannel 是其中一個可選方案,
(二)架構圖
? 你可能會問:為什么 k8s-master 上也有 kubelet 和 kube-proxy 呢?
? 這是因為 Master 上也可以運行應用,即 Master 同時也是一個 Node,幾乎所有的 Kubernetes 組件本身也運行在 Pod 里,執行如下命令:
root@k8s-master:~# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-6d56c8448f-9grxk 1/1 Running 0 104m 10.244.0.3 k8s-master <none> <none>
kube-system coredns-6d56c8448f-mrx55 1/1 Running 0 104m 10.244.0.2 k8s-master <none> <none>
kube-system etcd-k8s-master 1/1 Running 0 105m 10.0.0.41 k8s-master <none> <none>
kube-system kube-apiserver-k8s-master 1/1 Running 0 105m 10.0.0.41 k8s-master <none> <none>
kube-system kube-controller-manager-k8s-master 1/1 Running 0 105m 10.0.0.41 k8s-master <none> <none>
kube-system kube-flannel-ds-cqwqv 1/1 Running 0 99m 10.0.0.41 k8s-master <none> <none>
kube-system kube-flannel-ds-nh2qg 1/1 Running 0 89m 10.0.0.43 k8s-node-02 <none> <none>
kube-system kube-flannel-ds-wbrs6 1/1 Running 0 88m 10.0.0.42 k8s-node-01 <none> <none>
kube-system kube-proxy-45prh 1/1 Running 0 104m 10.0.0.41 k8s-master <none> <none>
kube-system kube-proxy-g2c4x 1/1 Running 0 89m 10.0.0.43 k8s-node-02 <none> <none>
kube-system kube-proxy-jwvg5 1/1 Running 0 88m 10.0.0.42 k8s-node-01 <none> <none>
kube-system kube-scheduler-k8s-master 1/1 Running 0 105m 10.0.0.41 k8s-master <none> <none>
root@k8s-master:~#
? Kubernetes 的系統組件都被放到 kube-system namespace中,這里有一個 kube-dns 組件,它為 Cluster 提供 DNS 服務,我們后面會討論,kube-dns是在執行 kubeadm init 時(第 ⑤ 步)作為附加組件安裝的,
? kubelet 是唯一沒有以容器形式運行的 Kubernetes 組件,它在 Ubuntu 中通過 Systemd 運行,
root@k8s-master:~# systemctl status kubelet.service
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/lib/systemd/system/kubelet.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since Sun 2020-11-01 11:22:37 UTC; 1h 52min ago
Docs: https://kubernetes.io/docs/home/
Main PID: 78026 (kubelet)
Tasks: 16 (limit: 4632)
CGroup: /system.slice/kubelet.service
? 為了幫助大家更好地理解 Kubernetes 架構,下節我們將部署一個應用來展示各個組件是如何協作的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252000.html
標籤:其他
下一篇:九、 k8s 架構分析
