我们正在将旧版应用程序迁移到 Kubernetes。我们将运行它的许多实例(每个客户一个 Kubernetes 命名空间),因此我们希望自动化我们的应用程序升级过程。
Kubernetes 拥有完善的滚动升级模式,但我(还)无法使用它们。我的申请需要经过以下流程:
我们通过 Deployment 定义 Pod。只要我们一次运行多个数据库,数据库升级作业就是幂等的。
我认为我的工作流程对于遗留应用程序来说并不罕见,但我找不到任何已建立的模式或预先配置的工具。外面有什么东西吗?如果我确实必须编写自己的运算符(或使用类似 Kudo 的东西),那么它执行的最佳步骤是什么?
是的,有一个现有的流程:
使用以下kubectl scale命令将现有 Deployment 缩减至零副本:kubectl scale --replicas=0 deploy/my-legacy-deployment
等待稳定(这是您要求的停机时间;-)
使用kubectl wait会有所帮助,尽管我个人没有引入停机时间的经验来了解wait此处建议的其余论点
您还可以使用类似while true; do [[ 0 -eq $(kubectl get pods -o name -l legacy-deployment-selector | wc -l) ]] && break; done“停止”之类的方法,直到没有剩余的豆荚为止
运行您的数据库作业或您选择的迁移
像平常一样部署新版本;根据您使用的工具,这实际上可能会也可能不会影响当前的零规模部署
例如,kubectl set image deploy/my-legacy-deployment "*=example.com/my/new/image"将部署保留零副本
但是helm install --upgrade legacy whatever-else很可能将部署的副本设置为图表中找到的值
如果您的工具尚未扩展新的部署,您现在可以使用相反的命令将其设置回所需的值:kubectl scale --replicas=3 deploy/my-legacy-deployment
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |