官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

一、重启策略

Always:  当容器终止后,总是重启,默认策略
OnFailure: 当容器异常退出(退出状态码非0)时,才重启容器
Never: 不论容器状态如何,都不重启容器

二、健康检查有三种类型

Kubernetes Pod的生命周期(Lifecycle)

2.1.livenessProbe(存活探针)

如果检查失败,将杀死容器,根据Pod的重启策略来操作。
Pod还是原来那个,容器会重新创建。每重启一次,重启计数器的值+1

2.2.readinessProbe(就绪探针)

如果检查失败,K8s会把Pod从endpoints中删除

2.3.startupProbe(启动探针)

Kubernetes v1.18+版本才支持

用于容器启动时判断容器是否启动完成,在这个探针探测成功前,即容器启动成功前,livenessProbe和readinessProbe探针都不

会起作用,防止某些启动很慢的容器在启动过程中,livenessProbe探针探测容器失败触发容器重启导致死锁。如果这个探针探测

失败(容器启动时间超过了阈值),kubelet会把这个容器kill掉,再根据restartPolicy决定是否创建容器

三、3种检查方式

httpGet: 发送HTTP请求,返回200-400范围状态码表示成功
exec: 执行Shell命令返回状态码为0表示成功
tcpSocket: 发起TCP Socket建立成功

四、示例

在这里插入图片描述

initialDelaySeconds: 第一次启动Pod后等待多久时间开始健康检查
failureThreshold:  探针执行失败几次后容器状态变为失败,默认3次
periodSeconds: 健康检查的周期

五、完整yaml文件

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      restartPolicy: Always
      containers:
      - image: nginx
        imagePullPolicy: IfNotPresent
        name: web
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          failureThreshold: 2
          periodSeconds: 5
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
        startupProbe:  # startupProbe
	      httpGet:
	        path: /healthz
	        port: liveness-port
	      failureThreshold: 30
	      periodSeconds: 10  # 容器启动30*10=300s内liveness和readiness探针不会执行,300s后startup探针还没成功,容器会被kill掉重启

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web
spec:
  ports:
  - port: 80
    protocol: TCP
  selector:
    app: web
  type: NodePort
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐