k8s-Pod健康检查和服务可用性检查

Kubernetes对Pod的健康状态可以通过三类探针来检查: LivenessProbe、ReadinessProbe和StartupProbe

LivenessProbe
用户判断容器是否存活,即是不是Running状态,如果LivenessProbe探针探测到容器不健康,则kubelet将杀掉该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的LivenessProbe探针返回的值永远是Success。

ReadinessProbe探针:用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的Pod,Service与PodEndpoint的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready状态变为False,则系统自动将其从Service的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回后端Endpoint列表。这样就能保证客户端在访问Service时不会被转发到服务不可用的Pod实例上。

StartupProbe探针,某些应用启动比较慢,会造成容器启动缓慢此时ReadinessPprobe就不适用了,这种属于有且仅有一次的超长延时,可以通过StartupProbe探针解决

以上三种探针都可以配置三种实现方式

ExecAction

在容器内部运行一个命令,如果该命令发的返回码为9,则表示容器健康

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: gcr.io/google_containers/busybox
    args:
    - /bin/sh
    - -c
    - echo ok > /tmp/health; sleep 10; rm -rf /tmp/health; sleep 600
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/health
      initialDelaySeconds: 15
      timeoutSeconds: 1
复制代码

TCPSocketAction

通过容器ip地址和端口号执行TCP检查,如果能建立链接表示容器监控

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-healthcheck
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 1
复制代码

HTTPGetAction

通过容器的ip,端口以及调用http get方法,如果响应码200-400之间表示容器健康

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-healthcheck
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    livenessProbe:
      httpGet:
        path: /_status/healthz
        port: 80
      initialDelaySeconds: 30
      timeoutSeconds: 1
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享