使用节点选择器掌舵图将吊舱分配给特定的节点池

时间:2020-10-06 21:42:55

标签: kubernetes-helm

我正在尝试通过helm命令将Pod分配给特定节点,因此到最后部署yaml应该看起来像这样

spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    node-name: dev-cpu-pool

我正在使用此命令作为Jenkins文件部署的一部分

`sh "helm upgrade -f charts/${job_name}/default.yaml --set nodeSelector.name=${deployNamespace}-cpu-pool --install ${deployNamespace}-${name} helm/${name} --namespace=${deployNamespace} --recreate-pods --version=${version}`"

                

部署工作良好,并且Pod已启动并正在运行,但是由于某种原因,我看不到nodeSelector键和值作为部署Yaml的一部分,结果Pod没有分配给我想要的特定节点。知道什么地方错了吗?我应该把占位符作为图表模板的一部分吗?

1 个答案:

答案 0 :(得分:1)

Helm提交给Kubernetes API的工件正是渲染图表模板的结果。仅此而已。如果您的模板不包含nodeSelector:块,那么生成的Deployment也将不会。即使您helm install --set ...可以匹配Kubernetes API字段的东西,也不会隐式地填充它们。

如果您想要一个选项来指定诸如nodeSelector:之类的很少使用的字段,则您的图表代码需要包括它们。您可以根据所设置的值来确定是否存在该字段,但是您需要明确列出该字段:

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
{{- if .Values.nodeSelector }}
      nodeSelector: {{- .Values.nodeSelector | toYaml | nindent 8 }}
{{- end }}