pod概念及生命周期
2026/6/30 13:24:18 网站建设 项目流程

一、Pod 基础详解

  1. Pod 定义:Pod 是 K8S 最小的创建和运行单元。

  2. Pod 内容器组成

  • 1 个根容器 / 父容器 / 基础容器(pause 容器);
  • 1 个或多个应用容器 / 业务容器。
  1. Pod 类型
  • 3.1 自主式 / 静态 Pod:不被控制器管理的 Pod,无自愈能力。一旦 Pod 异常退出,不会被重新拉起,且副本数量不会因未达期望值而创建新 Pod;
  • 3.2 控制器管理的 Pod:被控制器管理的 Pod,具备自愈能力。一旦 Pod 异常退出,会被重新拉起,且副本数量会因未达期望值而创建新 Pod。
  1. Pod 核心功能
  • 网络共享:Pod 内所有容器共享网络命名空间(共享 IP);

  • 存储共享:Pod 内所有容器可共享存储卷。

  • pause 容器作用:为 Pod 中的所有应用容器提供网络和存储资源共享;作为 PID=1 的 init 进程,管理整个 Pod 中容器组的生命周期。

  • 面试题:Pod 中多个容器之间如何通讯?答:Pod 内部容器共享网络空间,因此容器间可通过 localhost 访问其他容器。K8s 启动 Pod 时会先启动 pause 容器,该容器是实现此功能的核心。

  1. 初始化容器(init 容器)
  • 作用:阻塞或延迟应用容器启动,为应用容器提前准备运行环境和工具;
  • 启动规则:多个 init 容器串行启动,每个 init 容器必须成功启动并退出后,下一个 init 容器才能启动。
  1. 应用容器(main 容器)
  • 启动规则:所有 init 容器成功启动并退出后,应用容器才会启动;
  • 启动方式:并行启动,承载应用程序的业务逻辑。
  1. Pod 容器镜像拉取策略(imagePullPolicy):共 3 种,与containers字段同级:
  • ① IfNotPresent:优先使用本地已存在的镜像,本地无镜像时从仓库拉取;

  • ② Always:始终从仓库拉取镜像,无论本地是否已存在;

  • ③ Never:始终不从仓库拉取镜像,仅使用本地镜像。

  • 镜像拉取默认策略:

    • 镜像标签为latest或无标签时(如nginx:latest/nginx),默认策略为Always
    • 镜像标签为非latest时(如nginx:1.14),默认策略为IfNotPresent
    • 省略imagePullPolicy字段且镜像标签非latest时,该字段会自动设置为IfNotPresent
  1. Pod 容器重启策略(restartPolicy):共 3 种,与containers字段同级:
  • ① Always:容器退出时总是重启,无论返回状态码如何(默认策略);
  • ② Never:容器退出时从不重启,无论返回状态码如何;
  • ③ OnFailure:仅在容器异常退出(返回状态码非 0)时重启容器。

二、Pod 进阶特性

1. 资源限制

  • Requests(请求资源):保证容器能获得的最少资源,相当于 “最低保障”;配置路径:spec.containers.resources.requests.cpu/memory,示例值:0.5m(毫核)、512Mi;

  • Limits(限制资源):容器最多能使用的资源上限,相当于 “资源天花板”;配置路径:spec.containers.resources.limits.cpu/memory,示例值:1m(毫核)、1Gi;

  • 单位说明:

    • Mi、Gi:以 2 为底数的存储单位(1Gi=1024Mi);
    • M、G:以 10 为底数的存储单位(1G=1000M)。

2. 探针(健康检查 Probe)

Pod 容器探针用于健康检查,分为 3 类:

表格

探针类型作用探测失败后果
存活探针(livenessProbe)判断容器是否运行正常杀掉容器(非 Pod),容器按重启策略决定是否重启
就绪探针(readinessProbe)判断 Pod 是否处于 Ready 状态、是否具备接收请求的能力Pod 进入 NotReady 状态,从 Service 的 Endpoint 中剔除,Service 不再转发请求至该 Pod
启动探针(startupProbe)判断容器内应用是否启动成功探测成功前,存活探针、就绪探针均失效
三种探测方式
  • ① exec:在容器内执行指定命令,返回码为 0 则探测成功(通过command配置执行命令);
  • ② httpGet:发送 HTTP GET 请求访问容器指定端口和 URL 路径,返回状态码 ≥200 且 <400(2xx/3xx)则探测成功;
  • ③ tcpSocket:向指定端口发起 TCP 连接,三次握手成功(TCP 连接建立)则探测成功。

3. Pod 生命周期(含探针执行流程)

  1. 调度阶段:Scheduler 将 Pod 调度到目标节点;
  2. 镜像拉取:拉取容器镜像;
  3. 初始化容器:按顺序执行 initContainers(串行执行,可配置多个);
  4. 主容器后置操作:postStart 钩子在主容器启动后立即执行;
  5. 启动探测:startupProbe 检查应用是否完全启动;
  6. 存活探测:livenessProbe 定期检查容器是否存活;
  7. 就绪探测:readinessProbe 定期检查容器是否就绪;
  8. 容器终止前置操作:preStop 钩子在容器终止前执行清理操作。
核心执行流程(kubectl 指令视角)

kubectl创建 Pod → 启动 pause 基础容器 → 执行初始化容器(init container,串行执行,可多个)→ 创建业务容器 → 启动业务容器 → 就绪探针(readinessProbe)检测 → 存活探针(livenessProbe)检测 → 持续健康检测 → 终止容器(stop)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询