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的流程的更多相关文章

  1. k8s创建pod流程

    kubernetes 创建Pod 的 工作流: step.1 kubectl 向 k8s api server 发起一个create pod 请求(即我们使用Kubectl敲一个create pod命 ...

  2. k8s创建pod和service的过程

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

  3. K8s创建pod yaml文件详解

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. 9.1 k8s pod版本更新流程及命令行实现升级与回滚

    1.创建 Deployment root@k8-deploy:~/k8s-yaml/controllers/deployments# vim nginx-deployment.yaml apiVers ...

随机推荐

  1. C# 多线程与线程扫描器

    多线程是一种复杂的编程技术,可以同时运行多个独立的线程来处理各种任务.在C#中,可以使用Thread类和ThreadPool类来实现多线程编程.Thread类用于创建和控制线程.可以使用Thread. ...

  2. django向数据库更新时间

    1 今天的日期可以用下面的代码: 2 3 import datetime 4 5 today = datetime.date.today() 6 7 8 9 得到昨天的日期可以用: 10 11 yes ...

  3. Swift中常见的String用法,Array高阶使用,Set集合操作

    String字符串常见用法 生成字符串 创建字符串 let greeting = "Hello, world!" let name = String("John" ...

  4. VB6的WindowsXP控件引擎 - 开源研究系列文章

    这几天翻了一下原来VB6的代码,将一些有用的代码进行了整理,然后将这些代码记录下来,开源出来,让需要的朋友能够进行代码复用. 这次介绍的是一个VB6的WindowXP的控件引擎代码,主要是在程序启动的 ...

  5. 面试官:你能简单聊聊MyBatis执行流程

    本文分享自华为云社区<面试必问|聊聊MyBatis执行流程?>,作者: 冰 河. MyBatis源码解析 大家应该都知道Mybatis源码也是对Jbdc的再一次封装,不管怎么进行包装,还是 ...

  6. delphi TThread.WaitFor 用法

    在 Delphi 中,TThread.WaitFor 方法用于等待一个线程完成执行.当你创建一个线程并希望主线程(或其他线程)等待这个线程结束时,你可以使用这个方法. 以下是 TThread.Wait ...

  7. MySQL的执行流程和执行顺序

    MySQL执行过程以及顺序 前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据的来源,MySQL承担者存储数据和读写数据的职责.因为学习和了解MySQL是至关重要的,那么当我们在客户端 ...

  8. 【framework】Task简介

    1 前言 ​ Task 即任务,一个 Task 对应一个 Activity,其父容器为 TaskStack,子容器为 AppWindowToken. ​ 关于其父类及祖父类的介绍,见 → Window ...

  9. C++ 时间复杂度

    看到网上一些资料的案例不全,所以自己开个来复习. O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<-<O(2^n)< ...

  10. 文件IO操作开发笔记(一):使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具

    前言   在做到个别项目对日志要求较高,要求并行写入的数据较多,尽管写入数据的线程放在子线程,仍然会造成界面程序的假死(实际上Qt还是在跑,只是磁盘消耗超过瓶颈,造成假死(注意:控制台还能看到打印输出 ...