参考:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
在kubernetes中,kubelet通过liveness探针决定在何时重新启动容器。例如,容器中的应用运行时进入死锁状态,liveness探针对容器进行健康检查时检测到这种情况,那么探针检测失败,则kubelet就会重新启动容器。可以看到重新启动并没有从根本上解决死锁问题,只是忽略了问题使容器继续运行。
kubelet通过readiness类型的探针决定container是否准备就绪处理流量,当pod中的所有container全部处于ready状态时,pod被认为可以对外提供服务。readiness探针的典型应用是控制pod是否作为service的backend。以下示例中都没有为容器指定"restart policy",所以均采用默认值"Always"。
Define a liveness command
有些程序因为长时间运行而进入崩坏的状态,其中的一个解决办法是重新启动,liveness探针专门用来解决此类问题。
下例是运行一个容器的pod,容器image是k8s.gcr.io/busybox,配置文件如下:
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: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
从以上配置文件看出,pod包含一个容器。