Kubernetes(k8s) Pod创建过程是什么?
kubectl 向 api server 发起一个create pod 请求
apiserver接收到pod创建请求后,不会去直接创建pod,而是生成一个包含创建信息的yaml。
apiserver 将刚才的yaml信息写入etcd数据库。到此为止仅仅是在etcd中添加了一条记录, 还没有任何的实质性进展。
scheduler 查看 k8s api ,类似于通知机制。
首先判断:pod.spec.Node == null?
若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最闲的node。然后将信息在etcd数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)
闲
pod.spec.Node = nodeA (设置一个具体的节点)
ps:同样上述操作的各种信息也要写到etcd数据库中中。
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 清单,下载镜像并启动容器。
找不到想要的答案?提一个您自己的问题。
0 声望
这家伙太懒,什么都没留下
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 (设置一个具体的节点)
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 清单,下载镜像并启动容器。
你的答案