如何在 Kubernetes 中部署就绪探针

KubernetesKubernetesBeginner
立即练习

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

简介

Kubernetes 就绪探针(Readiness Probes)是一项强大的功能,可帮助确保你的应用程序准备好处理流量。在本教程中,我们将深入了解就绪探针的概念、如何配置它们以及在基于 Kubernetes 的应用程序中有效实施它们的最佳实践。到最后,你将扎实掌握如何利用 k8s 就绪探针来提高应用程序的可靠性和可用性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/logs("Logs") subgraph Lab Skills kubernetes/get -.-> lab-392690{{"如何在 Kubernetes 中部署就绪探针"}} kubernetes/create -.-> lab-392690{{"如何在 Kubernetes 中部署就绪探针"}} kubernetes/edit -.-> lab-392690{{"如何在 Kubernetes 中部署就绪探针"}} kubernetes/describe -.-> lab-392690{{"如何在 Kubernetes 中部署就绪探针"}} kubernetes/logs -.-> lab-392690{{"如何在 Kubernetes 中部署就绪探针"}} end

就绪探针基础

理解 Kubernetes 就绪探针

Kubernetes 就绪探针是用于监控容器健康状态和管理应用程序启动过程的关键机制。这些探针确定容器是否准备好在 Kubernetes 集群中接收流量并处理请求。

就绪探针的关键概念

就绪探针会定期进行检查,以验证容器是否完全可操作。它们帮助 Kubernetes 智能地将流量仅路由到准备好处理请求的容器。

graph TD A[容器启动] --> B{就绪探针} B -->|成功| C[接受流量] B -->|失败| D[从服务中移除]

探针配置类型

探针类型 描述 常见用例
HTTP 探针 发送 HTTP GET 请求 Web 应用程序
TCP 探针 检查 TCP 套接字连接 网络服务
命令探针 执行 shell 命令 自定义健康检查

代码示例:HTTP 就绪探针配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-application
spec:
  template:
    spec:
      containers:
        - name: web-app
          image: nginx:latest
          readinessProbe:
            httpGet:
              path: /health
              port: 80
            initialDelaySeconds: 10
            periodSeconds: 5

探针执行机制

配置就绪探针后,Kubernetes 会定期执行指定的健康检查。如果探针失败,Kubernetes 会将容器从服务端点中移除,防止流量路由到不健康的容器。

实现细节

就绪探针与存活探针的不同之处在于,它关注的是容器处理流量的能力,而不仅仅是确定容器是否正在运行。这种区别使得能够对应用程序可用性和流量管理进行更精细的控制。

探针配置指南

就绪探针配置参数

Kubernetes 就绪探针提供了多个配置参数,用于自定义健康检查行为。了解这些参数能够实现精确的容器健康状态监控。

探针配置字段

参数 描述 默认值 是否必需
initialDelaySeconds 首次探测前的延迟时间 0 可选
periodSeconds 探针执行频率 10 可选
timeoutSeconds 探针的最大响应时间 1 可选
successThreshold 连续成功的最小次数 1 可选
failureThreshold 探针失败的最大次数 3 可选

HTTP 探针配置示例

readinessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
      - name: Custom-Header
        value: Readiness-Check
  initialDelaySeconds: 15
  periodSeconds: 5
  timeoutSeconds: 3
  successThreshold: 1
  failureThreshold: 3

TCP 探针配置

readinessProbe:
  tcpSocket:
    port: 3306
  initialDelaySeconds: 30
  periodSeconds: 10

命令探针实现

readinessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - "test -f /app/ready.flag"
  initialDelaySeconds: 20
  periodSeconds: 5

探针执行流程

graph TD A[探针启动] --> B{检查类型} B -->|HTTP| C[发送 HTTP 请求] B -->|TCP| D[建立套接字连接] B -->|命令| E[执行 shell 命令] C --> F{响应评估} D --> G{连接状态} E --> H{命令退出码} F -->|成功| I[容器就绪] G -->|已连接| I H -->|零| I F -->|失败| J[容器未就绪] G -->|失败| J H -->|非零| J

配置最佳实践

就绪探针配置需要仔细考虑应用程序的启动特性、网络依赖关系和预期的初始化时间。正确的配置可确保准确的健康状态监控和流量路由。

探针最佳实践

探针配置优化策略

有效的就绪探针实现需要进行策略性配置,以确保强大的容器健康状态监控和应用程序可靠性。

性能影响考量

策略 建议 性能影响
超时持续时间 保持在 1 - 2 秒以内 低资源消耗
探针频率 间隔 5 - 10 秒 最小开销
失败阈值 3 - 5 次连续失败 平衡可靠性

高级探针配置示例

readinessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10
  timeoutSeconds: 2
  successThreshold: 1
  failureThreshold: 3

探针执行决策流程

graph TD A[探针初始化] --> B{启动阶段} B -->|初始延迟| C[等待期] C --> D[健康检查执行] D --> E{检查结果} E -->|成功| F[容器就绪] E -->|失败| G{重试次数} G -->|在阈值内| H[重试探针] G -->|超过阈值| I[从服务中移除]

诊断探针实现

readinessProbe:
  exec:
    command:
      - /bin/sh
      - -c
      - >
        database_connection=$(pg_isready -h database -p 5432) &&
        cache_status=$(redis-cli ping) &&
        [ "$database_connection" == "accepting connections" ] &&
        [ "$cache_status" == "PONG" ]
  initialDelaySeconds: 45
  periodSeconds: 15

复杂健康检查策略

Kubernetes 就绪探针通过命令、HTTP 和 TCP 探针类型支持多维度健康验证。实施全面的健康检查可确保应用程序的弹性,并防止过早地将流量路由到不稳定的容器。

关键配置参数

  • 使用 initialDelaySeconds 来适应应用程序启动时间
  • 设置适当的 periodSeconds 进行持续监控
  • 配置 failureThreshold 以防止不必要的容器重启
  • 实施精确的 timeoutSeconds 以快速检测无响应的服务

总结

在本全面指南中,我们深入探讨了 Kubernetes 就绪探针的方方面面。你已经了解了如何配置和实施有效的就绪探针,以确保你的应用程序准备好处理流量,以及优化启用了 k8s 就绪探针的应用程序的健康状态和可用性的最佳实践及故障排除技巧。有了这些知识,你现在有能力将你的 Kubernetes 部署提升到一个新的水平,并为你的用户提供可靠、高性能的应用程序。