从 openshift 模板中挑选对象

Cherry picking objects from openshift template

我有一个包含大约 20 个部署配置和相应服务等的 openshift 项目。我有一个声明这些对象的大型模板。由于部署顺序依赖性(服务需要按特定顺序部署),我不能简单地做

oc new-app --template=my-template

因为一切都同时开始部署。我想做类似

的事情
oc new-app --template=my-template --dc=my-specific-dc

当然最后一个选项不存在。我也不能使用“--selector=...”。那会很好。这似乎是一个很大的限制。有没有办法从主模板中挑选部署?

我可以将我所有的服务拆分成单独的专用模板,但我的参数列表(非常广泛)需要在每个模板中重复,因为没有 "include" 用于包含通用 yaml 的注释(或 JSON)。那将是一场噩梦。

有什么解决部署顺序问题的想法吗?

我建议写一点 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 容器暂停部署,直到它所依赖的另一个 services/applications 准备就绪。

格雷厄姆建议的是一个很好的解决方案。如果您愿意拆分模板,我能想到的另一种选择是将所有共享参数移出并使用它们来填充可跨部署和在不同文件中使用的 ConfigMap。这是我为可维护性而选择的选项。一旦模板被拆分,脚本部署就变得微不足道了。

我遇到的另一个潜在选项是 "wait-for-ready" 注释,它处于 alpha 阶段,根据 docs,将允许您在其他部署之前启动一些部署,尽管这对你来说可能不够细粒度。我自己没试过