[ k8s-005 ] Kubernetes架构

106 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第5天,点击查看活动详情

本章节主要介绍master和node的架构,整体掌握架构流程即可

节点概念

Kubernetes 通过将容器放入 Pod 中以在节点上运行来运行您的工作负载。节点可以是虚拟机或物理机,具体取决于群集。每个节点都由控制平面管理,并包含运行 Pod 所需的服务。 通常,一个群集中有几个节点。在学习或资源有限的环境中,您可能只有一个节点。 节点上的组件包括 kubelet、容器运行时和 kube 代理。

节点注册

您可以使用 kubectl 创建和修改 Node 对象。 如果要手动创建 Node 对象,请设置 kubelet 标志 --register-node=false。 您可以修改 Node 对象,而不考虑 --register-node 的设置。

例如,您可以在现有节点上设置标签或将其标记为不可调度。 您可以将节点上的标签与 Pod 上的节点选择器结合使用,以控制调度。例如,您可以将 Pod 限制为只能在可用节点的子集上运行。

将节点标记为不可调度会阻止调度程序将新 Pod 放置在该节点上,但不会影响该节点上的现有 Pod。这可用作节点重新启动或其他维护之前的准备步骤。

架构说明

kubelet是唯一没有以容器形式运行的Kubernetes组件,它在Ubuntu中通过Systemd服务运行

systemctl status kubelet.service

过程说明

①kubectl发送部署请求request到API Server。

②API Server通知Controller Manager创建一个deployment资源。

③Scheduler调度器执行调度任务,将两个副本Pod分发到k8s-node1和k8s-node2。

④k8s-node1和k8s-node2在各自的节点上通过的kubectl创建并运行Pod。

总结

(1)所有应用相关信息保存在etcd中,执行kubectl get pod时API Server会从中读取这些数据。

(2)网络插件flannel会为每个Pod都分配IP。(目前没有创建service,所以kube-proxy暂未使用到)