k8s pod创建过程

如果是单独的创建一个pod, 则其创建过程是这样的:
1、首先,驴通过kubectl或其他api客户端I具提交需要创建的pod信息给apiserver;
2、apiserver验证客户端的用户权限信息 ,验证通过开始处理创建请求生成pod对象信息,并将信息存入etcd,然后.
返回确认信息给客户端;
3、apiserver开始反馈etcd中pod对象的变化, 其他组件使用watch机制跟踪apiserver上的变动;
4、scheduler发现有新的pod对象要创建,开始调用内部算法机制为pod分配最佳的主机,并将结果信息更新至apis
erver;
5、node节点上的kubele通过watch机制跟踪apiserver发现有pod调度到本节点,尝试调用docker启动容器,并将
结果反馈apiserver;
6、apiserver将收到的pod状态信息存入etcd中。
到此,整个pod创建完毕。

  1. Pod 状态更新:

    • Pod 一旦启动,kubelet 会定期向 Kubernetes API 服务器报告 Pod 的状态,包括容器是否运行、是否成功、是否失败等。
  2. Pod 网络配置:

    • Pod 被分配一个 IP 地址,这个地址在 Pod 的整个生命周期内是不变的,即使 Pod 被重新调度到另一个节点上。
  3. 服务发现:

    • Pod 可以通过 Kubernetes 服务(Service)发现和通信,服务为一组 Pod 提供一个单一的访问接口。
  4. 健康检查:

    • 一旦 Pod 运行,kubelet 会定期对 Pod 进行健康检查(如果配置了的话),包括存活探针(Liveness Probe)和就绪探针(Readiness Probe)。
  5. Pod 就绪:

    • 当 Pod 通过就绪探针检查后,它会被标记为就绪状态,这意味着它可以开始接收流量。
  6. 监控和日志:

    • Kubernetes 会监控 Pod 的运行状态,并可以通过配置的日志收集系统收集容器的日志。
  7. 扩展和更新:

  8. 如果 Pod 是由 Deployment、StatefulSet 或 DaemonSet 等控制器管理的,那么在需要时,控制器可以自动扩展 Pod 的副本数量,或者在更新时替换旧的 Pod。 
  9. 复制代码
    一、用户提交创建请求
    
    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到其他节点)。
    复制代码

     

                                   
posted @   滴滴滴  阅读(177)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
历史上的今天:
2022-11-03 Calico 路由反射模式权威指南
2022-11-03 etcd 查看calico信息
2022-11-03 Pod 终止流程
2017-11-03 ansible result.stdout.find('running') != -1 判断状态
2017-11-03 ansible role
2017-11-03 ansible register when: result | succeeded when: item.rc != 0
点击右上角即可分享
微信分享提示