【问题标题】:Cherry picking objects from openshift template从 openshift 模板中挑选对象
【发布时间】:2018-04-19 21:07:10
【问题描述】:

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

oc new-app --template=my-template

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

oc new-app --template=my-template --dc=my-specific-dc

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

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

任何想法如何解决部署排序问题?

【问题讨论】:

    标签: openshift openshift-origin


    【解决方案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 容器暂停部署,直到它所依赖的其他服务/应用程序准备好。

    【讨论】:

    • 我喜欢这个。我尝试了一个变体,它读取我的大模板并根据提供给 python 脚本的参数提取特定对象。我还可以附加参数列表。所以现在我有一个地方来声明所有模板参数和对象。现在我只需要创建一个循环遍历每个部署的脚本,并且:1.cherry 从主模板中挑选信息并将其写入临时模板文件,2.执行oc new-app -f <my-temporary-template.json> 3.在继续之前 Ping pod 以获取健康状态以正确的顺序进行下一次部署。
    【解决方案2】:

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

    我遇到的另一个潜在选项是“等待就绪”注释,它是 alpha 版本,根据docs,它将允许您在其他人之前提出一些部署,尽管这可能不会对你来说足够细。这个我自己没试过

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      相关资源
      最近更新 更多