可以重启 pod 或 rollout 重启部署的 Kubernetes 作业

问题描述

我在 kubernetes 上运行了容器化应用程序,该应用程序已将卷安装到 efs。该卷包含一个目录,该目录定期(例如每月)更新文件文件的更新(zip 和 upzip)可以通过 CronJob 来完成。这是一个文件,下载可能需要几分钟。解压后的文件名称每个月都不同(例如:data_202001、data_202001 等)。解压缩过程完成后,我需要重新启动 pod(类似于执行 kubectl rollout restart deployment/my-app),以便我可以重新启动 pod 并运行 init 脚本以将其指向新目录/文件夹。

基本上,我的挑战是重新启动 Pod。我需要应用程序在没有手动/人工干预的情况下自动重启。我尝试在 docker 容器中使用 kubectl,看看我是否可以执行此 kubectl 命令,但遇到了权限问题,因此目前无法选择。

解决方法

对于您的情况,没有单一的正确解决方案。实际上,它可以通过许多不同的方式来完成。一种看起来很合理的方法是使用一个额外的sidecar 容器(请参阅此 section),在这样的 Pod 中运行,它将监视目录的更新并一次它检测到一个变化,它可能会调用 kubernetes-api(使用 kubectl 实用程序或直接从代码中,使用 client libraries 之一,可用于不同的编程语言),以便重新启动整个 Pod。当然,它需要为此配置一个 ServiceAccount 绑定到具有 RoleBinding 的特定角色,这将允许它执行所需的操作。 正如您所料,它不能仅在 kubernetes 级别上处理,您需要一个额外的组件来负责此过程。我认为将它与您的主应用程序分离是一种很好的方法,但它也可以集成到您的主容器中。选择具体的解决方案取决于您。