1、K8s中默认的健康检查机制
k8s有强大的自愈能力,默认的自愈实现方式是自动重启发生故障的容器。
那么k8s是如何发现容器故障的呢?每个容器启动时都会执行一个进程,此进程由Dockerfile的CMD或ENTRYPOINT指定的。如果进程退出时返回码非零,则认为容器发生故障,K8s就会根据restartPolicy策略重启容器。
下面通过一个例子演示一下这种情况:先编写一个创建pod的文件,内容如下:
[root@master pod]# more healthcheck-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-healthcheck
labels:
test: healthcheck-test
spec:
restartPolicy: OnFailure
containers:
- name: healthcheck
image: busybox
args:
- /bin/sh
- -c
- sleep 10; exit 1 #sleep 10; exit 1 模拟容器启动 10 秒后发生故障
接着,执行这个pod,查看pod状态:
[root@master pod]# kubectl apply -f healthcheck-pod.yml
[root@master pod]# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-healthcheck 0/1 CrashLoopBackOff 5 8m
<