【问题标题】:using node selector helm chart to assign pods to a specific node pool使用节点选择器舵图将 pod 分配到特定节点池
【发布时间】:2021-01-21 19:54:39
【问题描述】:

我正在尝试将 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 YAML 模板中。您能否编辑问题以包含部署的相关片段?
  • Helm 图表中有什么?它是否包含类似的nodeSelector: 块?
  • 嗨,不,我的图表模板不包括这样的块节点选择器:
  • apiVersion: apps/v1beta2 kind: Deployment spec: replicas: {{ .Values.replicas }} strategy: type: RollingUpdate rollingUpdate: {{ toYaml .Values.rollingUpdate | indent 6 }} selector: matchLabels: app: {{ .Chart.Name }} template: metadata: labels: app: {{ .Chart.Name }} buildVersion: {{ .Values.buildVersion }} spec: imagePullSecrets: - name: registry-credentials nodeSelector: {} containers: - name: {{ .Chart.Name }}

标签: kubernetes-helm


【解决方案1】:

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 }}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多