K8S篇之默认pod健康探针参数说明

常见问题:当Pod 的存活探针(livenessProbe)和就绪探针(readinessProbe)的initialDelaySeconds设置过短,导致探针在服务未完全启动时就开始检测,从而导致pod触发 "connection refused" 错误。
需要调整探针的延迟启动时间和检测周期,适配服务的实际启动时长,具体修改方案如下

一、核心修改点(针对探针配置)

1.增大initialDelaySeconds:给服务足够的启动时间(比如从 10 秒调整为 60 秒,根据服务实际启动时长调整);

2.放宽failureThreshold:允许更多次探测失败,避免频繁判定不健康;

3.(可选)调整periodSeconds:延长探测间隔,减少不必要的探测。

K8s 探针配置的最佳实践模板

以下是适用于不同场景的 K8s 探针(存活、就绪、启动)配置最佳实践模板,覆盖普通服务、慢启动服务、高可用服务等场景:

一、通用基础模板(适用于大多数常规服务)

yaml 复制代码
spec:
  containers:
  - name: your-container
    image: your-image:latest
    ports:
    - containerPort: 8080
    # 存活探针:检测服务是否存活,失败则重启容器
    livenessProbe:
      tcpSocket:  # 也可替换为httpGet(HTTP服务)
        port: 8080
      initialDelaySeconds: 30  # 服务启动后延迟30秒开始探测
      periodSeconds: 10        # 每10秒探测一次
      timeoutSeconds: 3        # 单次探测超时3秒
      failureThreshold: 5      # 连续5次失败则判定不健康
      successThreshold: 1      # 1次成功则恢复健康

    # 就绪探针:检测服务是否就绪,失败则从Service摘除
    readinessProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 20  # 比存活探针稍早启动
      periodSeconds: 5         # 就绪探测间隔更短,确保快速上线
      timeoutSeconds: 2
      failureThreshold: 3
      successThreshold: 2      # 需连续2次成功,避免偶发波动

    # 资源限制(配合探针,避免资源不足导致启动失败)
    resources:
      limits:
        cpu: "2"
        memory: "4Gi"
      requests:
        cpu: "1"
        memory: "2Gi"

二、慢启动服务模板(如大数据 / AI 服务,启动时长 > 5 分钟)

针对启动慢的服务,新增启动探针(Startup Probe) 单独管理启动阶段,避免存活 / 就绪探针误判:

yaml 复制代码
spec:
  containers:
  - name: slow-start-container
    image: ai-model:latest
    ports:
    - containerPort: 9000
    # 启动探针:仅在启动阶段生效,成功后不再探测
    startupProbe:
      httpGet:  # 若为TCP服务,替换为tcpSocket
        path: /health/startup
        port: 9000
      initialDelaySeconds: 60   # 启动后60秒开始探测
      periodSeconds: 20         # 每20秒探测一次
      timeoutSeconds: 5
      failureThreshold: 20      # 允许20次失败(总探测时长=20*20=400秒≈6.5分钟)

    # 存活探针:启动探针成功后才开始工作
    livenessProbe:
      httpGet:
        path: /health/liveness
        port: 9000
      initialDelaySeconds: 30
      periodSeconds: 15
      timeoutSeconds: 3
      failureThreshold: 3

    # 就绪探针:启动探针成功后才开始工作
    readinessProbe:
      httpGet:
        path: /health/readiness
        port: 9000
      initialDelaySeconds: 20
      periodSeconds: 5
      timeoutSeconds: 2
      failureThreshold: 2

三、高可用服务模板(如核心业务服务,需更严格的探测)

针对核心服务,通过更短的探测间隔 + 更严格的失败阈值,确保服务异常时快速响应:

yaml 复制代码
spec:
  containers:
  - name: core-service
    image: core-api:latest
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /api/health
        port: 80
        httpHeaders:  # 自定义请求头(如鉴权)
        - name: X-Health-Check
          value: "true"
      initialDelaySeconds: 15
      periodSeconds: 5          # 每5秒探测一次,快速发现异常
      timeoutSeconds: 2
      failureThreshold: 2       # 连续2次失败则重启
      successThreshold: 1

    readinessProbe:
      httpGet:
        path: /api/ready
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 3          # 就绪探测间隔更短
      timeoutSeconds: 1
      failureThreshold: 2
      successThreshold: 2

    # 配置Pod中断预算(配合探针,减少高可用风险)
  terminationGracePeriodSeconds: 30  # 优雅终止时长

四、探针类型选择建议

探针类型适用场景推荐探测方式存活探针(Liveness)检测服务是否存活(如进程崩溃)TCP/HTTP(轻量接口)就绪探针(Readiness)检测服务是否可提供服务(如依赖未就绪)HTTP(业务就绪接口)启动探针(Startup)慢启动服务(如 AI / 大数据)HTTP(启动完成接口)

探针类型 适用场景 推荐探测方式
存活探针(Liveness) 检测服务是否存活(如进程崩溃) TCP/HTTP(轻量接口)
就绪探针(Readiness) 检测服务是否可提供服务(如依赖未就绪) HTTP(业务就绪接口)
启动探针(Startup) 慢启动服务(如 AI / 大数据) HTTP(启动完成接口)

五、关键配置原则

1.initialDelaySeconds:略小于服务实际启动时长(可通过日志统计);

2.failureThreshold:慢启动服务设大(如 20),核心服务设小(如 2~3);

3.探测接口:需轻量无业务逻辑(避免探测本身影响服务性能);

4.避免单点依赖:探针接口不要依赖外部服务(如数据库),仅检测自身状态。

相关推荐
Spring_java_gg2 小时前
2026年K8s新战场:云原生智能体正在改写基础设施规则
云原生·容器·kubernetes
阿乐艾官2 小时前
【k8s网络组件及关系】
网络·arm开发·kubernetes
@土豆2 小时前
k8s集群资源优化(解决节点资源溢出导致的异常问题)
docker·kubernetes
程序员阿伦15 小时前
璋㈤鏈虹殑Java澶у巶闈㈣瘯璁帮細浠嶴pring Boot鍒癒ubernetes锛�3杞湡棰樺叏瑙f瀽锛�
spring boot·redis·kubernetes·aigc·java闈㈣瘯·寰湇鍔�·鐢靛晢绉掓潃
狼与自由16 小时前
K8S的架构
容器·架构·kubernetes
普通网友18 小时前
《K8s 滚动更新与回滚:详细教程》
docker·容器·kubernetes
朱包林18 小时前
k8s-Pod基础管理,标签管理,rc控制器及重启策略实战
linux·运维·云原生·容器·kubernetes·云计算
returnthem18 小时前
最新版 Kubernetes 集群搭建教程(kubeadm 方式)
云原生·容器·kubernetes
白花生18 小时前
k8s集群内的ollama pod持久化调用本地大模型
云原生·容器·kubernetes