k8s的几种探针

参考官方文档: ​​https://kubernetes.io/zh/docs/concepts/workloads/pods/pod-lifecycle/#container-probes​

存活探针-livenessProbe

指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其重启策略决定未来。如果容器不提供存活探针, 则默认状态为 Success。



定义探针存活命令

参考: ​​定义探针存活命令​

​检查机制​



exec存活检查示例

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600

# 配置存活探针
livenessProbe:
# 在容器内执行指定命令,如果命令退出时返回码为 0 则认为诊断成功。
exec:
command:
- cat
- /tmp/healthy
# 容器初始化延迟秒数(多少秒后开始检查存活)
initialDelaySeconds: 5
# 多少秒执行一次存活指令
periodSeconds: 5

httpGet存活检查示例

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server

# 配置存活探针
livenessProbe:
# 执行httpget请求
httpGet:
# 请求的路径
path: /healthz
# 请求的端口
port: 8080
# 添加自定义请求头
httpHeaders:
# 添加字段
- name: Custom-Header
# 添加字段的值
value: Awesome
# 容器初始化延迟秒数
initialDelaySeconds: 3
# 多少秒检查一次存活
periodSeconds: 3



就绪探针-readinessProbe

指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。



tcpSocket就绪探针和存活探针示例

​tcpSocket​​​的原理有点像​​telnet ip地址 端口号​​,检查端口是否开放.

apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: k8s.gcr.io/goproxy:0.1
ports:
- containerPort: 8080

# 配置就绪探针
readinessProbe:
# 使用tcp端口检查方式配置就绪探针
tcpSocket:
# 检查8080端口是否开放
port: 8080
# 容器初始化延迟秒数
initialDelaySeconds: 5
# 多少秒执行一次就绪检查
periodSeconds: 10

# 配置存活探针
livenessProbe:
# 使用tcp端口检查方式配置存活探针,类似于telnet
tcpSocket:
# 检查8080端口是否开放
port: 8080
# 容器初始化延迟秒数
initialDelaySeconds: 15
# 多少秒执行一次存活检查
periodSeconds: 20



启动探针-startupProbe

指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器依其 重启策略进行重启。 如果容器没有提供启动探测,则默认状态为 Success。