首页 > 解决方案 > 调用第三方chart时如何新建和使用新的ConfigMap?

问题描述

我们有一个 Concourse 实例,它通过HelmRelease文件使用 Flux 部署到 Kubernetes,该文件保存我们的自定义值并引用Concourse Helm Chart。注意:我们使用的是 Helm v3。

该图表允许您指定addionalVolumesadditionalVolumneMounts;我希望用来映射/etc/Docker/Daemon.json到我们的工作 pod 以使它们使用我们的 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 文件引用预先存在的资源)。

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

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

标签: kubernetes-helmhelmfilefluxcd

解决方案


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

配置图:

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

推荐阅读