2021/3/25--pod健康检查probe&pod lifecycle

probe检测反馈给kubelet--->根据容器重启策略做相应处理;零宕机上线

liveness probe: 是否健康

readiness probe:是否完全启动,pod状态是否ready,准备好接收流量

  • ExecAction:在容器内执行一个命令,如果返回值为0,则认为容器健康。ls echo $?
  • TCPSocketAction:通过TCP连接检查容器内的端口是否是通的,如果是通的就认为容器健康。 Telnet ip porit,可能假死:端口通,但就是请求逻辑处理失败
  • HTTPGetAction:通过应用程序暴露的API地址来检查程序是否是正常的,如果状态码为200~400之间,则认为容器健康。最可靠,生产环境用的最多

 tips: 建议使用接口级监控检查httpget或者startupProbe,错误举例linenessProbes使用exec:pgrep java正常,但是java进程启动慢,但是readinessProbe已经报错进入不了流量

 

exec:
    command:
    - cat
    - /tmp/healthy

tcpSocket:
port: 80

 

httpGet:
path: /
port: 80

   探针检查参数配置

#      initialDelaySeconds: 60       # 初始化时间

#      timeoutSeconds: 2     # 超时时间

#      periodSeconds: 5      # 检测间隔

#      successThreshold: 1 # 检查成功为1次表示就绪

#      failureThreshold: 2 # 检测失败2次表示未就绪 防止设置成1因为网络波动误判

postStart 不保证每次都在容器内command前执行,有风险,初始化操作一般用initcontainer做,可以用一个高级别的用户

lifecycle:

#      postStart: # 容器创建完成后执行的指令, 可以是exec httpGet TCPSocket

#        exec:

#          command:

#          - sh

#          - -c

#          - 'mkdir /data/ '

#      preStop:

#        httpGet:     

#              path: /

#              port: 80

      #  exec:

      #    command:

      #    - sh

      #    - -c

      #    - sleep 90  ## < terminationGracePeriodSeconds

lifecycle.prestop:零宕机下线

用户执行删除操作→pod的status是Terminating;同时如果有svc的话在ep删除该pod的ip的ep条目;

同时执行PreStop指令

terminationGracePeriodSeconds: 30s 宽限期,作用于整个container

posted @ 2021-03-25 15:58  FengR  阅读(179)  评论(0编辑  收藏  举报