在 Kubernetes 中,我们可以使用 livenessProbe 和 readinessProbe 来检查容器的状态。这两个探针都是 Kubernetes 中的重要概念,它们可以确保容器正常运行并且健康。
livenessProbe
livenessProbe 用于检查容器是否仍在运行。如果容器崩溃或死锁,livenessProbe 将会发现并重启容器。使用 livenessProbe 可以避免容器长时间运行但实际上已经停止工作的情况。
检查容器是否存活
我们可以使用 livenessProbe 的 httpGet 检查容器是否存活。通过向容器的 HTTP 端点发送 GET 请求,如果响应码为 200,则认为容器存活,否则认为容器崩溃或死锁,需要重启容器。
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: liveness-http spec: containers: - name: liveness image: k8s.gcr.io/liveness livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: X-Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
上述示例中,我们定义了一个 Pod,其中包含一个名为 liveness 的容器。这个容器的镜像是 k8s.gcr.io/liveness,我们使用了 httpGet 方式进行容器存活检测。在检测时会向容器的 /healthz 端点发送 GET 请求,同时还会添加一个名为 X-Custom-Header 的自定义 HTTP 头。initialDelaySeconds 和 periodSeconds 分别指定了容器启动后多少秒开始检测和每隔多少秒进行一次检测。
检查容器是否存活(命令方式)
除了 httpGet 方式,我们也可以使用 exec 方式执行命令来检查容器是否存活。在容器中运行的命令需要返回 0,否则认为容器崩溃或死锁,需要重启容器。
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: liveness-exec spec: containers: - name: liveness image: k8s.gcr.io/liveness livenessProbe: exec: command: - cat - /tmp/health initialDelaySeconds: 3 periodSeconds: 3
上述示例中,我们使用了 exec 方式进行容器存活检测。在检测时会执行 cat /tmp/health 命令,如果命令返回 0,则认为容器存活,否则认为容器崩溃或死锁,需要重启容器。
readinessProbe
readinessProbe 用于检查容器是否准备好接收流量。如果容器没有准备好接收流量,Kubernetes 将不会将流量路由到该容器。使用 readinessProbe 可以确保应用程序在接收流量之前已经准备好。
检查容器是否准备好接收流量
我们可以使用 readinessProbe 的 httpGet 检查容器是否准备好接收流量。通过向容器的 HTTP 端点发送 GET 请求,如果响应码为 200,则认为容器准备好接收流量,否则认为容器没有准备好接收流量。
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: readiness-http spec: containers: - name: readiness image: k8s.gcr.io/readiness readinessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: X-Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3
上述示例中,我们定义了一个 Pod,其中包含一个名为 readiness 的容器。这个容器的镜像是 k8s.gcr.io/readiness,我们使用了 httpGet 方式进行容器准备就绪检测。在检测时会向容器的 /healthz 端点发送 GET 请求,同时还会添加一个名为 X-Custom-Header 的自定义 HTTP 头。initialDelaySeconds 和 periodSeconds 分别指定了容器启动后多少秒开始检测和每隔多少秒进行一次检测。
检查容器是否准备好接收流量(命令方式)
除了 httpGet 方式,我们也可以使用 exec 方式执行命令来检查容器是否准备好接收流量。在容器中运行的命令需要返回 0,否则认为容器没有准备好接收流量。
// javascriptcn.com 代码示例 apiVersion: v1 kind: Pod metadata: name: readiness-exec spec: containers: - name: readiness image: k8s.gcr.io/readiness readinessProbe: exec: command: - cat - /tmp/ready initialDelaySeconds: 3 periodSeconds: 3
上述示例中,我们使用了 exec 方式进行容器准备就绪检测。在检测时会执行 cat /tmp/ready 命令,如果命令返回 0,则认为容器准备好接收流量,否则认为容器没有准备好接收流量。
总结
在 Kubernetes 中,使用 livenessProbe 和 readinessProbe 可以确保容器正常运行并且健康。livenessProbe 用于检查容器是否仍在运行,如果容器崩溃或死锁,livenessProbe 将会发现并重启容器。readinessProbe 用于检查容器是否准备好接收流量,如果容器没有准备好接收流量,Kubernetes 将不会将流量路由到该容器。我们可以使用 httpGet 方式或者 exec 方式来检查容器的状态。在定义 Pod 或 Deployment 时,我们可以使用 livenessProbe 和 readinessProbe 来设置容器的探针。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6571a35cd2f5e1655da542ad