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

Continuous integration 使用ValueFrom在模板中配置副本编号,continuous-integration,kubernetes,openshift,Continuous Integration,Kubernetes,Openshift,我有一个template.yml文件,在部署到任何OpenShift项目时使用。每个项目都有特定的项目道具要使用,这是我们CICD管道的一部分,因此每个项目都有一个独特的项目。道具可用 我希望能够根据要部署到的项目控制副本的数量和CPU/内存限制。例如,分支测试OpenShift项目与性能测试OpenShift项目的CPU请求和限制与短暂的OpenShift项目不同 我的template.yml文件如下所示: // <snip> spec: rep

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

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

我的
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
当我尝试部署时,会出现以下错误:
数量必须匹配正则表达式“^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$”

如果我更改
template.yml
以定义一个参数,它可以正常工作

       parameters:
        - name: OS_REPLICAS
          displayName: OS Number of Replicas
          value: 2
似乎
valueFrom
vs
value
具有不同的行为。使用
valueFrom
是否无法做到这一点?是否有其他方法可以使用
configMap
动态更改
spec
resources

另一种方法是部署并使用oc scale dc--replications=
,但它不是很优雅。

您有:

 spec:
    replicas: "${OS_REPLICAS}"
你应该:

 spec:
    replicas: "${{OS_REPLICAS}}"
模板参数为:

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

用于使用
“${{}”

它所做的是将参数的内容解释为JSON/YAML,而不是字符串值。这允许您提供一个整数,
副本
需要该整数

因此,您不需要
valueFrom
,因为它只能用于环境变量,而不能用于像
副本这样的任意字段

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


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

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

因此,这是通过以下方式实现的:

oc进程-f.yaml-v=

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

一个实际的例子是

oc进程-f./src/main/openshift/service.template.yaml-v OS_replications=2

你可以阅读更多关于它的内容

似乎OS原始团队不希望支持使用文件插入参数。您可以在此处阅读更多信息:


不幸的是,我不想只是硬编码副本值,而是想从文件、configMap或其他等效文件中读取副本值,因此在部署过程中,根据项目的不同,可以使用不同的数字。我知道您无法做到这一点。您也可以尝试(在Openshift 3.11下测试):
oc create-f template-file.yaml&&new app--template=$template\u name--env REPLICAS\u COUNT=$REPLICAS
   parameters:
    - name: OS_REPLICAS
      displayName: OS Number of Replicas
      value: 2