首页 > 解决方案 > 当 kubernetes 重启容器或集群扩容时会发生什么?

问题描述

我们正在使用Helm Chart在Kubernetes集群中部署应用程序。

我们有 statefulsets 和 headless 服务。为了初始化 mTLS,我们创建了一个“作业”类型,在“命令”中我们传递 shell 和 python 脚本是一个参数。并创建了一种“cronjob”来更新证书。

我们在“docker image”中编写了一个“docker-entrypoint.sh”,用于一些初始化工作和生成 TLS 证书。

要问的问题:

Kubernetes 还采取了哪些其他步骤?您还会分享容器见解吗?

标签: dockerkuberneteskubernetes-helm

解决方案


默认情况下,Kubernetes 而不是 helm 会重启一个失败的容器,除非你restartPolicy: Never在 pod spec 中设置

重新启动容器与第一次启动容器完全相同。因此,在重新启动时,您可以期望事情的发生方式与第一次启动容器时相同。

在每个 kubernetes 节点中运行的内部 kubelet 代理将启动容器的任务委托给OCI投诉容器运行时,例如 docker、containerd 等,然后将 docker 镜像作为节点上的容器启动。

我希望在启动容器时都执行入口点脚本。

如果 pod 失败/重新启动,它会部署新的 docker 映像吗?

它创建一个具有与 pod 规范中指定的相同图像的新容器。

如果容器重新启动,'job' & 'cronjob' 会执行吗?

如果作为 cronjob 一部分的容器失败,kubernetes 将继续重新启动(除非restartPolicy: Neverpod 规范中)容器直到时间作业不被视为失败。检查如何使 cronjob 在失败时不重新启动容器。您可以指定控制在作业被视为失败之前重试的次数。backoffLimit

扩展相当于在相同或完全不同的 Kubernetes 节点上调度和启动同一容器的另一个实例。

作为旁注,您应该使用更高级别的抽象,例如部署而不是 pod,因为当 pod 失败时,Kubernetes 会尝试在同一节点上重新启动它,但是当部署失败时,Kubernetes 也会尝试在其他节点上重新启动它,如果它不能在其当前计划的节点上启动 pod。


推荐阅读