liveness:
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 -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
```
其中 initialDelaySeconds: 5表示启动时等待五秒钟在开始第一次检测,periodSeconds: 5每过五秒钟进行一次检测
在容器生命的前 30 秒内,有一个/tmp/healthy文件。因此,在前 30 秒内,该命令会cat /tmp/healthy返回一个成功代码。30 秒后,cat /tmp/healthy返回失败代码
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
这里定义了一个http活跃度检测,如果处理程序返回失败代码,kubelet 将杀死容器并重新启动它。
任何大于或等于 200 且小于 400 的代码都表示成功。任何其他代码都表示失败
Readiness:
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: k8s.gcr.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
TCP 检查的配置与 HTTP 检查非常相似。此示例同时使用就绪和活跃度探测。
kubelet 将在容器启动 5 秒后发送第一个就绪探测。这将尝试连接到goproxy端口 8080 上
的容器。如果探测成功,Pod 将被标记为就绪。kubelet 将继续每 10 秒运行一次此检查
Startup Probes:
startupProbe:
httpGet:
path: /healthz
port: liveness-port
failureThreshold: 30
periodSeconds: 10
应用程序将有最多 5 分钟 (30 * 10 = 300s) 来完成其启动。一旦启动探测成功一次,活跃
度探测就会接管以提供对容器死锁的快速响应。如果启动探测从未成功,则容器在 300 秒
后被杀死并受制于 pod 的restartPolicy, 如果配置了这样的探针,它将禁用活动性和就绪性检查,直到成功,确保这些探针不会干扰应用程序启动
(主要用在启动时间过长的情况下)
字段解释:
initialDelaySeconds:容器启动后在启动活动或就绪探测之前的秒数。默认为 0 秒。最小值为 0。
periodSeconds:执行探测的频率(以秒为单位)。默认为 10 秒。最小值为 1。
timeoutSeconds: 探测超时的秒数。默认为 1 秒。最小值为 1。
successThreshold:探测失败后被视为成功的最小连续成功次数。默认为 1。对于 liveness 和 startup Probes,必须为 1。最小值为 1。
failureThreshold:当一次探测失败时,Kubernetes 会尝试failureThreshold多次,然后放弃。在 liveness probe 的情况下放弃意味着重新启动容器。在就绪探测的情况下,Pod 将被标记为未就绪。默认为 3。个