以下为 Probe 示例
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: test-liveness-exec # pod 的名称。 kubectl get pod 中显示此名字
spec:
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
exec 类型的 livenessProbe,意味着当容器启动后,它会在容器中执行一句我们指定的命令(比如: cat /tmp/healthy),如果这个文件存在,这条命令的返回值就是 0,Pod 就会认为这个容器不仅已经启动,而且是健康的。
periodSeconds 表示这个命令间隔多长时间执行一次。
可以看到,30 秒后,文件被删除,livenessProbe 会检测到这个 pod 不是健康状态,k8s 会重启一个 pod。可以通过 kubectl get pod 列出的 RESTARTS 的值看出来 pod 重启了。
注: Pod 的恢复过程永远发生在当前节点上。除非 pod.spec.node 被修改,否则它不会离开这个节点。如果想让 Pod 出现在其它节点上,可以使用 deployment。