kubernetes-helm - 使用节点选择器舵图将 pod 分配到特定节点池
问题描述
我正在尝试将 pod 分配给特定节点作为 helm 命令的一部分,所以到最后部署 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 未分配给我想要的特定节点。知道有什么问题吗?我应该把任何占位符作为我的图表模板的一部分还是不是必须的?
解决方案
Helm 提交给 Kubernetes API 的工件正是渲染图表模板的结果;仅此而已,仅此而已。如果您的模板不包含nodeSelector:
块,那么生成的部署也永远不会。即使您helm install --set ...
可以匹配 Kubernetes API 字段的内容,也不会隐式填充它们。
如果您想要一个选项来指定很少使用的字段,nodeSelector:
那么您的图表代码需要包含它们。您可以根据设置的值使字段的存在成为条件,但您确实需要明确列出它:
apiVersion: apps/v1
kind: Deployment
spec:
template:
spec:
{{- if .Values.nodeSelector }}
nodeSelector: {{- .Values.nodeSelector | toYaml | nindent 8 }}
{{- end }}
推荐阅读
- php - 如何在 symfony 中为用户设置访问控制?
- java - 我的 android studio 应用程序中可能有什么问题?
- vb.net - 在 Listview 中显示子项/单元格的 rect 焦点
- python-3.x - subprocess.check_output中的Python3使用python2.7
- firebase - 为什么我无法运行 app.scss 中有问题的 Vue 项目?
- r - K 均值中未使用的参数
- php - 警告:遇到非数字值和致命错误:未捕获 DivisionByZeroError:以零为模
- azure-application-insights - 在 Outsystems 中集成 Application Insights
- apache-spark - spark数据框列上sha2的多次迭代
- android - 我想将我的 3gp 音频文件转换为 .wav 格式