k8s中pod的创建流程

 

        Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。

        一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。

        Docker是Kubernetes Pod中最常见的runtime ,Pods也支持其他容器runtimes。

        Kubernetes中的Pod使用可分两种主要方式:

  • Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最常见的用法; 在这种情况下,你可以将Pod视为单个封装的容器,但是Kubernetes是直接管理Pod而不是容器。
  • Pods中运行多个需要一起工作的容器。Pod可以封装紧密耦合的应用,它们需要由多个容器组成,它们之间能够共享资源(IP 、网络、cpu、mem、挂载目录等),这些容器可以形成一个单一的内部service单位 ——一个容器共享文件,另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。

 

第一步:kubectl   create  po

      首先进行认证后,kubectl会调用master  api创建对象的接口,然后向k8s  apiserver发出创建pod的命令

第二步:k8s  apiserver

        apiserver收到请求后,并非直接创建pod,而是先创建一个包含pod创建信息的yaml文件,并将文件信息写入到etcd中(如果此处是用yaml文件创建pod,则这两步就可以忽略)

第三步:controller  manager

        创建Pod的yaml信息会交给controller  manager ,controller  manager根据配置信息将要创建的资源对象(pod)放到等待队列中。

第四步:scheduler

        scheduler 查看 k8s api ,类似于通知机制。首先判断:pod.spec.Node == null?
若为null,表示这个Pod请求是新来的,需要创建;然后进行预选调度和优选调度计算,找到最“闲”的且符合调度条件的node。最后将信息在etcd数据库中更新分配结果:pod.spec.Node = node2(设置一个具体的节点)同样上述操作的各种信息也要写到etcd数据库中。

        分配过程需要两层调度:预选调度和优选调度

(1)预选调度:一般根据资源对象的配置信息进行筛选。例如NodeSelector、HostSelector和节点亲和性等。

(2)优选调度:根据资源对象需要的资源和node节点资源的使用情况,为每个节点打分,然后选出最优的节点创建资源对象(pod)。

第四步:kubelet

目标节点node2上的kubelet进程通过API Server,查看etcd数据库(kubelet通过API Server的WATCH接口监听Pod信息,如果监听到新的pod副本被调度绑定到本节点)监听到kube-scheduler产生的Pod绑定事件后获取对应的Pod清单,然后调用node1本机中的docker  api初始化volume、分配IP、下载image镜像,创建容器并启动服务

第五步:controller  manager

controller  manager会通过API Server提供的接口实时监控资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将其状态修复到“期望状态”

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值