Liveness Probe & Readiness Probe & Startup Probe

在 Kubernetes 中,存活探针(Liveness Probe)、就绪探针(Readiness Probe)、启动探针(Startup Probe) 是 Pod 健康检查的重要机制,它们帮助集群判断容器是否健康、是否准备好对外提供服务,以及是否成功启动。


🧩 三类探针的作用

  • 存活探针
    👉 检查容器是否仍然健康运行。如果失败,Kubelet 会重启容器。
  • 就绪探针
    👉 检查容器是否已经准备好接收流量。如果失败,Pod 会被移出 Service 的 Endpoints。
  • 启动探针
    👉 检查容器是否成功完成启动过程。如果失败,Pod 会被杀掉并重启。

📌 类比理解

  • 存活探针 = 心跳监测:容器还活着吗?如果没心跳了,就重启。
  • 就绪探针 = 上岗检查:容器准备好接客了吗?没准备好就暂时不接流量。
  • 启动探针 = 入职培训:容器是否完成初始化?没完成就重新来过。

📝 使用示例

apiVersion: v1
kind: Pod
metadata:
  name: probe-demo
spec:
  containers:
  - name: demo
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
    readinessProbe:
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
    startupProbe:
      httpGet:
        path: /startup
        port: 80
      failureThreshold: 30
      periodSeconds: 10

👉 这个 Pod 会通过 HTTP 请求检查容器的存活、就绪和启动状态。


⚠️ 注意事项

  • 探针类型:支持 httpGettcpSocketexec 三种方式。
  • 合理配置延迟:避免容器还没启动就被误判失败。
  • 避免过度检查:探针过于频繁可能增加负担。
  • Startup Probe 与 Liveness Probe 配合:Startup Probe 通过后才会启用 Liveness Probe。

💡 总结

  • 存活探针:判断容器是否健康运行。
  • 就绪探针:判断容器是否准备好接收流量。
  • 启动探针:判断容器是否完成启动过程。
  • 三者结合,保证 Pod 在集群中的稳定性和可靠性。

🧩 Liveness Probe

存活探针(Liveness Probe)是 Kubernetes 中用于检测容器是否仍然健康运行的机制。如果探针检测失败,Kubelet 会自动重启容器,从而保证服务的持续可用性。


🧩 存活探针的作用

  • 健康检查:确保容器没有进入死锁或不可恢复的状态。
  • 自动修复:探针失败时,Kubelet 会重启容器。
  • 提高稳定性:避免因单个容器异常导致整个应用不可用。

📌 类比理解

  • 存活探针 = 心跳监测
    • 容器就像一个人,心跳代表它还活着。
    • 如果心跳停止(探针失败),医生(Kubelet)会立即进行急救(重启容器)。

⚙️ 存活探针的类型

  • HTTP 检查:访问一个 HTTP 路径,返回 200–399 表示成功。
  • TCP 检查:尝试建立 TCP 连接,成功表示容器存活。
  • 命令检查(exec):在容器内执行命令,返回码为 0 表示成功。

📝 使用示例

apiVersion: v1
kind: Pod
metadata:
  name: liveness-demo
spec:
  containers:
  - name: demo
    image: nginx
    livenessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5   # 容器启动后等待 5 秒再开始检查
      periodSeconds: 10        # 每 10 秒检查一次
      timeoutSeconds: 2        # 超过 2 秒无响应判定失败
      failureThreshold: 3      # 连续失败 3 次才判定容器不健康

👉 这个 Pod 会每 10 秒访问一次 /healthz,如果连续 3 次失败,容器会被重启。


⚠️ 注意事项

  • 避免误判:合理设置 initialDelaySeconds,避免容器还没启动就被判定失败。
  • 探针频率:不要过于频繁,否则会增加负担。
  • 与启动探针配合:如果容器启动较慢,可以先用 启动探针,等启动完成后再启用存活探针。

💡 总结

  • 存活探针是 Kubernetes 的 心跳检测机制
  • 它确保容器在运行过程中保持健康,否则会被自动重启。
  • 支持 HTTP、TCP、exec 三种检查方式。

🧩 Readiness Probe

就绪探针(Readiness Probe)是 Kubernetes 中用于检测容器是否已经准备好接收流量的机制。它不会重启容器,而是决定 Pod 是否加入到 Service 的 Endpoints,从而影响流量调度。


🧩 就绪探针的作用

  • 流量控制:只有探针成功的 Pod 才会被加入 Service,接收请求。
  • 避免错误响应:防止容器在初始化或暂时不可用时接收流量。
  • 滚动更新保障:在应用更新时,只有新 Pod 就绪后才会替换旧 Pod。

📌 类比理解

  • 就绪探针 = 上岗检查
    • 容器就像员工,只有完成准备工作(加载配置、初始化数据库连接),才能正式上岗。
    • 如果没准备好,就暂时不分配任务(不接流量)。

⚙️ 就绪探针的类型

  • HTTP 检查:访问一个 HTTP 路径,返回 200–399 表示成功。
  • TCP 检查:尝试建立 TCP 连接,成功表示容器就绪。
  • 命令检查(exec):在容器内执行命令,返回码为 0 表示成功。

📝 使用示例

apiVersion: v1
kind: Pod
metadata:
  name: readiness-demo
spec:
  containers:
  - name: demo
    image: nginx
    readinessProbe:
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5   # 容器启动后等待 5 秒再开始检查
      periodSeconds: 10        # 每 10 秒检查一次
      timeoutSeconds: 2        # 超过 2 秒无响应判定失败
      failureThreshold: 3      # 连续失败 3 次判定未就绪
      successThreshold: 1      # 成功一次即可判定就绪

👉 这个 Pod 会每 10 秒访问一次 /ready,只有探针成功时才会被加入 Service 的 Endpoints。


⚠️ 注意事项

  • 不会重启容器:就绪探针失败只会让 Pod 暂时不接流量,不会触发重启。
  • 与存活探针配合:存活探针保证容器健康,就绪探针保证容器能接流量。
  • 合理延迟:避免容器还在初始化时就被判定未就绪。

💡 总结

  • 就绪探针是 Kubernetes 的 上岗检查机制
  • 它决定 Pod 是否能接收流量,而不是是否需要重启。
  • 常用于应用初始化、滚动更新和流量控制场景。

🧩 Startup Probe

启动探针(Startup Probe)是 Kubernetes 中用于检测容器是否成功完成启动过程的机制。它的主要作用是避免容器在启动阶段被过早判定为失败,从而保证慢启动应用的稳定性。


🧩 启动探针的作用

  • 启动阶段保护:在容器启动完成前,暂时不启用存活探针。
  • 避免误判:防止慢启动应用在初始化时被误判为“存活失败”。
  • 与存活探针配合:只有启动探针通过后,存活探针才会开始工作。

📌 类比理解

  • 启动探针 = 入职培训
    • 容器就像新员工,必须先完成培训(初始化过程)。
    • 培训没完成前,不进行考核(不启用存活探针)。
    • 培训完成后,才开始正常的工作考核(存活探针)。

⚙️ 启动探针的类型

与存活探针、就绪探针一样,支持三种检查方式:

  • HTTP 检查:访问一个 HTTP 路径,返回 200–399 表示成功。
  • TCP 检查:尝试建立 TCP 连接,成功表示容器启动完成。
  • 命令检查(exec):在容器内执行命令,返回码为 0 表示成功。

📝 使用示例

apiVersion: v1
kind: Pod
metadata:
  name: startup-demo
spec:
  containers:
  - name: demo
    image: myapp:latest
    startupProbe:
      httpGet:
        path: /startup
        port: 8080
      failureThreshold: 30   # 允许最多失败 30 次
      periodSeconds: 10      # 每 10 秒检查一次
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      periodSeconds: 10

👉 在这个 Pod 中,只有当 /startup 检查成功后,存活探针才会开始工作。


⚠️ 注意事项

  • 慢启动应用必备:适合数据库、大型框架等启动时间较长的应用。
  • 合理设置 failureThreshold:允许足够的失败次数,避免过早重启。
  • 与存活探针配合:Startup Probe 通过后才启用 Liveness Probe。

💡 总结

  • 启动探针是 Kubernetes 的 入职培训机制
  • 它保证容器在启动阶段不会被过早判定失败。
  • 适合慢启动应用,确保稳定性。
posted @ 2026-05-29 15:38  Donaver  阅读(29)  评论(0)    收藏  举报