k8s pod管理机制

[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:探测应用是否启动完成并且处于正常服务状态,如果不正常则更新容器的状态


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注