Kubernetes那点事儿——健康检查
健康检查在K8s中以探针的形式来实现,包括3个探针,存活(Liveness)、就绪(Readiness)和启动(Startup)探针
·
前言
一、重启策略
- Always:当容器终止退出后,总是重启容器,默认策略。
- OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
- Never:当容器终止退出,从不重启容器。
二、健康检查
健康检查在K8s中以探针的形式来实现,包括3个探针,存活(Liveness)、就绪(Readiness)和启动(Startup)探针。
- livenessProbe(存活检查):如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
- readinessProbe(就绪检查):如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
- startup(启动探针):等待
failureThreshold * periodSeconds
时间,存活探测任务就会接管对容器的探测,对容器死锁作出快速响应。 如果启动探测一直没有成功,容器会在 300 秒后被杀死,并且根据restartPolicy
来执行进一步处置。
存活探针livenessProbe实例
[root@k8s-master yaml]# cat liveness.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
就绪检查与存活检查配置方式一致。唯一区别就是要使用 readinessProbe
字段,而不是 livenessProbe
字段。
三、健康监控方式
支持以下三种检查方法:
- httpGet:发送HTTP请求,返回200-400范围状态码为成功。
- tcpSocket:发起TCP Socket建立成功。
- exec:执行Shell命令返回状态码是0为成功。
探针配置:
- initialDelaySeconds:容器启动后要等待多少秒后才启动启动、存活和就绪探针, 默认是 0 秒,最小值是 0。类似启动探针的
failureThreshold * periodSeconds
。 - periodSeconds:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。
- timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。
- successThreshold:探针在失败后,被视为成功的最小连续成功数。默认值是 1。 存活和启动探测的这个值必须是 1。最小值是 1。
- failureThreshold:当探测失败时,Kubernetes 的重试次数。 对存活探测而言,放弃就意味着重新启动容器。 对就绪探测而言,放弃意味着 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。
[root@k8s-master yaml]# cat healthcheck.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
restartPolicy: Always
containers:
- image: java-demo
imagePullPolicy: IfNotPresent
name: java-demo
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 30 # kubelet 在执行第一次探测前应该等待 30 秒
periodSeconds: 20 # kubelet 应该每 20 秒执行一次存活探测
timeoutSeconds: 2 # 探测超时后等待 2 秒钟继续探测
failureThreshold: 2 # 当探测失败时,Kubernetes 的重试次数。 对存活探测而言,放弃就意味着重新启动容器。 对就绪探测而言,放弃意味着 Pod 会被打上未就绪的标签。
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 30
periodSeconds: 20
更多推荐
已为社区贡献11条内容
所有评论(0)