如何配置 Kubernetes 健康检查

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Kubernetes 提供了强大的健康检查机制,以确保在 Kubernetes 集群中运行的应用程序的可靠性和可用性。本教程将介绍 Kubernetes 健康检查的基础知识,包括配置存活探针和就绪探针,以及排查常见问题,以确保你的应用程序顺利运行。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/ClusterManagementCommandsGroup(["Cluster Management Commands"]) kubernetes/ClusterManagementCommandsGroup -.-> kubernetes/top("Top") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("Exec") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/port_forward("Port-Forward") subgraph Lab Skills kubernetes/top -.-> lab-419130{{"如何配置 Kubernetes 健康检查"}} kubernetes/describe -.-> lab-419130{{"如何配置 Kubernetes 健康检查"}} kubernetes/exec -.-> lab-419130{{"如何配置 Kubernetes 健康检查"}} kubernetes/logs -.-> lab-419130{{"如何配置 Kubernetes 健康检查"}} kubernetes/port_forward -.-> lab-419130{{"如何配置 Kubernetes 健康检查"}} end

Kubernetes 健康检查基础

Kubernetes 提供了强大的健康检查机制,以确保在 Kubernetes 集群中运行的应用程序的可靠性和可用性。健康检查(也称为探针)对于 Kubernetes 判断容器的健康状态和就绪状态至关重要。Kubernetes 支持三种类型的探针:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。

存活探针

存活探针用于确定容器是否正在运行且健康。如果存活探针失败,Kubernetes 将自动重启容器。这对于可能陷入不健康状态并需要重启以恢复的应用程序很有用。

以下是 Kubernetes Pod 中存活探针配置的示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10

在此示例中,存活探针每 10 秒检查一次端口 8080 上的 /healthz 端点。initialDelaySeconds 参数告诉 Kubernetes 在开始第一次存活探针检查之前等待 5 秒。

就绪探针

就绪探针用于确定容器是否准备好接收流量。如果就绪探针失败,在容器通过探针之前,Kubernetes 不会向其发送任何流量。

以下是 Kubernetes Pod 中就绪探针配置的示例:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      readinessProbe:
        tcpSocket:
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10

在此示例中,就绪探针通过每 10 秒尝试在端口 8080 上建立 TCP 连接来检查容器的可用性。initialDelaySeconds 参数告诉 Kubernetes 在开始第一次就绪探针检查之前等待 5 秒。

配置 Kubernetes 探针

Kubernetes 支持三种类型的探针:HTTP 探针、TCP 探针和命令探针。每种类型的探针都有其自己的一组配置参数,可用于自定义健康检查行为。

HTTP 探针

HTTP 探针通过向指定端点发送 HTTP 请求来检查容器的健康状态。以下是一个示例配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      readinessProbe:
        httpGet:
          path: /ready
          port: 8080
          httpHeaders:
            - name: Custom-Header
              value: Awesome
        initialDelaySeconds: 5
        periodSeconds: 10

在此示例中,就绪探针每 10 秒检查一次端口 8080 上的 /ready 端点。httpHeaders 字段允许你在 HTTP 请求中设置自定义标头。

TCP 探针

TCP 探针通过尝试建立到指定端口的 TCP 连接来检查容器的健康状态。以下是一个示例配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      livenessProbe:
        tcpSocket:
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10

在此示例中,存活探针每 10 秒通过尝试在端口 8080 上建立 TCP 连接来检查容器的可用性。

命令探针

命令探针通过在容器内执行命令来检查容器的健康状态。如果容器健康,该命令应返回成功退出代码(0)。以下是一个示例配置:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
    - name: my-container
      image: my-app:v1
      startupProbe:
        exec:
          command:
            - /app/startup-check.sh
        initialDelaySeconds: 5
        periodSeconds: 10

在此示例中,启动探针每 10 秒通过执行 /app/startup-check.sh 脚本来检查容器的健康状态。initialDelaySeconds 参数告诉 Kubernetes 在开始第一次启动探针检查之前等待 5 秒。

排查 Kubernetes 健康检查问题

虽然 Kubernetes 健康检查提供了强大的机制来确保应用程序的可靠性,但在某些情况下,你可能需要排查与探针失败相关的问题。在本节中,我们将探讨排查 Kubernetes 健康检查问题的常见问题及策略。

探针失败场景

探针失败可能会导致各种问题,例如容器重启、服务负载均衡问题以及应用程序停机。一些常见场景包括:

  1. 探针超时:如果探针完成时间过长,可能会导致超时,并且该探针将被视为失败。
  2. 探针 HTTP 状态码:如果探针返回的 HTTP 状态码不在 2xx 范围内,它将被视为失败。
  3. 探针命令退出代码:如果在容器内执行的探针命令返回非零退出代码,它将被视为失败。
  4. 探针 TCP 连接失败:如果探针无法建立到指定端口的 TCP 连接,它将被视为失败。

排查策略

要排查 Kubernetes 健康检查问题,你可以遵循以下步骤:

  1. 检查探针配置:确保探针配置(包括端点、端口和参数)正确无误,并与应用程序的健康检查要求相匹配。
  2. 检查 Pod 日志:检查受影响 Pod 的日志,以识别可能导致探针失败的任何错误或问题。
  3. 验证容器就绪状态:通过检查容器状态和健康检查命令的输出来确保容器实际上已准备好接收流量。
  4. 在本地测试探针:尝试运行探针命令或直接从主机访问健康检查端点,以识别应用程序或探针本身的任何问题。
  5. 调整探针参数:如果探针由于超时或其他问题而失败,请尝试调整 initialDelaySecondsperiodSecondstimeoutSeconds 和其他探针参数,以找到适合你应用程序的正确平衡点。

通过遵循这些排查步骤,你可以快速识别并解决与 Kubernetes 健康检查相关的问题,确保应用程序的可靠性和可用性。

总结

在本教程中,你了解了 Kubernetes 的三种健康检查类型:存活探针(Liveness Probe)、就绪探针(Readiness Probe)和启动探针(Startup Probe)。你探索了如何配置这些探针来监控容器的健康状态和就绪状态,以及如何排查 Kubernetes 健康检查可能出现的常见问题。通过实施有效的健康检查,你可以确保在 Kubernetes 集群中运行的应用程序的可靠性和可用性。