我正在尝试将节点亲和力设置为舵图中的子图,据我了解,我需要使用
--set
参数来执行此操作,但在如何在 cli 中传递该参数时遇到了一些困难。这是我试图设置的等效节点关联性:
mariadb:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: arch
operator: In
values:
- x86_64
尝试这样做,但使用数组声明等,感觉不对(并且不执行任何操作):
helm install gitea gitea-charts/gitea -f ./values.yaml --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.key.arch=x86_64' --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.key.arch=x86_64'
我建议做这样的事情,特别是当你有多种类型时,不是使用
--set
而是使用第二个值yaml——或者修改现有的值yaml(如果有的话)。通过 set 覆盖亲和力会变得非常混乱并且可读性不太好。但如果您使用单独的值 yaml,则改为:
helm install gitea gitea-charts/gitea -f ./values.yaml --set 'memcached.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.key.arch=x86_64' --set 'mariadb.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions.key.arch=x86_64'
你就会有
helm install gitea gitea-charts/gitea -f ./values.yaml
(如果您修改了现有的values.yaml)
或
helm install gitea gitea-charts/gitea -f ./values.yaml -f ./affinity.yaml
(如果您选择将亲和力放在单独的 yaml 中。)
编辑(艾米丽提供的信息):获取 mariadb pod 的输出:
NAME READY STATUS RESTARTS AGE
gitea-mariadb-0 0/1 CrashLoopBackOff 5 (55s ago) 3m59s
(Pod 失败,因为 bitnami 图表不支持 Arm,而这是一个 Arm 主机)
它在豆荚里的亲和力:
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/component: primary
app.kubernetes.io/instance: gitea
app.kubernetes.io/name: mariadb
namespaces:
- default
topologyKey: kubernetes.io/hostname
weight: 1
affinity.yaml的内容
mariadb:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: arch
operator: In
values:
- x86_64
感谢 Blender Fox 的帮助和挖掘。问题是,虽然 memcached 图表嵌套在主配置下,但数据库(postgresql 和 mariadb)具有针对主节点和任何辅助节点的附加设置。我通过在主 gitea 图表中的
affinity:
子图设置覆盖下执行以下操作来修复此问题:mariadb
编辑 pod 向我证明,现在设置正确,不需要额外的 cli 选项:
<...snip...>
primary:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: arch
operator: In
values:
- x86_64
<...snip...>