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端口。如果连接成功,容器被认为是健康的;如果连接失败,容器将被重启
相关推荐
万里侯4 分钟前
技术人的人际关系:建立良好的职业网络
微服务·容器·k8s
AI云原生6 分钟前
容器网络模型与服务发现:从踩坑到精通,Kubernetes 网络问题排查全指南
服务器·网络·云原生·容器·kubernetes·云计算·服务发现
石小千7 分钟前
Docker-排查占用磁盘空间大问题
运维·docker·容器
仙柒4159 分钟前
Docker 网络
运维·docker·容器
木雷坞15 分钟前
vLLM 服务启动慢排查:NAS 模型目录、Docker 镜像和 GPU Runtime
docker·容器·vllm
古怪今人38 分钟前
WSL和Hyper-V Ubuntu安装docker Docker安装Reids、MySQL、PostgreSQL和RabbitMQ
运维·docker·容器
ん贤44 分钟前
Kubernetes 核心资源对象与应用编排基础
云原生·容器·kubernetes
LZZ and MYY1 小时前
将Virtual PLCnext 部署在PVE的LXC容器
云原生·容器·kubernetes
姚不倒11 小时前
Go语言进阶:接口、错误处理与并发编程(goroutine/channel/context)
云原生·golang
仙柒41514 小时前
Docker存储原理
运维·docker·容器