levels of contents

K8S健康检查

K8S健康检查

1.存活检查(livenessprobe,存活探针)

判断容器是否正在运行。如果探测失败,则 kubelet 会杀死容器,并且容器将根据 restartPolicy 来设置 Pod 状态,如果容器不提供存活探针,则默认状态为 Success。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: app
  name: app
  namespace: prod
spec:
  replicas: 2
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      terminationGracePeriodSeconds: 60
      schedulerName: trimaran
      containers:
      - image: xxxxx
        name: app
        env:
        - name: PODS_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: jvm_parameter
          value: -Xmx1024m -Dspring.profiles.active=prod -Dserver.port=8080 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs/java_heapdump.hprof -javaagent:/data/agent/skywalking-agent.jar -Dskywalking.agent.service_name=app
        ports:
        - containerPort: 8080
        resources:
          requests:
            cpu: "50m"
            memory: "256Mi"
          limits:
            cpu: "3000m"
            memory: "2048Mi"
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          timeoutSeconds: 5
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          timeoutSeconds: 5
          periodSeconds: 10
        startupProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          failureThreshold: 18
          periodSeconds: 10
        envFrom:
        - configMapRef:
            name: env-configmap
        volumeMounts:
        - mountPath: /data/agent
          name: skywalking-agent
        - mountPath: /data/logs/
          subPathExpr: $(PODS_NAME)
          name: app-log
      volumes:
      - name: skywalking-agent
        hostPath:
          # directory location on host
          path: /poit/agent
      - name: app-log
        hostPath:
          path: /var/lib/container/app-log/prod/app
          type: DirectoryOrCreate
      imagePullSecrets:
      - name: harbor-login
      nodeSelector:
        type: biz

2.就绪检查(readinessprobe,就绪探针,业务探针)

判断容器是否准备好接受请求。如果探测失败,端点控制器将从与 Pod 匹配的所有 service endpoints 中剔除删除该 Pod 的 IP 地址,这样失败的 Pod 就无法提供服务了。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success。

3.启动检查(startupprobe,启动探针,1.17 版本新增)

判断容器内的应用程序是否已启动,主要针对于不能确定具体启动时间的应用。如果匹配了 startupProbe 探测,则在 startupProbe 状态为 Success 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。如果 startupProbe 失败,kubelet 将杀死容器,容器将根据 restartPolicy 来重启。如果容器没有配置 startupProbe,则默认状态为 Success。

如果以上三种规则同时定义。在 readinessProbe 检测成功之前,Pod 的运行状态是不会变成 ready 状态的。

4.Probe 支持的三种检测方法

4.1exec

在容器内执行指定的 shell 命令,如果命令返回 0,说明容器运行状态正常;如果命名返回非 0 值,说明容器运行状态异常。

4.2tcpSocket

使用 TCP Socket 连接容器中的指定端口,如果能够建立连接,kubelet 会认为容器处于健康状态;如果无法建立连接,kubelet 认为容器处于异常状态。

4.3httpGet

使用 HTTP GET 请求指定的 URI,如果返回了成功状态码(2xx 或 3xx),kubelet 会认为容器处于健康状态;如果返回了失败的状态码(除 2xx 和 3xx 外的状态码),则 kubelet 会认为容器处于异常状态。

每次探测都将获得以下三种结果之一:
● 成功:容器通过了诊断
● 失败:容器未通过诊断
● 未知:诊断失败,因此不会采取任何行动

4.4可选参数

行为属性名称 默认值 最小值 备注
initialDelaySeconds 0 秒 0 秒 探测延迟时长,容器启动后多久开始进行第一次探测工作。
timeoutSeconds 1 秒 1 秒 探测的超时时长。
periodSeconds 10 秒 1 秒 探测频度,频率过高会对 pod 带来较大的额外开销,频率过低则无法及时反映容器产生的错误。
failureThreshold 3 1 处于成功状态时,探测连续失败几次可被认为失败。
successThreshold 1 1 处于失败状态时,探测连续成功几次,被认为成功。
posted @   看叶生叶落  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示