k8s创建pod流程

 一,架构图

kubernetes 创建Pod 的 工作流:

step.1

kubectl 向 k8s api server 发起一个create pod 请求(即我们使用Kubectl敲一个create pod命令) 。

step.2

k8s api server接收到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中的记录),发现 k8s api server 中有了个新的Node;
如果这条记录中的Node与自己的编号相同(即这个Pod由scheduler分配给自己了);
则调用node中的docker api,创建container

二、流程图

Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。
在这里插入图片描述

二、具体过程

0.kubectl apply -f pod.yaml

1.kubectl将yaml文件转换为json,提交给apiserver,apiserver将数据存储到etcd中

2.scheduler通过list watch机制监听到创建新Pod的事件,根据Pod属性调度到Node上,同时给Pod打标签指明调度到具体哪个节点,可以通过kubectl get pod -owide查看

3.apiserver拿到调度结果并写入到etcd中

4.kubelet从apiserver获取分配到其所在节点的Pod

5.kubelet调用Docker的/var/run/docker.sock创建容器

6.Docker根据kubelet需求创建容器并把容器的状态汇报给kubelet

7.kubelet将Pod状态更新到apiserver

8.apiserver将状态信息写到etcd中

9.kubectl get pod

三、Pod事件

在这里插入图片描述
从事件可以看到首先会把Pod调度到Node,其次拉取镜像,最后创建并启动容器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值