首页 > 其他分享 >在K8S中,陈述⼀下Pod的声明周期?

在K8S中,陈述⼀下Pod的声明周期?

时间:2024-08-12 19:08:16浏览次数:9  
标签:容器 Kubernetes 状态 陈述 API 终止 Pod K8S

在Kubernetes(K8S)中,Pod的声明周期是指Pod从创建到终止的整个过程,它涵盖了Pod的多个状态和阶段。以下是Pod声明周期的详细解释:

一、Pod的声明周期概述

Pod的声明周期通常包括以下几个主要阶段:创建、初始化(可选)、运行、终止。在这些阶段中,Pod会经历不同的状态和事件,这些状态和事件共同构成了Pod的完整生命周期。

二、Pod的主要状态和阶段
  1. 挂起(Pending)
    • 状态描述:Pod已被Kubernetes系统接受,但尚未被调度到任何节点上。这通常是因为Pod请求的资源(如CPU和内存)尚未可用,或者Pod正在等待某些外部条件(如镜像下载)的满足。
    • 事件:API Server创建了Pod资源对象并已存入etcd中,但它尚未被调度完成,或仍处于从仓库下载镜像的过程中。
  2. 运行中(Running)
    • 状态描述:Pod已被调度到一个节点上,并且Pod中所有的容器都已被创建。至少有一个容器正在运行,或者正处于启动或重启状态。
    • 事件:kubelet调用当前节点的Docker(或其他容器运行时)来启动容器,容器启动成功后,docker将启动状态返回给kubelet,kubelet再将容器状态信息更新给API Server,最终API Server将Pod更新信息写入到etcd中。
  3. 成功(Succeeded)
    • 状态描述:Pod中的所有容器都已成功终止,并且不会再重启。这通常发生在批处理作业完成后。
  4. 失败(Failed)
    • 状态描述:Pod中的所有容器都已终止,但至少有一个容器是以失败状态终止的。这通常意味着容器以非零状态码退出,或者由于某种原因被系统终止。
  5. 未知(Unknown)
    • 状态描述:由于某种原因,Kubernetes系统无法获取到Pod的状态信息。这通常是由于与节点通信失败或节点本身故障导致的。
三、Pod的额外阶段和特性
  1. 初始化容器(Init Containers)
    • 描述:初始化容器是在Pod的主容器启动之前运行的容器。它们主要用于执行一些预置操作,如配置环境、下载文件等。初始化容器必须按顺序串行执行,并且只有在所有初始化容器都成功完成后,主容器才会启动。
  2. 探针(Probes)
    • 存活探针(Liveness Probe):用于检测容器是否正在运行。如果容器未能通过存活探针的检查,Kubernetes将尝试重启该容器。
    • 就绪探针(Readiness Probe):用于检测容器是否已准备好接收流量。如果容器未能通过就绪探针的检查,Kubernetes将从服务负载均衡中移除该Pod的IP地址。
  3. 钩子(Hooks)
    • 启动后钩子(PostStart Hook):在容器创建后立即执行,但Kubernetes不保证它会在容器的主进程启动之前完成。
    • 终止前钩子(PreStop Hook):在容器终止之前执行,用于优雅地关闭容器,如保存数据、发送通知等。
四、Pod的终止过程

当Pod不再需要时,用户可以通过发送删除请求来终止Pod。Pod的终止过程包括以下几个步骤:

  1. 发送删除请求:用户通过API Server发送删除Pod的请求。
  2. 设置宽限期:API Server将Pod标记为Terminating状态,并设置一个宽限期(默认为30秒)。在这个宽限期内,Pod被视为正在终止。
  3. 执行终止前钩子:如果Pod定义了PreStop钩子,则在该钩子被成功执行之前,Pod的删除操作将被阻塞。
  4. 发送停止信号:kubelet向Pod中的容器发送停止信号(通常是SIGTERM),请求容器优雅地终止。
  5. 等待容器终止:如果在宽限期内容器成功终止,则Pod的删除过程继续。如果容器在宽限期内未能终止,kubelet将发送SIGKILL信号强制终止容器。
  6. 删除Pod对象:一旦所有容器都被终止,kubelet将请求API Server将Pod的宽限期设置为0,并从etcd中删除Pod对象。此时,Pod对于用户已不可见。

综上所述,Pod的声明周期是一个复杂的过程,涉及多个状态和阶段。通过了解Pod的声明周期,用户可以更好地管理和维护Kubernetes集群中的Pod资源。

标签:容器,Kubernetes,状态,陈述,API,终止,Pod,K8S
From: https://www.cnblogs.com/huangjiabobk/p/18355564

相关文章

  • 在K8S中,陈述⼀下创建Pod的流程?
    创建Pod是Kubernetes集群管理的基本操作之一。创建Pod的流程涉及多个组件和步骤,包括APIserver、ControllerManager、Scheduler等核心组件的交互和协作。以下是创建Pod的一般流程:发起创建Pod请求认证授权:用户通过kubectl命令向APIServer发起创建Pod的请求,APIServer对请求进......
  • 在K8S中,简单陈述⼀下K8S架构?
    K8S(Kubernetes)是一个开源的容器编排和管理平台,它提供了容器部署、扩展、管理以及服务发现等功能。K8S的架构可以大致分为控制平面(ControlPlane)和工作节点(WorkerNodes)两部分。以下是对K8S架构的详细陈述:一、控制平面(ControlPlane)控制平面是K8S集群的“大脑”,负责集群的调度、......
  • 在K8S中,K8S外部节点访问Pod有哪些方式?
    在Kubernetes(K8S)中,外部节点访问Pod的方式主要有以下几种:1.hostNetwork原理:通过将Pod配置为使用hostNetwork,Pod中的容器将直接看到并共享宿主机的网络接口。这意味着外部流量可以直接通过宿主机的IP地址和端口访问Pod内的服务。配置示例:apiVersion:v1kind:Podmeta......
  • 在K8S中,影响Pod调度策略的有哪些?
    在Kubernetes(K8S)中,影响Pod调度策略的因素众多,这些因素共同决定了Pod最终将被调度到哪个节点上运行。以下是影响Pod调度策略的主要因素:1.资源请求与限额资源请求(Requests):Pod在创建时会声明需要的最小资源量,如CPU和内存。调度器会寻找至少能满足这些资源请求的Node进行调度。资......
  • kubernetes记录一起因为磁盘容量不足造成pod无线驱逐pod状态为Evicted
    线上的pod遭到无线的驱逐fxxx-xxxx-deploy-86684b76ff-2vkdx0/1Evicted030m<none>10.10.10.10<none><none>fxxx-xxxx-deploy-86684b76ff-5j6fd0/1Evicted030m<none&......
  • k8s技术总结(一)
    在学习完docker之后,也很有必要再学习k8s的一些理论和技术。一、基础概念kubernetes(k8s)和docker在容器管理领域具有不同的侧重点和优势。当前docker主要关注单个容器的构建、运行和管理,而k8s则专注于大规模的容器编排和管理。k8s在以下几个特性中,更具有优势。特性1:自动化部署和......
  • Kubernetes-Init容器与静态Pod
    目录Init容器什么是Init容器?理解init容器Init容器与普通容器的不同之处静态Pod通过配置文件创建Init容器在Pod的生命周期中,可以执行多种操作如下图:什么是Init容器?Init容器也就是我们平时常说的初始化容器。InitContainer就是用来做初始化工作的容器,可以是一个或者多个,如果有......
  • kubernetes-POD的基本原理
    目录什么是POD?POD有以下特点:为什么使用POD作为最小单元,而不是container为什么允许一个POD里有多个容器POD中如何管理多个容器POD的yaml格式定义配置文件说明如何使用PodPOD的持久性和终止Pause我们首先在节点上运行一个pause容器然后再运行一个nginx容器,nginx将为localhost:2368......
  • CertBot搭配DNSPod
    CertBot搭配DNSPodsummary:cetbot搭配dnspod实现自动注册ssl证书和自动续期......
  • k8s命令
    k8s关键命令集群详细信息:显示Kubernetes版本:kubectlversion显示集群信息:kubectlcluster-info列出集群中的所有节点:kubectlgetnodes查看一个具体的节点详情:kubectldescribenodesrenode列出所有命名空间:kubectlgetnamespaces列出所有命名......