8、Kubernetes 架構(下)

8、Kubernetes 架構(下)

​ 上一節咱們討論了 Kubernetes 架構 Master 上運行的服務,本節討論 Node 節點。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 報告運行狀態。api

(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 呢?ide

​ 這是由於 Master 上也能夠運行應用,即 Master 同時也是一個 Node。幾乎全部的 Kubernetes 組件自己也運行在 Pod 裏,執行以下命令:spa

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 時(第 ⑤ 步)做爲附加組件安裝的。code

​ kubelet 是惟一沒有以容器形式運行的 Kubernetes 組件,它在 Ubuntu 中經過 Systemd 運行。server

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 架構,下節咱們將部署一個應用來展現各個組件是如何協做的。

相關文章
相關標籤/搜索