我正在尝试通过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没有分配给我想要的特定节点。知道什么地方错了吗?我应该把占位符作为图表模板的一部分吗?
答案 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 }}