K8s的probe有哪些类型?如何用probe进行探测?容器的默认probe是什么?

容器启动后,kubelet会调用container的handler对container的状态进行诊断,

Handler有三种: ExecAction、TcpSockerAction、HttpGetAction,诊断结果有三种:Succees、Failure、Unknown。

(1) ExecAction:命令执行成功,返回0,表示容器是活着的

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 -rf /tmp/healthy; sleep 600
    livenessProbe:
      exec:
        command:  #命令执行成功,返回0,表示容器是活着的
        - cat
        - /tmp/healthy 
      initialDelaySeconds: 5  #从容器创建开始,5秒后开始探测
      periodSeconds: 5   #每隔5秒探测一次

 

(2) TcpSockerAction:端口开放则表示活着

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

(3) HttpGetAction:response 的code在 200 到 400之间表示活着.

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:   # response 的code在 200 到 400之间表示活着.
        path: /healthz
        port: 8080
        httpHeaders:
        - name: Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

在container的每个运行阶段,有对应的诊断类型,startupProbe,readinessProbe,livenessProbe,这三种诊断类型均可使用ExecAction、TcpSockerAction、HttpGetAction这三种handler类型:

 

 

 

(1)       startupProbe:因为有的应用程序的启动时间比较久,像是Tensorflow在启动时,会经历一段比较长的初始化时间,所以此时设置一个startupProbe,当探测返回Succees时,再开始下面的就绪探针检测,若返回Failure,kubelet将会kill该container,然后根据restart polic(Always, OnFailure, and Never. the default value is Always.)来决定是否重启容器。如果container没有提供startupProbe,则诊断结果是Succees。

(2)       readinessProbe:用来诊断container是否可以开始接收流量,如果诊断结果是Failure,则endpoints contoller会从Service的endpoints中移除该pod的ip。如果container没有提供该探针,则诊断结果是Succees。

(3)       livenessProbe:诊断container是否running,如果failure,那么kubelet kill container,并根据restart policy来决定是否重启。

 

参考:

https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-probes

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

 

posted on 2021-11-26 10:48  MissSimple  阅读(250)  评论(0编辑  收藏  举报

导航