k8s创建Pod的流程
Kubernetes(k8s)中Pod的创建过程是一个涉及多个组件协作的复杂流程,下面将详细描述这个过程,确保内容的详尽性和深度。
一、用户提交创建请求
Pod的创建始于用户通过kubectl命令行工具或其他Kubernetes API客户端提交创建请求。用户通常需要编写一个描述Pod及其容器配置、资源需求和其他相关设置的YAML文件。这个文件是Pod的规格(spec)的声明性描述。使用kubectl apply -f <yaml文件>命令,用户将Pod规格提交给Kubernetes API server。
二、API Server的认证与接收
API server接收到Pod创建请求后,首先进行身份认证和授权检查,确保请求来自合法的用户且具备相应的权限。一旦通过认证和授权,API server会解析YAML文件中的信息,并将其转换为Pod对象的API表示。这个表示包含了Pod的所有配置细节,如容器的镜像、环境变量、资源限制等。
三、写入etcd存储
API server将Pod对象的初始状态写入etcd,这是一个分布式的键值存储系统,用于持久化保存Kubernetes集群的状态信息。etcd的写入操作是原子的,确保了数据的一致性和可靠性。通过将Pod对象的状态存储在etcd中,Kubernetes集群中的其他组件可以访问和监视这些状态变化。
四、Scheduler调度
Kubernetes Scheduler是一个核心组件,负责将Pod分配到集群中的合适节点上。Scheduler通过监视API server上的Pod对象来发现新创建的Pod。当Scheduler检测到尚未被调度的Pod时,它会根据一系列调度算法和策略(如资源需求、节点亲和性、反亲和性等)来选择一个最合适的节点。这个选择过程考虑了集群的当前状态、节点的资源可用性以及Pod的特定需求。一旦选定节点,Scheduler会将Pod与所选节点的绑定信息更新到API server中。
五、Kubelet创建并运行Pod
被选中的节点上的kubelet代理会监视API server以获取分配给该节点的Pod。当kubelet检测到有新的Pod被调度到其所在节点时,它会开始创建并运行Pod中的容器。kubelet首先根据Pod规格中的信息拉取容器镜像(如果本地不存在),然后设置容器的网络环境、挂载存储卷等。kubelet还负责确保容器的健康状态,并在需要时重启容器以恢复其正常运行。此外,kubelet还会定期向API server报告Pod的状态信息,以便集群中的其他组件和用户可以了解Pod的当前状态。
六、状态更新与反馈
在Pod创建和运行过程中,kubelet会不断向API server报告Pod的状态信息(如运行中、成功、失败等)。API server将这些状态更新写入etcd中保存。这样,用户和其他Kubernetes组件可以通过API server查询Pod的当前状态,以便进行监控和管理操作。同时,如果Pod的状态发生变化(如容器崩溃或资源不足),kubelet会及时报告这些变化,并触发相应的故障处理机制(如自动重启容器或重新调度Pod到其他节点)。
总结来说,Kubernetes中Pod的创建过程涉及多个组件的协作和交互,包括用户提交请求、API server的认证与接收、etcd的存储与状态更新、Scheduler的调度以及kubelet的创建与运行等步骤。这个过程确保了Pod能够在Kubernetes集群中正确创建并按预期运行。
k8s创建Pod的流程的更多相关文章
- k8s创建pod流程
kubernetes 创建Pod 的 工作流: step.1 kubectl 向 k8s api server 发起一个create pod 请求(即我们使用Kubectl敲一个create pod命 ...
- k8s创建pod和service的过程
一.概念介绍 更详细的参见:https://www.kubernetes.org.cn/5335.html 1.K8s K8s 是一种用于在一组主机上运行和协同容器化应用程序的系统,提供应用部署.规划 ...
- K8s创建pod yaml文件详解
kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...
- CentOS 7 yum安装 k8s 创建Pod一直处于ContainerCreating状态 问题解决
问题描述 使用CentOS7的 yum 包管理器安装了 Kubernetes 集群,使用 kubectl 创建服务成功后,执行 kubectl get pods,发现AGE虽然在不断增加,但状态始终不 ...
- pod(一):Kubernetes(k8s)创建pod的两种方式
目录 一.系统环境 二.前言 三.pod 四.创建pod 4.1 环境介绍 4.2 使用命令行的方式创建pod 4.2.1 创建最简单的pod 4.2.2 创建pod,指定镜像下载策略 4.2.3 创 ...
- kubernetes/k8s CRI分析-kubelet创建pod分析
先来简单回顾上一篇博客<kubernetes/k8s CRI 分析-容器运行时接口分析>的内容. 上篇博文先对 CRI 做了介绍,然后对 kubelet CRI 相关源码包括 kubele ...
- k8s组件通信或者创建pod生命周期
Kubernetes 多组件之间的通信原理: apiserver 负责 etcd 存储的所有操作,且只有 apiserver 才直接操作 etcd 集群 apiserver 对内(集群中的其他组件)和 ...
- kubectl 创建 Pod 背后到底发生了什么?
原文链接:kubectl 创建 Pod 背后到底发生了什么? 想象一下,如果我想将 nginx 部署到 Kubernetes 集群,我可能会在终端中输入类似这样的命令: $ kubectl run - ...
- 12.深入k8s:kubelet创建pod流程源码分析
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 在上一篇中,我们知道在kubelet中,工作核心就是围绕着整个syn ...
- 9.1 k8s pod版本更新流程及命令行实现升级与回滚
1.创建 Deployment root@k8-deploy:~/k8s-yaml/controllers/deployments# vim nginx-deployment.yaml apiVers ...
随机推荐
- JavaScript快速入门(一)
JavaScript快速入门(二) 语句 只需简单地把各条语句放在不同的行上就可以分隔它们 var a = 1 var b = 2 如果想把多条语句放在同一行上,就需要用分号隔开 var a = 1; ...
- 金邦2.5寸SATA固态硬盘R3 2TB开箱
上次帖子里根据坛友的反馈,然后结合狗东的搜索,找了个金邦的2.5寸的SATA的固态硬盘,图的是它的价格和容量.但是我拿到它这个实物的时候还是略有点失望,因为包装太简单,坛友里说估计是贴牌.反正已经入手 ...
- 1.29 深痛教训 关于 unsigned
unsigned long long 无符号长长整型,常用于比 long long 大一倍的整数范围或自然溢出 \(\bmod 2^{64}\) unsigned long long 范围为 \(0\ ...
- 通过程序自动设置网卡的“internet共享”选项
操作系统 : Windows 10_x64 [版本 10.0.19042.685] Windows下可以通过网卡共享进行上网,但是需要在网卡的属性里面进行设置,需要在视窗界面进行操作,不能实现自动化. ...
- 初次尝试GPU Driven —— 大范围植被渲染
初次尝试GPU Driven -- 大范围植被渲染 GPU Driver简单概要,即把整体逻辑放到GPU上运行,解放CPU压榨GPU,初次尝试,记录一下研究过程. 渡神纪 塞尔达 塞尔达 塞尔达 在开 ...
- 普冉PY32系列(十一) 基于PY32F002A的6+1通道遥控小车II - 控制篇
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- STC8H8K64U 的 USB 功能测试(未成功)
对 STC8H8K64U 的 USB 功能测试, 因为存在很多问题并且未能解释/解决, 就不写到系列里了, 把记录放上来抛砖引玉吧. 代码 测试代码下载地址 http://www.stcmcudata ...
- 【Unity3D】场景切换、全屏_恢复切换、退出游戏、截屏
1 前言 1)场景切换 场景切换可以使用 SceneManager 的 LoadScene 和 LoadSceneAsync 方法,如下: public static void LoadSce ...
- 【Unity3D】碰撞体组件Collider
1 前言 Unity3D 中碰撞体(Collider)组件用于检测运动的物体之间是否发生碰撞,也可以作为触发器使用.产生碰撞的条件是: 2 个游戏对象都有 Collider 至少有一个游戏对象有 ...
- less变量书写及样式混入
定义变量 定义混入样式 变量及混入样式使用 样式文件中 ~@代表src