【问题标题】:Helm Environment Variables in if elseif else 中的 Helm 环境变量
【发布时间】:2021-04-06 17:27:14
【问题描述】:

在构建镜像路径时,这就是我想要构建镜像路径的方式,docker注册地址所在的位置,我想从configMap中获取它。

我无法在 values.yaml 文件中对注册表地址进行硬编码,因为每个客户的注册表地址都不同,我不想让客户手动输入此输入。这些 helm 图表是通过 argoCD 部署的,因此通过 shell 获取 registryIP 然后调用 helm 命令也不是一种选择。

我尝试了下面的代码,它不起作用,因为 env 变量在图像路径存在的上下文中不可用。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ template "helm-guestbook.fullname" . }}
spec:
  template:
    metadata:
      labels:
        app: {{ template "helm-guestbook.name" . }}
        release: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          {{- if eq .Values.isOnPrem "true" }}
          image: {{ printf "%s/%s:%s" $dockerRegistryIP .Values.image.repository .Values.image.tag }}
          {{- else }}
          env:
          - name: DOCKER_REGISTRY_IP
            valueFrom:
              configMapKeyRef:
                name: docker-registry-config
                key: DOCKER_REGISTRY_IP

关于如何使用 helm 解决这个问题的任何指示?谢谢

【问题讨论】:

  • 获取配置到 Helm 模板的唯一方法是通过.Values;但您可以通过 helm install --sethelm install -f 使用附加的 YAML 文件传递​​它们。 Helm(故意)不读取环境变量。

标签: kubernetes kubernetes-helm


【解决方案1】:

查看lookup 函数,https://helm.sh/docs/chart_template_guide/functions_and_pipelines/#using-the-lookup-function

虽然这可能很快变得非常复杂,但请注意不要过度使用它。

【讨论】:

  • 但是查找是在运行时正确的,因为这些值在编译时本身即在 helm 渲染期间是必需的,因此获取 registryIP 不是问题,因为它已经存储在 configMap 中
  • Helm 的运行时,即当你运行 helm install 时。清单在此时被烘焙为纯 YAML,然后应用。 Helm 没有运行时组件。
  • 知道了,谢谢你让我知道,但是查找也不能解决这里的问题,看起来还需要其他东西,试图弄清楚它是什么......问题是我会的正在使用 argo CD app-of-apps 概念,其中父工作流触发子工作流的安装,并且每个工作流都由 helm chart 支持,并且父子图表应用程序之间没有变量共享机制,所以即使我通过注册表 IP通过 parent ,它不会渗透到子掌舵图,这里共享配置的唯一方法是通过 config Maps
猜你喜欢
  • 2022-08-17
  • 2020-10-20
  • 2020-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 2021-08-08
相关资源
最近更新 更多