我有一个openshift项目,包含大约20个deploymentconfigs和相应的服务等。我有一个大型模板来声明这些对象。由于部署顺序依赖性(服务需要按特定顺序部署),我不能简单地执行
oc new-app --template=my-template
因为一切都开始同时部署。我想做点什么
oc new-app --template=my-template --dc=my-specific-dc
当然,最后一个选项并不存在。我无法使用" - selector = ..."无论是。那本来不错。这似乎是一个很大的限制。有没有办法从主模板中挑选部署?
我可以将所有服务拆分为单独的专用模板,但我的参数列表(相当广泛)需要在每个模板中重复,因为没有" include"包含常见yaml(或JSON)的注释。这将是一个维持的噩梦。
如何解决部署排序问题?
答案 0 :(得分:1)
我建议编写一些Python脚本会给你最大的灵活性。
import json
import sys
data = json.loads(sys.stdin.read())
newitems = []
for item in data['items']:
if item['kind'] == 'ConfigMap':
if item['metadata']['name'] == 'poc-kernel-gateway-1-cfg':
newitems.append(item)
data['items'] = newitems
print(data)
像以下一样运行:
oc get templates poc-kernel-gateway-1 -o json | oc process --param A=B -f - | python /tmp/process.py
或者如果已经在文件中有模板:
oc process --param A=B -f template.py | python /tmp/process.py
然后,您可以将结果反馈到oc create
。
关于订购问题,一种方法是使用init容器暂停部署,直到它所依赖的其他服务/应用程序准备就绪。
答案 1 :(得分:0)
格雷厄姆建议的是一个很好的解决方案。如果您愿意拆分模板,我可以想到的另一个选择是移出所有共享参数,并使用它们填充可以跨部署和不同文件使用的ConfigMap。这是我选择可维护性的选项。一旦模板被拆分,那么脚本部署就很简单了。
我遇到的另一个潜在选项是“等待准备”注释,它是alpha版,根据docs,允许你在其他人之前调出一些部署,尽管这样做对你来说可能不够精细。我自己没试过这个