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 创建 ReplicaSet 的 工作流:
ReplicaSet与Pod的不同,就是在流程中增加了与“备份机制”相关的步骤。
step.1
kubectl 发起 create replicaSet 请求
step.2
k8s api server 接受 replicaSet 创建请求,创建yaml。
step.3
k8s api server将yaml的信息写入etcd数据库。
step.4
Controller-Manager中的ReplicaSetController,在etcd数据库中读到了新的replicaSet 信息后,
向k8s api server发起请求,创建3个Pod(个数可以自己指定)。
step.5
scheduler 在etcd中读到相应信息
若 3pod.spec.Node == null
则执行调度计算,找到最“闲”的若干个Node(如果有一个Node真的太闲,可能3个Pod都会被起在这个Node上面)
pod1.spec.Node = nodeA (更新记录)
pod2.spec.Node = nodeB
pod3.spec.Node = nodeA (Node都是随机分配的)
将这些信息写回etcd数据库中。
step.6
nodeA 的 kubelet 读etcd时读到apiserver的信息,调用docker api;创建属于自己的pod1/pod3的container
step.7
nodeB kubelet 读到 k8s api server的信息,调用docker api,创建pod2的container。
 
 注意:api server负责各个模块之间的通信。集群内的各个功能模块通过APIServer将信息存入etcd,当需要获取和操作这些数据时,则通过APIServer提供的REST接口(用GET、LIST或WATCH)来实现。
 
 
 
 
 
 

k8s创建pod流程的更多相关文章

  1. k8s创建pod和service的过程

    一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...

  2. K8s创建pod yaml文件详解

    kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...

  3. CentOS 7 yum安装 k8s 创建Pod一直处于ContainerCreating状态 问题解决

    问题描述 使用CentOS7的 yum 包管理器安装了 Kubernetes 集群,使用 kubectl 创建服务成功后,执行 kubectl get pods,发现AGE虽然在不断增加,但状态始终不 ...

  4. pod(一):Kubernetes(k8s)创建pod的两种方式

    目录 一.系统环境 二.前言 三.pod 四.创建pod 4.1 环境介绍 4.2 使用命令行的方式创建pod 4.2.1 创建最简单的pod 4.2.2 创建pod,指定镜像下载策略 4.2.3 创 ...

  5. k8s 创建deployment流程

    pod 创建流程https://blog.csdn.net/yan234280533/article/details/72567261 api server -> etcd -> cont ...

  6. 12.深入k8s:kubelet创建pod流程源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...

  7. kubernetes/k8s CRI分析-kubelet创建pod分析

    先来简单回顾上一篇博客<kubernetes/k8s CRI 分析-容器运行时接口分析>的内容. 上篇博文先对 CRI 做了介绍,然后对 kubelet CRI 相关源码包括 kubele ...

  8. k8s组件通信或者创建pod生命周期

    Kubernetes 多组件之间的通信原理: apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群 apiserver 对内(集群中的其他组件)和 ...

  9. kubectl 创建 Pod 背后到底发生了什么?

    原文链接:kubectl 创建 Pod 背后到底发生了什么? 想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run - ...

随机推荐

  1. Java字符串与数组

    字符串查找 indexOf(String s)方法返回搜索的字符或字符串首次出现的位置 lastIndexOf(String s)方法返回搜索的字符或字符串最后一次出现的位置 获取索引位置的字符 ch ...

  2. Python基础:五、Python程序的编写方式

    python程序有两种编写方式: 1. 进入cmd控制台(linux终端),输入python进入编辑模式,这时候我们可以直接编写python程序 2. 也可以在.py文件中编写python代码,通过p ...

  3. 安装FireEye渗透测试套件commando-vm

    前两天FireEye开源了套他们自己的渗透测试工具,玩了下,这里简单讲一下我安装的过程. 1.首先是虚拟机,在virtualbox或者vmware中安装一个新的Windows系统,win7或者win1 ...

  4. POJ3208 Apocalypse Someday

    题意 Language:Default Apocalypse Someday Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 2 ...

  5. MySQL表介绍

    MySQL InnoDB表介绍 一.索引组织表 在InnoDB引擎中,表都是根据主键顺序存放的.这种存储方式称为索引组织表,在InnoDB引擎中,每张表都有逐渐.如果没有显示定义主键,则引擎会按照以下 ...

  6. Eclipse上传项目到Git

    转载自:http://blog.csdn.net/fan510988896/article/details/56277822 Git有和Svn类似的功能. 我们想使用Eclipse上传项目到自己的Gi ...

  7. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

  8. 【PLM】【PDM】60页PPT终于说清了PDM和PLM的区别;智造时代,PLM系统10大应用趋势!

    https://blog.csdn.net/np4rhi455vg29y2/article/details/79266738

  9. Java 锁的学习

    个人学习整理,所有资料均来源于网络,非原创. 死锁的四个必要条件:互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用.请求与保持条件(Hold and wait):已经得 ...

  10. rabbitMQ 在 windows 64位环境下无法启动(提示乱码)的解决方法

    执行start命令时,提示乱码 解决方法: Set the environment variable “RABBITMQ_BASE” to “c:\rabbitmq”, uninstall the s ...