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 ...
随机推荐
- 《Mybatis 手撸专栏》第2章:创建简单的映射器代理工厂
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 着急和快,是最大的障碍! 慢下来,慢下来,只有慢下来,你才能看到更全的信息,才能学到 ...
- HS_xh 诗选
@HS_xh 给我以火,给我以火!!! 我将在烈火中永生,囚歌写的时候人家还没出生,诶6年后就死了是吧,啊那人家都快死了,诶你怎么死了 你能不能凑齐十个一起发 胡适于 1920 发表了中国第一部白话诗 ...
- 飞桨paddlespeech语音唤醒推理C INT8 定点实现
前面的文章(飞桨paddlespeech语音唤醒推理C定点实现)讲了INT16的定点实现.因为目前商用的语音唤醒方案推理几乎都是INT8的定点实现,于是我又做了INT8的定点实现. 实现前做了一番调研 ...
- 教你用JavaScript实现实时字符计数器
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个实时字符计数器.用户在指定位置打字,程序实时显示字符数量. 案例演示 在编辑框内输入 ...
- 《ASP.NET Core 与 RESTful API 开发实战》-- (第8章)-- 读书笔记(上)
第 8 章 认证和安全 8.1 认证 认证(Authentication)是指验证用户身份的过程,授权(Authorization)是验证一个已经通过认证的用户是否有权限做某些事的过程 常见的 HTT ...
- Git 分支与合并
1. Git 对象 Git 的核心部分是一个简单的键值对数据库.可以向 Git 仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容. 所有内容均以树对象和数据对象的 ...
- 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)
目录 前言 一.代码优化 1.1Stream 流自分页 1.2数据库分页 1.3其它思考 二.硬件配置 2.1云服务器配置 三.文章小结 前言 OOM 几乎是笔者工作中遇到的线上 bug 中最常见的, ...
- 【Unity3D】Renderer Feature简介
1 3D 项目迁移到 URP 项目后出现的问题 3D 项目迁移至 URP 项目后,会出现很多渲染问题,如:材质显示异常.GL 渲染不显示.多 Pass 渲染异常.屏幕后处理异常等问题.下面将针对这 ...
- 【Unity3D】粒子系统ParticleSystem
1 简介 拖尾(TrailRenderer).线段渲染器(LineRenderer).粒子系统(ParticleSystem)是 Unity3D 提供的三大特效,其中粒子系统的功能最为强大,特效也 ...
- 启动MySQL5.7服务无法启动或Table 'mysql.plugin' doesn't exist
首先说一下我这个是mysql5.7.16免安装版,不过这个问题对于5.7版本应该都适用. 问题重现: 安装过程也说一下吧: 1.将下载的压缩文件解压到指定目录, 我的是:E:\program\ ...