如何通过Helm CLI为子Chart设置Node Affinity?
在Helm子Chart中通过CLI设置节点亲和性的正确方法
你要给Gitea Chart的mariadb、memcached子Chart配置的节点亲和性YAML结构如下:
mariadb: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: arch operator: In values: - x86_64
之前的--set命令语法错误,核心问题是没有正确处理YAML中的数组结构(nodeSelectorTerms和matchExpressions都是数组类型),Helm的--set语法需要用[索引]来指定数组元素。
正确的命令写法
方式一:合并参数简化写法
把同一数组元素的多个属性用大括号包裹、逗号分隔,同时用[]声明数组值:
helm install gitea gitea-charts/gitea -f ./values.yaml \ --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0]={key:arch,operator:In,values:[x86_64]}' \ --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0]={key:arch,operator:In,values:[x86_64]}'
方式二:拆分参数清晰写法
如果觉得合并写法可读性差,也可以拆分多个--set参数,逐个设置属性:
helm install gitea gitea-charts/gitea -f ./values.yaml \ # 配置memcached节点亲和性 --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key=arch' \ --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator=In' \ --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0]=x86_64' \ # 配置mariadb节点亲和性 --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].key=arch' \ --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].operator=In' \ --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[0].matchExpressions[0].values[0]=x86_64'
语法说明
nodeSelectorTerms[0]:指定数组中的第一个节点选择规则matchExpressions[0]:指定该规则下的第一个匹配表达式values[0]:指定匹配值数组中的第一个值- 如果需要添加多个规则或表达式,只需递增索引(比如
[1])即可扩展
内容的提问来源于stack exchange,提问作者Emily
相关产品推荐
相关产品推荐

