k8s_Pod健康检查

Kubernetes 3种探针介绍

  1. LivenessProbe(存活探针)

    LivenessProbe 用于检查容器是否仍然活着。如果探针检测到容器已经失去响应,Kubernetes 将重启该容器。这通常用来修复由于内部状态错误或死锁引起的程序失效问题。

    作用:检测容器是否处于"存活"状态,如果探针失败,则容器会被重启。

    使用场景:适合长时间运行的容器,当容器出现死锁或无法继续正常工作时,通过 LivenessProbe 可以自动恢复服务。

  2. ReadinessProbe(就绪探针)

    ReadinessProbe 用于检查容器是否已经准备好处理流量。如果探针检测失败,Kubernetes 会将Pod从服务的负载均衡中移除,避免将流量发送到不健康的Pod。

    作用:判断容器是否可以处理请求,确保只有当容器准备好时,它才会接收流量。

    使用场景:用于检测容器是否能够对外提供服务。例如,应用初始化需要加载配置文件或依赖服务时,可以通过 ReadinessProbe 来避免服务在容器准备好之前接收请求。

  3. StartupProbe(启动探针)

    StartupProbe 用于检测容器的启动状态。它专门用于检测启动时间较长的容器,确保容器在完成启动之前不会被 LivenessProbe 错误地判定为不健康。如果配置了 StartupProbe,它将代替 LivenessProbe 进行探测,直到探针成功。

    作用:判断容器是否已经完成启动,避免因启动时间较长导致容器过早被 LivenessProbe 重启。

    使用场景:适用于那些启动时间较长的应用,如大型数据库或复杂的微服务,它们可能需要更多的时间来初始化。

bash 复制代码
配置参数说明
initialDelaySeconds:容器启动后第一次执行健康检查的延迟时间。
periodSeconds:两次健康检查之间的间隔时间。
timeoutSeconds:健康检查的超时时间,如果超过这个时间没有收到响应,认为检查失败。
failureThreshold:连续失败多少次后认为容器不健康并执行重启操作。
successThreshold:连续成功多少次后认为容器恢复健康。

检测容器的健康状态方式

  1. exec 方式
    exec 方式通过在容器内执行命令来检测健康状态。如果命令的退出状态码为 0,则表示健康;否则表示不健康,Kubernetes 会重启容器。
yaml 复制代码
livenessProbe:
  exec:
    command:
    - cat
    - /tmp/healthy
  initialDelaySeconds: 5
  periodSeconds: 10
 # 在这个例子中,Kubernetes每10秒执行一次 cat /tmp/healthy 命令,如果 /tmp/healthy 文件存在且命令成功执行,容器就被认为是健康的。如果文件不存在或命令失败,Kubernetes 会重启容器。
  1. httpGet 方式
    httpGet 方式通过发送HTTP请求到容器内的特定端点,根据返回的HTTP状态码来判断容器是否健康。返回2xx或3xx的状态码表示健康,其他状态码表示不健康。
yaml 复制代码
livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
    httpHeaders:
    - name: Custom-Header
      value: Awesome
  initialDelaySeconds: 3
  periodSeconds: 5
  #在这个例子中,Kubernetes每5秒向容器的/healthz端点发送一个HTTP GET请求。如果返回的状态码是2xx或3xx,容器被认为是健康的。如果返回其他状态码,容器会被重启
  1. tcpSocket 方式
    tcpSocket 方式通过尝试连接容器的TCP端口来检测健康状态。如果连接成功,则表示容器健康,否则容器将被重启。
yaml 复制代码
livenessProbe:
  tcpSocket:
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 20
# 在这个例子中,Kubernetes每20秒尝试连接容器的8080端口。如果连接成功,容器被认为是健康的;如果连接失败,容器将被重启
相关推荐
能不能别报错7 分钟前
K8s学习笔记(十六) 探针(Probe)
笔记·学习·kubernetes
能不能别报错2 小时前
K8s学习笔记(十四) DaemonSet
笔记·学习·kubernetes
火星MARK3 小时前
k8s面试题
容器·面试·kubernetes
Serverless社区4 小时前
阿里云函数计算 AgentRun 全新发布,构筑智能体时代的基础设施
阿里云·云原生·serverless·函数计算
赵渝强老师4 小时前
【赵渝强老师】Docker容器的资源管理机制
linux·docker·容器·kubernetes
能不能别报错6 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
稚辉君.MCA_P8_Java6 小时前
kafka解决了什么问题?mmap 和sendfile
java·spring boot·分布式·kafka·kubernetes
乄bluefox6 小时前
保姆级docker部署nacos集群
java·docker·容器
每天进步一点_JL6 小时前
Docker 是什么?
后端·docker·容器
一叶飘零_sweeeet7 小时前
从 0 到 1 掌控云原生部署:Java 项目的 Docker 容器化与 K8s 集群实战指南
docker·云原生·kubernetes·项目部署