0Pricing
DevOps Bootcamp · 课时

健康检查:存活与就绪探针

配置存活探针和就绪探针,确保应用运行正常并已准备好处理流量。

健康检查:存活与就绪探针 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

保持应用程序健康

Kubernetes 如何知道您的应用程序是否真正正常工作?仅仅让容器处于运行状态还不够;它还必须健康并且就绪,才能处理流量。

Kubernetes 使用称为探针的特殊检查来监控应用程序。这些探针有助于确保用户始终获得可靠的服务。

什么是存活探针

存活探针用于检查应用程序是否仍然存活且能够响应。如果存活探针失败,Kubernetes 会认为容器不健康,并将其重新启动。

您可以把它想象成心跳监测器:如果心脏停止跳动,就需要重新启动!这有助于从死锁或应用程序崩溃中恢复。

存活探针基础

您可以使用不同的方法配置存活探针:

  • HTTP GET:向指定路径发送 HTTP 请求。
  • TCP 套接字:检查是否可以在某个端口上建立 TCP 连接。
  • 执行命令:在容器内运行命令。

对于 Web 应用程序,HTTP GET 非常常见。下面的代码片段展示了如何在 Pod 的 YAML 中定义存活探针:

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

存活探针实战

这个 Python Flask 应用程序会模拟不健康状态:在对 /healthz 收到两次请求后崩溃。Kubernetes 探针会检测到这一点,并重新启动容器。

首先,将其保存为 app.py:

from flask import Flask, Response
import os
import time

app = Flask(__name__)
request_count = 0

@app.route('/healthz')
def health_check():
    global request_count
    request_count += 1
    if request_count > 2:
        print("Liveness probe failing! Exiting...")
        os._exit(1) # Simulate a crash
    print(f"Liveness probe successful (count: {request_count})")
    return Response("OK", status=200)

@app.route('/')
def home():
    return "Hello from the Liveness Probe Demo!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

运行存活探针

现在来看看 Kubernetes 如何使用存活探针。如果您使用以下 YAML 部署,健康检查失败时,Kubernetes 将重新启动 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: liveness-demo
spec:
  containers:
  - name: liveness-container
    image: python:3.9-slim-buster
    command: ["python", "app.py"]
    ports:
    - containerPort: 8080
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 5
      failureThreshold: 1
    volumeMounts:
    - name: app-volume
      mountPath: /app
  volumes:
  - name: app-volume
    configMap:
      name: liveness-app-config

# (You'd need a ConfigMap for app.py, omitted for brevity)

部署后,前两次检查会成功,第三次检查将失败,随后 Kubernetes 会重新启动容器。

什么是就绪探针

就绪探针用于检查应用程序是否已准备好处理流量。如果就绪探针失败,Kubernetes 会停止向该 Pod 发送流量,但不会重新启动它。

这在启动期间(例如等待数据库连接)或优雅关闭期间非常重要。您可以这样理解:“商店是否已开门迎客?”

就绪探针基础

就绪探针的配置方式与存活探针类似,可以使用 HTTP GET、TCP 套接字或执行命令。关键区别在于它们产生的影响:

  • 存活探针:失败时重新启动容器。
  • 就绪探针:失败时将 Pod 从服务端点中移除(不接收流量)。

下面是一个就绪探针代码片段:

readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5

就绪探针实战

这个 Flask 应用程序模拟需要一段时间初始化的应用程序(例如连接数据库)。它将在 5 秒后才报告“就绪”。

将其保存为 ready_app.py:

from flask import Flask, Response
import time

app = Flask(__name__)
start_time = time.time()
READY_AFTER_SECONDS = 5

@app.route('/ready')
def readiness_check():
    if time.time() - start_time > READY_AFTER_SECONDS:
        print("Readiness probe successful: App is ready!")
        return Response("READY", status=200)
    else:
        print("Readiness probe failing: App not ready yet...")
        return Response("NOT READY", status=503)

@app.route('/')
def home():
    return "Hello from the Readiness Probe Demo!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

运行就绪探针

使用此 YAML 部署后,Pod 在经过 initialDelaySeconds 指定的时间,再加上 /ready 返回 200 OK 所需的时间之前,都不会接收流量。

apiVersion: v1
kind: Pod
metadata:
  name: readiness-demo
spec:
  containers:
  - name: readiness-container
    image: python:3.9-slim-buster
    command: ["python", "ready_app.py"]
    ports:
    - containerPort: 8080
    readinessProbe:
      httpGet:
        path: /ready
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 3
    volumeMounts:
    - name: app-volume
      mountPath: /app
  volumes:
  - name: app-volume
    configMap:
      name: readiness-app-config

# (You'd need a ConfigMap for ready_app.py, omitted for brevity)

这样可以确保流量只会发送到真正处于就绪状态的实例。

存活探针与就绪探针对比

正确使用这两种探针非常重要:

  • 存活探针:用于检测应用是否已崩溃或处于无法恢复的状态。如果检测失败,Kubernetes 会重启容器。
  • 就绪探针:用于检测应用是否已准备好接受和处理请求。如果检测失败,Kubernetes 会停止向 Pod 发送流量。

它们的用途不同但相互补充,有助于保持应用的健壮性。

检查您的理解

以下关于存活探针和就绪探针的说法哪些是 TRUE?

探针:要点总结

在本课中,您学习了 Kubernetes 中的存活探针和就绪探针。这些健康检查对于维持应用的可靠性和可用性至关重要:

  • 存活探针会检测不健康的容器并触发重启。
  • 就绪探针会控制 Pod 何时准备好接收网络流量。

有效使用这些探针,可以确保您的应用始终能够响应请求,并能抵御各种问题。

常见问题解答

「健康检查:存活与就绪探针」课时是免费的吗?

是的 — 「健康检查:存活与就绪探针」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「健康检查:存活与就绪探针」这节课中我会学到什么?

配置存活探针和就绪探针,确保应用运行正常并已准备好处理流量。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「健康检查:存活与就绪探针」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 kubectl logs 查看日志
  2. 使用 Prometheus 与 Grafana 处理指标
  3. 健康检查:存活与就绪探针
  4. 分布式追踪与事件
← 返回 DevOps Bootcamp