Liveness、Readiness 和 Startup Probes

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。个

你可能感兴趣的:(k8s,kubernetes,docker,容器)