K8s 创建 Pod 流程

 

 

 

 Pod 是 Kubernetes 中最基本的部署调度单元,可以包含 container,逻辑上表示某种应用的一个 实例。例如一个 web 站点应用由前端、后端及数据库构建而成,这三个组件将运行在各自的容器中,那 么我们可以创建包含三个 container 的 pod。 创建 pod 流程:

 

 

master 节点:kubectl -> kube-api -> kubelet -> CRI 容器环境初始化

第一步:
客户端提交创建 Pod 的请求,可以通过调用 API Server 的 Rest API 接口,也可以通过 kubectl 命令行
工具。如 kubectl apply -f filename.yaml(资源清单文件)

第二步:
apiserver 接收到 pod 创建请求后,会将 yaml 中的属性信息(metadata)写入 etcd。
第三步:
apiserver 触发 watch 机制准备创建 pod,信息转发给调度器 scheduler,调度器使用调度算法选择
node,调度器将 node 信息给 apiserver,apiserver 将绑定的 node 信息写入 etcd

调度器用一组规则过滤掉不符合要求的主机。比如 Pod 指定了所需要的资源量,那么可用资源比 Pod 需
要的资源量少的主机会被过滤掉。

scheduler 查看 k8s api ,类似于通知机制。
首先判断:pod.spec.Node == null?
若为 null,表示这个 Pod 请求是新来的,需要创建;因此先进行调度计算,找到最“闲”的 node。
然后将信息在 etcd 数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)

ps:同样上述操作的各种信息也要写到 etcd 数据库中中

第四步:
apiserver 又通过 watch 机制,调用 kubelet,指定 pod 信息,调用 Docker API 创建并启动 pod 内的容
器。

第五步:
创建完成之后反馈给 kubelet, kubelet 又将 pod 的状态信息给 apiserver,
apiserver 又将 pod 的状态信息写入 etcd。

posted @ 2023-03-13 10:35  しみずよしだ  阅读(785)  评论(0编辑  收藏  举报