[toc]
为啥
最近有一个pod升级中的问题,被坑了一把,特此记录及学习一下
问题描述:我们的一个pod,在升级过程中被调用了一把start.sh ,这个start.sh 本来应该是在pod建立的时候才会调用,不应该升级过程中调用,一路跟着看日志发现,是paas升级后,kubelet升级重启,会重新拉pod, 正好我们这边pod是虚拟机部署,k8s的一个机制是虚拟机直接拉,不会判断当时pod的状态,导致容器屁事没有,虚拟机部署的就被调了start脚本,
解决方案:paas升级无法避免,就只能start.sh 脚本里支持可重入,检查一下pod状态,在了咱就不执行start,否则就继续执行呗。
pod的生命周期
lifecyle
- 有两个钩子:
postStart: 容器启动后执行,注意由于是异步执行,它无法保证一定在ENTRYPOINT之后运行。如果失败,容器会被杀死,并根据RestartPolicy决定是否重启
preStop:容器停止前执行,常用于资源清理。如果失败,容器同样也会被杀死 -
而钩子的回调函数支持两种方式:
exec:在容器内执行命令
httpGet:向指定URL发起GET请求
kubelet
健康检查
为了确保容器在部署后确实处在正常运行状态,Kubernetes提供了两种探针(Probe,支持exec、tcp和httpGet方式)来探测容器的状态:
LivenessProbe:探测应用是否处于健康状态,如果不健康则删除重建改容器
ReadinessProbe:探测应用是否启动完成并且处于正常服务状态,如果不正常则更新容器的状态
发表回复