使用ValueFrom在模板中配置副本号

时间:2017-07-20 13:52:34

标签: continuous-integration kubernetes openshift

我有一个template.yml文件,在部署到任何OpenShift项目时使用。每个项目都有特定的project-props configMap,这是我们的CICD管道的一部分,因此每个项目都有一个唯一的project.props可用

我希望能够根据我部署的项目来控制副本数量和CPU /内存限制。例如,测试OpenShift项目与性能测试OpenShift项目的分支将具有与短暂的OpenShift项目不同的CPU请求和限制。

我的template.yml文件看起来像这样:

     // <snip>
     spec:
        replicas: "${OS_REPLICAS}"
     // <snip>
     resources:
        limits:
          cpu: "${OS_CPU_LIMIT}"
          memory: "${OS_MEMORY_LIMIT}"
        requests:
          cpu: "${OS_CPU_REQUEST}"
          memory: "${OS_MEMORY_REQUEST}"
     // <snip>
     parameters:
        - name: OS_REPLICAS
          displayName: OS Number of Replicas
          valueFrom:
             configMapKeyRef:
               name: project-props
               key: os.replicas
    // rest of params are similar

我的相关project-props部分是:

os.replicas=2
os.cpu.limit=2
os.cpu.request=250m
os.memory.limit=1Gi
os.memory.request=1Gi

当我尝试部署它时,我收到以下错误: quantities must match the regular expression '^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$'

如果我更改template.yml以定义参数,则可以正常使用

       parameters:
        - name: OS_REPLICAS
          displayName: OS Number of Replicas
          value: 2

valueFrom vs value似乎有不同的行为。使用valueFrom这是不可能的吗?还有其他方法可以使用spec动态更改resourcesconfigMap吗?

另一种方法是部署然后使用oc scale dc <deploy_config_name> --replicas=<number>,但它不是很优雅。

2 个答案:

答案 0 :(得分:0)

你在哪里:

 spec:
    replicas: "${OS_REPLICAS}"

你应该:

 spec:
    replicas: "${{OS_REPLICAS}}"

使用模板参数:

   parameters:
    - name: OS_REPLICAS
      displayName: OS Number of Replicas
      value: 2

请参阅:

使用"${{}}"

它的作用是将参数的内容解释为JSON / YAML,而不是字符串值。这允许您提供replicas所需的整数。

所以你不需要valueFrom,因为它只能用于环境变量,而不能用于replicas等任意字段。

对于尝试为项目中部署的pod设置内存和CPU的默认值,您应该考虑针对项目定义LimitRange资源并设置默认值。

答案 1 :(得分:0)

我找到了答案,它没有读取文件中的值,但至少它们可以是动态的。

OpenShift有一个oc process命令,可以在使用模板时运行。

所以这样做:

oc process -f <template_name>.yaml -v <param_name>=<param_value>

这将覆盖参数值和-v插入的参数值。

一个实际的例子是

oc process -f ./src/main/openshift/service.template.yaml -v OS_REPLICAS=2

您可以阅读更多相关信息OpenShift template documentation

似乎OS Origin团队不希望支持使用文件进行参数插入。你可以在这里阅读更多相关信息:

https://github.com/openshift/origin/pull/10952

https://github.com/openshift/origin/issues/10687