上一节咱们讨论了 Kubernetes 架构 Master 上运行的服务,本节讨论 Node 节点。node
Node 是 Pod 运行的地方,Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node上运行的 Kubernetes 组件有 kubelet、kube-proxy 和 Pod 网络(例如 flannel)。后端
kubelet 是 Node 的 agent,当 Scheduler 肯定在某个 Node 上运行 Pod 后,会将 Pod 的具体配置信息(image、volume 等)发送给该节点的 kubelet,kubelet 根据这些信息建立和运行容器,并向 Master 报告运行状态。api
service 在逻辑上表明了后端的多个 Pod,外界经过 service 访问 Pod。service 接收到的请求是如何转发到 Pod 的呢?这就是 kube-proxy 要完成的工做。网络
每一个 Node 都会运行 kube-proxy 服务,它负责将访问 service 的 TCP/UPD 数据流转发到后端的容器。若是有多个副本,kube-proxy 会实现负载均衡。架构
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 架构,下节咱们将部署一个应用来展现各个组件是如何协做的。