以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
在 Kubernetes 中,健康检查是集群通过探针(Probe)定期检查容器是否健康运行,并自动维持容器健康运行的一种机制。
健康检查可以保障容器内应用程序的稳定性和可用性,并控制应用程序何时可以提供对外访问。
工作原理
- 定义探针:用户在 Pod 中定义探针配置,包括探针类型、探测方式、探测间隔和阈值
- 触发探针:Kubernetes 会根据定义的探针配置,定期触发健康检查
- 执行探针:Kubernetes 会根据定义的探针配置,在容器中执行 EXEC 命令、建立 TCP 连接或发送 HTTP Get 请求
- 结果处理:探针执行成功则等待下一次探测,探针执行失败则根据既定规则对容器进行处理
探针类型
1、存活探针(LivenessProbe)
LivenessProbe 用于判断容器是否存活,即是否处于 Running 状态。如果 LivenessProbe 检测到容器不健康,Kubernetes 会认为容器内应用程序已经崩溃或挂起,会通过 Kubelet 对该容器进行 Kill 和重启处理。
2、就绪探针(ReadinessProbe)
ReadinessProbe 用于判断容器是否可用,即是否处于 Ready 状态。如果 Pod 中的全部容器都达到 Ready 状态,Pod 才可以接收和处理请求,否则 Kubernetes 会认为容器内应用程序启动异常,会通过 Kubelet 对该容器进行 Kill 和重启处理。
3、启动探针(StartupProbe)
某些应用程序启动非常慢,如果只配置 LivenessProbe 或 ReadinessProbe,很可能出现应用程序还没有完成启动,对应的容器就被 Kill 掉无限重启的情况。
配置有 StartupProbe 的 Pod,在应用程序没有成功启动之前,LivenessProbe 和 ReadinessProbe 均不生效,不会重启容器。
探测方式
1、EXEC 命令探测(ExecAction)
尝试在容器内执行一个 EXEC 命令,返回码为 0 表明容器健康。
2、TCP 连接探测(TCPSocketAction)
尝试与容器的指定端口建立 TCP 连接,如果能够建立表明容器健康。
3、HTTP 请求探测(HTTPGetAction)
尝试对容器的指定接口发送 HTTP Get 请求,如果响应码大于等于 200 且小于 400 表明容器健康。
资源清单(示例)
代码语言:javascript复制apiVersion: apps/v1
kind: Deployment
metadata:
nanme: demo-deployment
spec:
...
spec:
containers:
- name: demo-container
...
startupProbe / livenessProbe / readinessProbe:
exec: # EXEC 命令探测方式
command: ["cat", "/health.txt"]
或
tcpSocket: # TCP 连接探测方式
port: 80
或
httpGet: # HTTP 请求探测方式
path: /health
port: 80
initialDelaySeconds: 5 # 首次探测前等待时间
periodSeconds: 10 # 探测间隔时间
timeoutSeconds: 1 # 探测超时时间
successThreshold: 1 # 探测成功阈值
failureThreshold: 3 # 探测失败阈值