Pod创建过程是什么?

無名 发表于: 2021-07-27   最后更新时间: 2021-07-27 15:40:04   491 游览

Kubernetes(k8s) Pod创建过程是什么?

发表于 2021-07-27
在线,5小时前登录

kubernetes Pod 创建的工作流:

step 1:

kubectl 向 api server 发起一个create pod 请求

step 2:

apiserver接收到pod创建请求后,不会去直接创建pod,而是生成一个包含创建信息的yaml。

step 3:

apiserver 将刚才的yaml信息写入etcd数据库。到此为止仅仅是在etcd中添加了一条记录, 还没有任何的实质性进展。

step 4:

scheduler 查看 k8s api ,类似于通知机制。

首先判断:pod.spec.Node == null?

若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最的node。
然后将信息在etcd数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)

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

step 5:

kubelet 通过监测etcd数据库(即不停地看etcd中的记录),发现api server 中有了个新的Node;
如果这条记录中的Node与自己的编号相同(即这个Pod由scheduler分配给自己了);
则调用node中的docker api,创建container。

1、客户端提交创建请求,可以通过 api-server 提供的 restful 接口,或者是通过 kubectl 命令行工具,支持的数据类型包括 JSON 和 YAML。

2、api-server 处理用户请求,将 pod 信息存储至 etcd 中。

3、kube-scheduler 通过 api-server 提供的接口监控到未绑定的 pod,尝试为 pod 分配 node 节点,主要分为两个阶段,预选阶段和优选阶段,其中预选阶段是遍历所有的 node 节点,根据策略筛选出候选节点,而优选阶段是在第一步的基础上,为每一个候选节点进行打分,分数最高者胜出。

4、选择分数最高的节点,进行 pod binding 操作,并将结果存储至 etcd 中。

5、随后目标节点的 kubelet 进程通过 api-server 提供的接口监测到 kube-scheduler 产生的 pod 绑定事件,然后从 etcd 获取 pod 清单,下载镜像并启动容器。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题
提问