六、k8s pod 健康检测

健康检查(Probe)

Probe有以下两种类型:
livenessProbe
如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe
如果检查失败,Kubernetes会把Pod从service endpoints中剔除。

Probe支持以下三种检查方法:
httpGet
发送HTTP请求,返回200-400范围状态码为成功。
exec
执行Shell命令返回状态码是0为成功。
tcpSocket
发起TCP Socket建立成功。
参考:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

exec 形式 健康检测:

举例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 10; rm -rf /tmp/healthy; sleep 30
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
        #表示在容器启动5秒后启动检测,单位s
      initialDelaySeconds: 5
      #周期,每隔多久执行一次,单位s
      periodSeconds: 5

根据yaml文件创建后隔30s后可以观察,看看restart次数会不会增加:

kubectl get pod
liveness-exec                     1/1     Running   2          92s

根据httoget(curl)请求检测

样例:

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/liveness
    args:
    - /server
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
        httpHeaders:
        - name: X-Custom-Header
          value: Awesome
      initialDelaySeconds: 3
      periodSeconds: 3

根据yaml文件创建后:
如果 容器ip:8080/healthz ,curl不通的话将会杀掉容器

根据socket检测(端口监听):

举例:

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

根据yaml文件创建后:
如果 容器端口808探测不通的话将会杀掉容器

你可能感兴趣的:(k8s)