kubernetes config map 数据值外化

kubernetes config map data value externalisation

我正在我们的 k8s 集群中安装 fluent-bit。我在我们的 repo 上有它的 helm chart,argo 正在做部署。

helm chart中的资源中有一个config-map,其数据值如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit
  labels:
    app: fluent-bit
data:
...
  output-s3.conf: |
    [OUTPUT]
        Name s3
        Match *
        bucket bucket/prefix/random123/test
        region ap-southeast-2
...

我的问题是如何将存储桶的值外部化以使其不被硬编码(请注意存储桶值具有 运行dom 编号)?由于 s3 存储桶是由一个单独的应用程序创建的,该应用程序在同一主节点上获取 运行,因此 运行domly 生成的 s3 存储桶名称可用作环境变量,例如在节点上执行“echo $s3bucketName”将给出实际值)。

我已经尝试在配置图上执行以下操作,但它没有用,只是按照在 pod 上检查时的原样进行设置:

bucket $(echo $s3bucketName) 

使用 helm,我知道它可以像下面这样实现,然后可以使用像 helm --set 这样的脚本来填充以设置环境变量的值。但是部署是通过 argocd 自动进行的,所以没有地方可以执行 helm --set 命令,否则请告诉我。

bucket {{.Values.s3.bucket}}

TIA

您可以使用 helm template ... --set ... > out.yaml 在 yaml 文件中本地呈现您的图表,而不是使用 helm install。然后 Argo 可以处理此文件。

Docs

使用 FluentBit,您应该能够 use environment variables 例如:

  output-s3.conf: |
    [OUTPUT]
        Name s3
        Match *
        bucket ${S3_BUCKET_NAME}
        region ap-southeast-2

然后您可以在 Helm 值上设置环境变量。根据您使用的图表以及值的传递方式,您可能必须执行不同的设置,但是例如使用 official FluentBit chartsvalues-prod.yml 像:

env:
- name: S3_BUCKET_NAME
  value: "bucket/prefix/random123/test"

使用 ArgoCD,您可能有一个 Git 存储库,其中定义了 Helm 值文件(如 values-prod.yml)and/or 一个直接定义值的 ArgoCD 应用程序。例如,如果您定义了一个 ArgoCD 应用程序,例如:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  # [...]
spec:
  source:
    # ...
    helm:      
      # Helm values files for overriding values in the helm chart
      valueFiles:
      # You can update this file
      - values-prod.yaml

      # Helm values
      values: |
        # Or update values here
        env:
        - name: S3_BUCKET_NAME
          value: "bucket/prefix/random123/test"
        # ...

您应该能够在 ArgoCD 使用的存储库上更新 values-prod.yml 或使用您的环境变量 values: 直接更新