健康检查:存活与就绪探针
配置存活探针和就绪探针,确保应用运行正常并已准备好处理流量。
健康检查:存活与就绪探针 是 CoddyKit 上的免费 Kubernetes Basics 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kubernetes Basics 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kubernetes Basics 课程共包含 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 导师)并解锁 Kubernetes Basics 课程的其余内容,请升级到 CoddyKit PRO。 Kubernetes Basics 课程共包含 4 节课。
「健康检查:存活与就绪探针」这节课中我会学到什么?
配置存活探针和就绪探针,确保应用运行正常并已准备好处理流量。 你通过在浏览器中直接运行的动手代码来练习 Kubernetes Basics,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kubernetes Basics 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kubernetes Basics 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「健康检查:存活与就绪探针」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kubernetes Basics 课中编写并运行代码吗?
能。每节 Kubernetes Basics 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。