kubernetes - Kubernetes - 部署初始化 - 如何确保它只发生一次?
问题描述
我使用 Kubernetes 1.12。我有一个服务(例如 pod),它可能有多个实例(例如副本 > 1)
我的目标是在任何服务实例启动之前执行维护任务(例如创建\升级数据库、生成证书等) 。
我正在考虑使用 Init Container,但至少据我了解,Init Container 将在任何时候创建额外的副本(pod)时执行,更糟糕的是 - 这可能会并行发生。在这种情况下,多个 Init 容器可能会并行工作,从而损坏我的数据库和其他所有内容。
我需要一个明确的解决方案,每次部署只执行一次引导维护任务。你会如何建议这样做?
解决方案
在每次部署之前,我在运行 db 迁移时遇到了同样的问题。这是一个基于 Job 资源的解决方案:
kubectl apply -f migration-job.yml
kubectl wait --for=condition=complete --timeout=60s job/migration
kubectl delete job/migration
kubectl apply -f deployment.yml
migration-job.yml
定义了一个配置了JobrestartPolicy: Never
并且相当低的activeDeadlineSeconds
. 使用kubectl wait
确保任何错误或超时migration-job.yml
都会导致脚本失败,从而阻止应用deployment.yml
.
推荐阅读
- angular - 摩纳哥 deltaDecorations 不适用于 Angular 7
- python-2.7 - 在画布上的自定义位置绘制电子表格
- ios - 如何在按钮单击时显示颜色选择器,在选择特定颜色时我想获得该颜色的十六进制代码?
- pandas - How to count each x entries and mark the occurence of this sequence with a value in a pandas dataframe?
- xaml - 如何覆盖 xamarin 表单中某些元素的父布局/视图不透明度?
- javascript - 我应该为 material-ui 图标使用什么道具类型?
- openxml - 显示/交互/可见 ClosedXML Excel.XLWorkbook 不保存
- java - hibernate : 如果不为空,则绑定参数
- php - 如何为查询选择的每个结果插入一个新行
- react-native - IOS 12.02 中的 react-native 可触摸不透明度点击问题