调用第三方chart时如何创建并使用新的ConfigMap?

How to create and use a new ConfigMap when calling a third party chart?

我们有一个 Concourse 实例,它通过 HelmRelease file, which holds our custom values and references the Concourse Helm Chart 使用 Flux 部署到 Kubernetes。注意:我们使用的是 Helm v3.

图表允许您指定addionalVolumesadditionalVolumneMounts;我希望用来将 /etc/Docker/Daemon.json 映射到我们的工作人员 pods 的功能,让他们使用我们的 pull-through 镜像代理(即避免 Docker 速率限制问题)。

apiVersion: helm.fluxcd.io/v1
kind: HelmRelease
metadata:
  name: concourse
  namespace: concourse
spec:
  helmVersion: v3
  releaseName: concourse
  chart:
    repository: https://concourse-charts.storage.googleapis.com/
    name: concourse
    version: 14.2.0
spec:
  #...
  values:
    #...
    worker:
      #...
      additionalVolumes:
        - name: "concourse-worker-docker-daemon"
          configMap:
            name: "concourse-worker-docker-daemon"
      additionalVolumeMounts:
        - name: "concourse-worker-docker-daemon"
          mountPath: /etc/docker/daemon.json
          subPath: daemon.json
          readOnly: true

但是,我需要用这样的东西创建这个 configMap 资源:

apiVersion: v1
kind: ConfigMap
metadata:
  name: concourse-worker-docker-daemon
  labels:
    app: concourse-worker
data:
  daemon.json: |
    {
      "registry-mirrors": ["https://myDockerMirror.example.com:5000"]
    }

如果我自己开发图表,我已经看到了如何定义这样的资源,但是由于我们使用的是第三方图表并且只是为发布提供值,所以我不确定应该如何定义实现(例如,有没有一种方法可以在 HelmRelease 的值中内联提供 configMap 的定义,以便在部署图表时创建它,我是否需要创建一个自定义图表来包装第三方图表并添加此资源,或者我是否需要在任何图表之外创建 configMap,然后通过 HelmRelease 文件引用预先存在的资源。

我想以在我的 flux repo 中完全管理它们的方式定义资源;即,而不是通过 运行 kubectl apply ... 手动创建配置映射;这样,推送到我们主分支的对该资源的任何更改都会自动同步到我们的 kubernetes 实例。

我的背景是 Windows 全栈,所以我对 Linux、Kubernetes、Flux 和 Helm 涉及的所有概念都很陌生,如果我忽略了某些事情,请提前致歉显而易见。

我最终通过在 helm chart 之外创建一个 configMap,然后在 helm chart 中使用它来解决这个问题。

配置图:

---
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: concourse
  name: concourse-worker-docker-daemon
  labels:
    app: concourse-worker
    #chart: "concourse-14.2.0"
    release: "concourse"
    #heritage: "Helm"
data:
  daemon.json: |
    {
      "registry-mirrors": ["https://myDockerMirror.example.com:5000"]
    }

头盔释放:

spec:
  # ...
  values:
  # ...
    worker:
      # ...
      additionalVolumes:
        - name: concourse-worker-docker-daemon
          configMap:
            name: concourse-worker-docker-daemon
      additionalVolumeMounts:
        - name: concourse-worker-docker-daemon
          mountPath: /etc/docker/daemon.json
          subPath: daemon.json
          readOnly: true