首页 > 其他分享 >深入理解Kubernetes Pod生命周期

深入理解Kubernetes Pod生命周期

时间:2025-01-15 15:28:01浏览次数:3  
标签:容器 生命周期 Kubernetes 状态 Pod example

目录

前言:

1. Pod 概述

2. Pod 生命周期的各个阶段

2.1 Pending(待定)

2.2 Running(运行中)

2.3 Succeeded(成功)

2.4 Failed(失败)

2.5 Unknown(未知)

3. Pod 状态的转变

4. Pod 的重启策略

5. Pod 的终止过程

6. 容器的管理与生命周期

6.1 容器的生命周期

6.2 健康检查与容器管理

6.3 容器的启动与 preStart 和 postStart 操作

6.4 容器终止与资源清理

7. Pod 的调度与资源管理

 总结:


前言:

        Kubernetes 是一个强大的容器编排平台,Pod 作为其最基本的运行单元,是部署和管理容器的核心对象。理解 Pod 的生命周期对于高效运维和优化 Kubernetes 集群至关重要。本文将深入探讨 Pod 的生命周期,包括其各个阶段、状态以及如何影响容器的管理和调度。

 pod生命周期图示

1. Pod 概述

        Pod 是 Kubernetes 中运行应用的最小单元。它封装了一个或多个容器、存储卷(Volumes)、网络等资源。Pod 内的容器共享网络命名空间和存储卷,这使得它们之间的通信非常高效。

2. Pod 生命周期的各个阶段

        Pod 的生命周期由多个阶段组成,主要分为以下几个:

2.1 Pending(待定)

        Pod 被创建后,首先进入 Pending 状态。这意味着 Pod 的容器正在等待调度或者其他资源准备。

        • 调度阶段:Kubernetes 调度器决定将 Pod 调度到哪个节点上。此时,Pod 的资源需求(CPU、内存等)必须与节点的资源能够匹配。

        • 容器拉取阶段:如果容器镜像未在节点上找到,Kubernetes 会从镜像仓库拉取镜像。

2.2 Running(运行中)

        当 Pod 被调度到某个节点并且容器开始运行时,Pod 会进入 Running 状态。这表明 Pod 的至少一个容器已经在节点上启动并在运行。

        • 容器启动:容器启动并运行后,Pod 会继续保持运行状态,直到所有容器都正常运行或遇到故障。

        • 健康检查:如果启用了健康检查(如 livenessProbe 和 readinessProbe),Kubernetes 会定期检查容器的健康状态,并根据结果采取相应的行动。

2.3 Succeeded(成功)

        如果 Pod 中的所有容器成功执行完毕并退出(例如,执行批处理任务的容器),Pod 会进入 Succeeded 状态。此时,Pod 的生命周期结束,所有容器都成功运行并退出。

2.4 Failed(失败)

        当 Pod 中的容器以失败状态退出时,Pod 会进入 Failed 状态。这可能是由于容器内发生了错误或容器崩溃等原因。

        • 重启策略:如果 Pod 设置了重启策略(如 Always、OnFailure 或 Never),Kubernetes 会根据策略决定是否重新启动容器。

        • 退出状态码:容器退出时的状态码也会影响 Pod 是否成功或失败。如果容器以非零状态码退出,Pod 会进入 Failed 状态。

2.5 Unknown(未知)

        Pod 可能进入 Unknown 状态,这通常表示 Kubernetes 无法访问 Pod 所在节点,可能是网络或节点故障导致。

3. Pod 状态的转变

        Pod 的状态是根据容器的状态和 Kubernetes 系统的健康检查来变化的。下面是 Pod 状态的常见转变流程:

        (1)、Pending → Running:当容器成功拉取镜像并启动时,Pod 从待定状态转为运行状态。

        (2)、Running → Succeeded/Failed:当容器正常退出(例如批处理任务完成)时,Pod 进入成功状态。若容器崩溃或发生错误,则 Pod 进入失败状态。

        (3)、Running → Terminating:如果用户手动删除 Pod 或者节点出现问题,Pod 进入终止状态。

        (4)、Terminating → Dead:Pod 被完全销毁后,进入 Dead 状态。

4. Pod 的重启策略

        Pod 具有灵活的重启策略,用于确定容器失败后如何响应。主要的重启策略有三种: 

        • Always:容器退出后始终重启(适用于长时间运行的服务)。

        • OnFailure:容器退出时如果发生错误(非零退出状态码),则重启。

        • Never:容器退出后不会重启。  

        重启策略示例: yaml示例

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  restartPolicy: OnFailure
  containers:
  - name: example-container
    image: example-image

5. Pod 的终止过程

        Pod 的终止过程是一个有序的过程,确保容器的安全关闭。Kubernetes 会执行以下操作:

        (1)、SIGTERM 信号:Kubernetes 首先发送 SIGTERM 信号给容器,告诉它尽量进行优雅退出。

        (2)、Grace Period:Pod 在接收到 SIGTERM 后,会等待一个宽限期(默认 30 秒),容器在此期间可以完成清理工作。

        (3)、SIGKILL 信号:如果容器在宽限期内没有退出,Kubernetes 会强制发送 SIGKILL 信号终止容器。

        (4)、资源释放:当 Pod 被终止时,Kubernetes 会释放所有与该 Pod 相关的资源,例如网络端口、存储卷等。  

        优雅终止配置示例: yaml示例

terminationGracePeriodSeconds: 60

         这意味着容器会有 60 秒的宽限期来完成清理工作。

6. 容器的管理与生命周期

        在 Kubernetes 中,容器是 Pod 的核心组成部分。每个容器都有自己的生命周期,它的生命周期紧密与 Pod 绑定。容器从创建到销毁的过程与 Pod 的状态紧密关联。

6.1 容器的生命周期

        在 Kubernetes 中,容器是 Pod 的核心组成部分。每个容器都有自己的生命周期,它的生命周期紧密与 Pod 绑定。容器从创建到销毁的过程与 Pod 的状态紧密关联。

        (1)、容器创建:当 Pod 被调度并且节点准备好时,容器会启动并进入运行状态。在启动时,容器会拉取镜像并执行初始化命令(如 ENTRYPOINT 或 CMD)。

        (2)、容器运行:容器在运行期间,Kubernetes 负责监控其健康状态。如果容器出现问题(如崩溃或无法响应),Kubernetes 会根据 Pod 的重启策略决定是否重启容器。 3. 容器终止:容器在执行完成或遇到错误后会退出。Kubernetes 会根据 Pod 的生命周期状态来决定是否重新启动容器。

6.2 健康检查与容器管理

        Kubernetes 提供了 livenessProbe 和 readinessProbe 两种健康检查方式,用于监控容器的状态。

        • Liveness Probe:用于检测容器是否仍然运行。如果容器死掉或崩溃,Kubernetes 会重新启动容器。

        • Readiness Probe:用于检测容器是否已经准备好接受请求。如果容器尚未准备好,Kubernetes 会停止流量发送到该容器。  

        健康检查配置示例: yaml示例

containers:
  - name: example-container
    image: example-image
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 3
      periodSeconds: 5
    readinessProbe:
      httpGet:
        path: /readiness
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10

6.3 容器的启动与 preStart 和 postStart 操作

        除了容器的生命周期管理,Kubernetes 还提供了容器的 preStart 和 postStart 操作,允许在容器启动前或后执行某些初始化或配置任务。

        • preStart:允许在容器启动之前执行初始化操作,例如清理缓存、检查依赖资源等。

        • postStart:允许在容器启动后执行额外的操作,例如发送通知、配置外部服务连接等。

        preStart 和 postStart 操作分别可以通过 Lifecycle 配置来定义: yaml示例

containers:
  - name: example-container
    image: example-image
    lifecycle:
      preStart:
        exec:
          command: ["sh", "-c", "echo Initializing environment..."]
      postStart:
        exec:
          command: ["sh", "-c", "echo Container started successfully!"]

        在这个示例中,preStart 负责初始化环境,postStart 用于在容器启动后执行额外的操作。

6.4 容器终止与资源清理

        容器的终止并非立刻释放所有资源。Kubernetes 会确保容器在终止前进行适当的资源清理,确保不会发生资源泄露。例如,如果容器使用了临时存储,Kubernetes 会确保它们在容器退出后被清理。 Kubernetes 还提供了 preStop 钩子,允许在容器终止之前执行特定操作(如发送请求关闭信号或清理资源)。 yaml示例:

containers:
  - name: example-container
    image: example-image
    lifecycle:
      preStop:
        exec:
          command: ["sh", "-c", "echo Terminating..."]

7. Pod 的调度与资源管理

        Pod 的调度和资源管理对于 Pod 生命周期的管理至关重要。Kubernetes 调度器通过考虑节点的资源、负载、优先级等因素,决定将 Pod 安排到哪个节点。

        资源请求与限制 在 Pod 的定义中,用户可以指定容器的资源请求和限制:

        • 请求(Request):容器启动时所需的资源量,Kubernetes 会根据这些请求来调度 Pod 到合适的节点。

        • 限制(Limit):容器最大能使用的资源量,超过该值,Kubernetes 会采取措施(如限制 CPU 或内存使用)。

        示例: yaml

containers:
  - name: example-container
    image: example-image
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

 总结:

        Pod 生命周期是 Kubernetes 中一个复杂而精细的过程。对于有效管理和维护Kubernetes集群非常重要。

标签:容器,生命周期,Kubernetes,状态,Pod,example
From: https://blog.csdn.net/pengdott/article/details/145152736

相关文章

  • vue2生命周期,vue2各个方法介绍
    beforeCreate:在这里加loading(页面加载的时候我想要做的事情)created:在这里结束loading,还可以做一些初始数据的获取beforeMount:载入前(已经完成了data和el数据初始化),但是页面中的内容还是vue的占位符,data中的数据是没有被挂载到dom节点中的;可以在......
  • Kubernetes 知识梳理及集群搭建
    Kubernetes介绍应用部署方式演变在部署应用程序的方式上,主要经历了三个时代:传统部署:互联网早期,会直接将应用程序部署在物理机上优点:简单,不需要其它技术的参与缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响虚拟化部署:可以在一台......
  • k8s~控制deamonset中pod的数量
    DaemonSet是Kubernetes中的一种控制器,用于确保集群中的每个节点(或特定标签选择器匹配的节点)运行一个Pod的副本。DaemonSet通常用于运行集群守护进程,如日志收集、监控代理、存储卷插件等。以下是如何控制DaemonSet中Pod数量的方法:使用节点选择器(NodeSelector)通过在D......
  • 小众降维!POD-Transformer多变量回归预测(Matlab)
    目录效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现POD-Transformer多变量回归预测,本征正交分解数据降维融合Transformer多变量回归预测,使用SVD进行POD分解(本征正交分解);2.运行环境Matlab2023b;3.输入多个特征,输出单个变量,多变量回归预测......
  • K8S之Pod进阶
    文章目录容器容器的状态pod实例配置镜像仓库拉镜像默认值特别说明容器重启策略Init容器Init容器优势Init容器实例特殊说明临时容器hook钩子函数容器探针何时该使用启动探针Pause(Infra)容器背景实现Pause容器的作用PodPreset如何工作容器容器的状态容器的状......
  • kubernetes上安装kubesphere
    准备工作需要配置三台虚拟机关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld临时关闭selinuxsetenforce0永久关闭selinuxvi/etc/selinux/config安装dockerrpm-qa|grepdockeryumremovedocker*-yrpm-qa|grepdockeryuminst......
  • 板栗看板:让供应商全生命周期管理变得如此简单
    供应商全生命周期管理(SupplierLifecycleManagement,SLM)是一个结构化、全流程的供应商闭环管理过程,旨在优化供应商关系,提高供应链的整体效率和可持续性。以下是对供应商全生命周期管理的详细阐述:一、定义供应商全生命周期管理是指企业对供应商在整个合作周期内的全面管理和维护,......
  • 使用 Podman Desktop 在 Windows 11 WSL2 环境中启动宿主机的 GPU 进行深度学习
    使用PodmanDesktop在Windows11WSL2环境中启动宿主机的GPU进行深度学习概述本文将指导您如何利用PodmanDesktop安装时提供的WSL2环境,来启动宿主机的GPU进行深度学习任务。前提条件确保您的Windows11已经启用了WSL2和虚拟化功能,并且安装了最新版本的NVIDI......
  • 请说说在Angular中组件和指令的生命周期挂钩是什么?
    在Angular中,组件和指令的生命周期挂钩(LifecycleHooks)是特定的事件,允许开发者在组件或指令生命周期的特定阶段执行自定义的代码逻辑。这些挂钩提供了一种机制,让开发者能够更好地控制和管理组件或指令的创建、更新和销毁过程。组件的生命周期挂钩包括:ngOnChanges:当Angular设置......
  • 破解 Kubernetes 身份验证 (AuthN)模型
                       大家读完觉得有帮助和意义记得关注和点赞!!!这篇文章深入探讨了Kubernetes身份验证(AuthN)模型。具体说来我们将从分析Kubernetes中AuthN的技术需求开始,然后设计一个对于它(假设它还没有),最终解决方案有一个端......