学会kubernetes之pod创建过程和调度一片就够了!!!

本文详细介绍了Kubernetes Pod的创建过程和调度机制。从用户提交Pod Spec到API Server,再到scheduler选择合适的节点,最后kubelet在目标节点上启动容器。文章探讨了nodeName和nodeSelector两种调度方式,并列举了常见错误状态的处理方法。
摘要由CSDN通过智能技术生成

调度过程

以下提供的创建pod时序图
在这里插入图片描述

  • kubectl 向 k8s api server 发起一个create pod 请求(即我们使用Kubectl敲一个create
    pod命令) 。 k8s api server接收到pod创建请求后,不会去直接创建pod;而是生成一个包含创建信息的yaml。sc

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

  • cheduler 查看 k8s api 首先判断:pod.spec.Node == null?
    若为null,表示这个Pod请求是新来的,需要创建;因此先进行调度计算,找到最合适的node。
    然后将信息在etcd数据库中更新分配结果:pod.spec.Node = nodeA (设置一个具体的节点)同样上述操作的各种信息也要写到etcd数据库中。
    apiserver还会通知s’cheduler更新信息

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

Pod是Kubernetes的基础单元,了解其创建的过程,更有助于理解系统的运作。

①用户通过kubectl或其他API客户端提交Pod Spec给API Server。

②API Server尝试将Pod对象的相关信息存储到etcd中,等待写入操作完成,API Server返回确认信息到客户端。

③API Server开始反映etcd中的状态变化。

④所有的Kubernetes组件通过"watch"机制跟踪检查API Server上的相关信息变动。

⑤kube-scheduler(调度器)通过其"watcher"检测到API Server创建了新的Pod对象但是没有绑定到任何工作节点。

⑥kube-scheduler为Pod对象挑选一个工作节点并将结果信息更新到API Server。

⑦调度结果新消息由API Server更新到etcd,并且API Server也开始反馈该Pod对象的调度结果。

⑧Pod被调度到目标工作节点上的kubelet尝试在当前节点上调用docker engine进行启动容器,并将容器的状态结果返回到API Server。

⑨API Server将Pod信息存储到etcd系统中。

⑩在etcd确认写入操作完成,API Server将确认信息发送到相关的kubelet。

1.1:调度方式

1、nodeName:

用于将Pod调度到指定的node名称上(跳过调度器直接分配)

2、nodeSelector:

用于将pod调度到匹配label【标签】的node上

两种方式都是通过yaml文件来实现

1.2:nodeName方式

创建pod资源,编写yaml文件

[root@master01 demo]# vim nodename.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeName: 192.168.158.30
  containers:
  - name: nginx
    image: nginx:1.15

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值