我有一个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
动态更改resources
和configMap
吗?
另一种方法是部署然后使用oc scale dc <deploy_config_name> --replicas=<number>
,但它不是很优雅。
答案 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团队不希望支持使用文件进行参数插入。你可以在这里阅读更多相关信息: