查看原文
其他

一张图搞懂 Pod 创建背后发生了什么?

点击关注 👉 进击云原生 2022-11-10


点击上方蓝字关注 👆👆

大家好呀,近期微信公众号改版,为了防止错过消息,希望大家可以动动小手将此公众号添加到“星标⭐”,非常感谢~

后台回复【资料包】获取学习资料


当你创建一个 pod/deployment 时,幕后究竟发生了什么?下面将尝试将重要事件串起来:

注意到,在上图中我没有包含 etcd。原因很简单,API server 是唯一可以直接与 etcd 对话的组件,并且只有它可以对其进行更改。因此,您可以假设 etcd 位于 API server 后面并隐藏在此图中。另外,我在这里只谈论两个主要控制器,其他控制器也将以类似的方式工作。

下面让我们了解执行 kubectl create 命令后的事件链:

第 1 步:当您使用 kubectl create 命令时,会向 API server 发送包含部署清单的 HTTP POST 请求。API server 将其存储在 etcd 数据存储中,并向 kubectl 返回响应。

第 2 步和第 3 步: API server 有一个 watch 机制,所有 watch 客户端会收到通知。这些客户端之一是 Deployment 控制器。Deployment 控制器检测到一个 Deployment 对象,并使用 Deployment 的当前规范创建一个 ReplicaSet。该资源被发送回 API server,API server 将其存储在 etcd 数据存储中。

第 4 步和第 5 步: 与上一步类似,所有观察者都会收到有关 API Server 中所做更改的通知,这一次更改由 ReplicaSet 控制器接收。控制器了解所需的副本数和对象规范中定义的 pod 选择器,创建 pod 资源,并将此信息发送回 API server,后者将其存储在 etcd 数据存储中。

第 6 步和第 7 步: 这是已经知道 Pod 所需的所有信息,但问题是 Pod 应该在哪个节点上运行?调度程序监视尚未分配节点的 pod,并开始将所有节点过滤和打分,以选择运行 pod 的最佳节点。一旦选择了节点,该信息将被添加到 pod 规范中,并被发送回 API Server 以将其存储在 etcd 数据存储中。

第 8、9 和 10 步: 请注意,到目前为止,所有步骤都发生在控制平面本身中,此时工作节点没有做任何事情。pod 的创建不由控制平面处理,而是运行在节点上的 kubelet 服务监视 API Server 中的 pod 规范,以检查是否需要创建 pod。在调度器选择的节点上运行的 kubelet 服务将获取 pod 规范并调用工作节点中的容器运行时创建容器。下载容器镜像(如果尚未存在)并且开始运行容器。

综上所述,应该可以帮助您大概理解 Kubernetes 中的事件流。DaemonSet 或 StatefulSet 资源对象,除了使用不同的控制器之外,pod 创建过程不变。

- END -




后台回复“加群”,带你进入高手交流群



推荐阅读


开源容器 Podman 常用命令总结!

就在刚刚 k8s 1.24 正式发布,来看功能总览

2022 年不容错过的 6 大云原生趋势!

8 个用于 k8s 持久化存储的 CNCF 项目

DevOps: 每个阶段最常用的工具有哪些?

Nomad 会替代 Kubernetes 吗?两者如何选择?

k8s 1.24 将结束对 dockershim 的支持

一文全方位了解什么是云原生?

Docker 入门终极指南,详细版!

开发者必备的 7 款效率提升工具!

16个 Awesome 工具让 Kubernetes 如虎添翼

漫画轻松看懂如何用 Kubernetes 实现 CI/CD

5 款顶级 Docker 容器 GUI 管理工具!

阿里开源的低代码引擎,已收获 4.5K 星星

这 6 个方面,对微服务安全至关重要

这个开源工具防止错误配置  乱入 K8s 生产环境

5 个 Docker 替代方案

6 个 CI/CD 的 CNCF 项目,你知道几个?

新手必须知道的 Kubernetes 架构

Kubernetes 架构核心点详细总结!



全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【红包封面】获取超好看封面,回复【加群】进入高手如云技术交流群


分享、点赞和在看

支持我们分享更多好文章,谢谢!

                

 点个在看集群永保稳定👇


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存