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