docker - 当 kubernetes 重启容器或集群扩容时会发生什么?
问题描述
我们正在使用Helm Chart在Kubernetes集群中部署应用程序。
我们有 statefulsets 和 headless 服务。为了初始化 mTLS,我们创建了一个“作业”类型,在“命令”中我们传递 shell 和 python 脚本是一个参数。并创建了一种“cronjob”来更新证书。
我们在“docker image”中编写了一个“docker-entrypoint.sh”,用于一些初始化工作和生成 TLS 证书。
要问的问题:
- 谁(Helm Chart/Kubernetes)负责扩展/监控/重启容器?
- 如果 pod 失败/重新启动,它会部署新的 docker 映像吗?
- docker ENTRYPOINT会在容器失败/重启后执行吗?
- 如果容器重新启动,'job' & 'cronjob' 会执行吗?
Kubernetes 还采取了哪些其他步骤?您还会分享容器见解吗?
解决方案
默认情况下,Kubernetes 而不是 helm 会重启一个失败的容器,除非你restartPolicy: Never
在 pod spec 中设置
重新启动容器与第一次启动容器完全相同。因此,在重新启动时,您可以期望事情的发生方式与第一次启动容器时相同。
在每个 kubernetes 节点中运行的内部 kubelet 代理将启动容器的任务委托给OCI投诉容器运行时,例如 docker、containerd 等,然后将 docker 镜像作为节点上的容器启动。
我希望在启动容器时都执行入口点脚本。
如果 pod 失败/重新启动,它会部署新的 docker 映像吗?
它创建一个具有与 pod 规范中指定的相同图像的新容器。
如果容器重新启动,'job' & 'cronjob' 会执行吗?
如果作为 cronjob 一部分的容器失败,kubernetes 将继续重新启动(除非在restartPolicy: Never
pod 规范中)容器直到时间作业不被视为失败。检查如何使 cronjob 在失败时不重新启动容器。您可以指定控制在作业被视为失败之前重试的次数。backoffLimit
扩展相当于在相同或完全不同的 Kubernetes 节点上调度和启动同一容器的另一个实例。
作为旁注,您应该使用更高级别的抽象,例如部署而不是 pod,因为当 pod 失败时,Kubernetes 会尝试在同一节点上重新启动它,但是当部署失败时,Kubernetes 也会尝试在其他节点上重新启动它,如果它不能在其当前计划的节点上启动 pod。
推荐阅读
- python - 将数组中的一列与一组值进行比较,并从第二列返回另一组具有相应索引的值
- javascript - vue.js中的数据是使用插值多次打印数据还是使用js表达式连接数据更好?
- matlab - Matlab 中的这段代码是做什么的
- amazon-web-services - S3 仅访问特定文件夹 | 客户端生成器
- python - 有没有办法将 DataFrame 中的重复行作为新列附加到右侧?
- sql - Oracle SQL 正则表达式 RegExp_SubStr End Of Line (chr(10) 在搜索文本中返回 null
- node.js - 使用 Node.js 为本地服务器配置域名
- javascript - 为什么 JavaScript 保留关键字允许作为变量名?
- mysql - 写通信包超时
- c# - 如何将区域列表与“地址”(字符串)匹配并获取列表和字符串中都存在的区域 Asp.net core