k8s 探测方法

k8s提供三种探测方式:

启动探测: startup probe
存活探测: liveness probe 探测pod的状态
就绪探测: readiness probe 探测容器里应用的状态
存活探测(liveness probe)和就绪探测(readiness )是并行探测的,不分前后顺序

目前启动探针(start probe)、存活探针(liveness probe)、就绪探针(readiness probe)都支持以下三种探针策略:
  1. exec: 在容器中执行指定的命令,如果执行成功,退出码为0则探测成功
    2.TCPSocket:通过容器的IP地址和端口号执行TCP检查,如果能建立TCP链接,则表明容器健康
    3.HTTPGet: 通过容器的IP地址、端口号及路径调用HTTP Get方法,如果响应的状态码大于等于200姐小于400,则认为容器健康
探针探测结果有以下值:

1.success: 表示通过检测
2.failure: 表示未通过检测
3.unkonwn:表示检测没有正常进行

pod探针的相关属性:

initialDelaySeconds:容器启动后多久开始探测,单位是秒,默认是0秒
periodseconds:探测的时间间隔,单位是秒,默认是10秒,最小值是1秒
timeoutseconds: 执行探测请求后,等待响应的超时时间,默认是1秒
succseeThreshold: 连续探测几次成,才认为探测成功,默认为1,在存活探针(liveness probe)中必须为1,最小值为1.
failureThreshold:探测失败的重试次数,重试一定次数后将认为失败,在就绪探针中(readiness probe),pod会被标记为就绪,默认为3秒,最小值为1。

两种探针的区别:

readiness probe就绪探针和livenessprobe存活探针可以使用相同的探针方式,只是对pod的处置方式不同
readiness probe 就绪探针 当检测失败后,将pod 的IP:prot 从对应的 代理(endpoint)列表中删除
livenessprobe存活探针 当检测失败后,将杀死容器并根据pod的重启策略来决定做出对对应的决策

启动探测startprobe案例:
exec模式:
apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  namespace: tomcat
  labels:
    tomcat: v1
spec:
  containers:
  - name: tomcat
    image: tomcat:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    startupProbe:
      exec:
        command:
        - "/bin/sh"
        - "-c"
        - "ps aux | grep tomcat | grep -v grep" # 添加过滤条件来排除 grep 命令本身
      initialDelaySeconds: 10 # 容器启动后10秒开始探测
      periodSeconds: 10  #探测的间隔时间是10秒
      timeoutSeconds: 5  #探针执行检测请求后,等待响应的超时时间
      successThreshold: 1 #成功1次就算探测成功
      failureThreshold: 3 #探测失败3次就算失败
备注:第一次失败多久会重启

initialDelaySecinds+(periodSeconds+timeoutseconds)*failureThreshold
10+(10+5)*3=55

tcpsocket模式:
apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  namespace: tomcat
  labels:
    tomcat: v1
spec:
  containers:
  - name: tomcat
    image: tomcat:latest
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    startupProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 10 # 容器启动后10秒开始探测
      periodSeconds: 10  #探测的间隔时间是10秒
      timeoutSeconds: 5  #探针执行检测请求后,等待响应的超时时间
      successThreshold: 1 #成功1次就算探测成功
      failureThreshold: 3 #探测失败3次就算失败

httpGet模式:
apiVersion: v1
kind: Pod
metadata:
  name: tomcat
  namespace: tomcat
  labels:
    tomcat: v1
spec:
  containers:
  - name: tomcat
    image: tomcat:8.5-jre8-alpine
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    startupProbe:
      httpGet:
        port: 8080
        path: /
      initialDelaySeconds: 10 # 容器启动后10秒开始探测
      periodSeconds: 10  #探测的间隔时间是10秒
      timeoutSeconds: 5  #探针执行检测请求后,等待响应的超时时间
      successThreshold: 1 #成功1次就算探测成功
      failureThreshold: 3 #探测失败3次就算失败

你可能感兴趣的:(k8s 探测方法)