Skip to content

010优化K8sYaml之探针

探针类型

请注意:启动探针通常用于需要初始化或预热阶段的应用程序。 如果应用程序不需要这样的阶段,启动探针通常不是必需的。

Liveness Probe(存活探针)用于判断Pod是否需要被重启。如果Liveness Probe探测失败,Kubernetes会重启Pod。

Readiness Probe(就绪探针)用于判断Pod是否准备好接受流量。只有当Readiness Probe探测成功后,Pod所在的Service才会将流量转发给该Pod。

Startup Probe(启动探针)用于确定容器是否已经准备好接受流量。 启动探针与存活探针不同,它主要用于确定容器是否已经准备好接受流量。如果启动探针失败,则Kubernetes会重启Pod直到探针成功为止

探测方式

1、exec(自定义健康检查):在容器中执行指定的命令,如果执行成功,退出码为 0 则探测成功。

2、httpGet:通过容器的IP地址、端口号及路径调用 HTTP Get方法,如果响应的状态码大于等于200且小于400,则表明容器健康。

3、tcpSocket:通过容器的 IP 地址和端口号执行 TCP 检 查,如果能够建立 TCP 连接,则表明容器健康。

探针探测结果有以下值

1、Success:表示通过检测。

2、Failure:表示未通过检测。

3、Unknown:表示检测没有正常进行。

健康检查常用的可选参数

1、initialDelaySeconds:探测延迟时长,容器启动后多久开始进行第一次探测工作,默认0秒。

2、periodSeconds:探测频度,频率过高会对pod带来较大的额外开销,频率过低则无法及时反映容器产生的错误,默认10秒。

3、timeoutSeconds:探测的超时时长,默认1秒。

4、failureThreshold:处于成功状态时,探测连续失败几次可被认为失败,默认3秒。

4、successThreshold:处于失败状态时,探测连续成功几次,被认为成功,默认1秒。

改进 007 节中的statefulset yaml

原yaml

yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-cutejava-tiny-service
  namespace: namespace-cutejava-tiny-service
spec:
  serviceName: statefulset-cutejava-tiny-service
  replicas: 2
  selector:
    matchLabels:
      app: statefulset-cutejava-tiny-service
  template:
    metadata:
      labels:
        app: statefulset-cutejava-tiny-service
    spec:
      containers:
        - name: pod-cutejava-tiny-service
          image: easzlab.io.local:5000/cutejava-starter:version_20240521195715
          ports:
            - containerPort: 12800

新增探针后的yaml

yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-cutejava-tiny-service
  namespace: namespace-cutejava-tiny-service
spec:
  serviceName: statefulset-cutejava-tiny-service
  replicas: 2
  selector:
    matchLabels:
      app: statefulset-cutejava-tiny-service
  template:
    metadata:
      labels:
        app: statefulset-cutejava-tiny-service
    spec:
      containers:
        - name: pod-cutejava-tiny-service
          image: easzlab.io.local:5000/cutejava-starter:version_20240521195715
          ports:
            - containerPort: 12800
          # 用于检测容器内部运行的进程是否存活。如果探针失败,Kubernetes将会重启容器
          livenessProbe:
            httpGet:
              path: /health/check
              port: 12800
            # 初始延迟时间, 容器启动后5秒开始检测存活状态
            initialDelaySeconds: 5
            # 探针将每隔10秒向容器的 /health/check 路径发起HTTP GET请求,端口为12800
            periodSeconds: 10
          # 用于确定容器是否已准备好接收请求流量。如果探针失败,Kubernetes将不会将流量传递给该容器
          readinessProbe:
            tcpSocket:
              port: 12800
            initialDelaySeconds: 5
            # 每隔10秒检测容器的12800端口是否能够进行TCP连接
            periodSeconds: 10
          # 用于在容器启动时检测应用程序是否已成功启动。如果探针失败,Kubernetes将会重启容器
          startupProbe:
            httpGet:
              path: /health/check
              port: 12800
            # 如果在容器启动后的60秒内失败了多次(failureThreshold),则Kubernetes会重启容器
            failureThreshold: 60
            # 探针将每隔10秒向容器的 /health/check 路径发起HTTP GET请求,端口为12800
            periodSeconds: 10

实操

shell
# 删除原 statefulset
kubectl delete -f statefulset.yaml
# 上传新yaml,并应用更改
kubectl apply -f statefulset.yaml
# 查看pod部署明细
kubectl describe pod statefulset-cutejava-tiny-service-0 -n namespace-cutejava-tiny-service

tanzhen.png