我使用 Helm 将我的应用程序部署到 Kubernetes 集群中。应用程序与数据库配合使用,因此我必须在安装新版本的应用程序之前运行数据库迁移。我使用 Helm“预升级”挂钩通过 Kubernetes Job 对象运行迁移。
问题是当迁移作业开始时,旧版本的 Pod 仍在使用数据库。他们可以阻止数据库中的对象,因此迁移作业可能会失败。
所以,我想在迁移作业开始之前以某种方式自动停止集群中的所有 Pod。有没有办法使用 Kubernetes + Helm 来做到这一点?将不胜感激所有的答案。
我认为您可以通过两种方式做到这一点。
第一个选项是在部署之前缩小 Pod 规模(例如,通过 Jenkins、CircleCI、GitLab CI 等)
kubectl scale --replicas=0 -n {namespace} {deployment-name}
helm install .....
第二个选项(这可能更容易,具体取决于您希望如何继续维护)是添加一个比迁移挂钩更高优先级的额外预升级挂钩,以便它在升级作业之前运行;然后用它来缩小
kubectl
比例。