配置存活、就绪和启动探针官方文档地址
https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
许多长时间运行的应用最终会进入损坏状态,除非重新启动,否则无法被恢复。 Kubernetes 提供了存活探针来发现并处理这种情况。
定义存活命令
许多长时间运行的应用最终会进入损坏状态,除非重新启动,否则无法被恢复。 Kubernetes 提供了存活探针来发现并处理这种情况。
在本练习中,你会创建一个 Pod,其中运行一个基于 registry.k8s.io/busybox 镜像的容器。 下面是这个 Pod 的配置文件。
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
namespace: app
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: liveness
image: 192.168.21.121:5000/app/busybox@sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee
imagePullPolicy: Always #镜像拉取策略
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600 #当容器启动时执行的命令
livenessProbe: #存活探针的配置
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5 #kubelet 在执行第一次探测前应该等待 5 秒
periodSeconds: 5 #指定了 kubelet 应该每 5 秒执行一次存活探测
在这个配置文件中,可以看到 Pod 中只有一个 Container。 periodSeconds 字段指定了 kubelet 应该每 5 秒执行一次存活探测。 initialDelaySeconds 字段告诉 kubelet 在执行第一次探测前应该等待 5 秒。 kubelet 在容器内执行命令 cat /tmp/healthy 来进行探测。 如果命令执行成功并且返回值为 0,kubelet 就会认为这个容器是健康存活的。 如果这个命令返回非 0 值,kubelet 会杀死这个容器并重新启动它。
基于TCP 的存活探测和就绪探测
#在这里咱们启动一个tomcat的容器,探测tmcat服务的8080端口
[root@k8s-master1 probe]# cat tcp-liveness-readiness.yaml
apiVersion: v1
kind: Pod
metadata:
name: goproxy
namespace: app
labels:
app: goproxy
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: goproxy
image: 192.168.21.121:5000/app/tomcat@sha256:6a1163fd0c216d0baf5020fb63198d8fddfd466c8449f6a9bcc2aa7ab387a9e9
ports:
- containerPort: 8080
readinessProbe: #就绪探针配置
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
livenessProbe: #存活探针配置
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
如你所见,TCP 检测的配置和 HTTP 检测非常相似。 下面这个例子同时使用就绪和存活探针。kubelet 会在容器启动 15 秒后发送第一个就绪探针。 探针会尝试连接 goproxy 容器的 8080 端口。 如果探测成功,这个 Pod 会被标记为就绪状态,kubelet 将继续每隔 10 秒运行一次探测。
除了就绪探针,这个配置包括了一个存活探针。 kubelet 会在容器启动 15 秒后进行第一次存活探测。 与就绪探针类似,存活探针会尝试连接 goproxy 容器的 8080 端口。 如果存活探测失败,容器会被重新启动。
验证一下存活探针是否有效
咱们进容器内把tomcat进程停掉
当我们把容器内部的Tomcat进程停掉以后,存活探针探测8080端口失败以后,kubelet自己重启了容器