kubernetes 配置映射数据值外化

lor*_*tol 6 kubernetes kubernetes-helm configmap

我正在我们的 k8s 集群中安装 fluent-bit。我在我们的 repo 上有它的舵图,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
...
Run Code Online (Sandbox Code Playgroud)

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

我曾尝试在配置图上执行以下操作,但它不起作用,并且在 pod 上进行检查时只是按原样设置:

bucket $(echo $s3bucketName) 
Run Code Online (Sandbox Code Playgroud)

使用 helm,我知道它可以实现如下所示的内容,然后可以使用脚本进行填充,例如helm --set从环境变量中设置值。但是部署是通过 argocd 自动进行的,所以它不像有一个地方可以执行helm --set命令,否则请告诉我。

bucket {{.Values.s3.bucket}}
Run Code Online (Sandbox Code Playgroud)

TIA

Pie*_* B. 1

使用 FluentBit,您应该能够使用环境变量,例如:

  output-s3.conf: |
    [OUTPUT]
        Name s3
        Match *
        bucket ${S3_BUCKET_NAME}
        region ap-southeast-2
Run Code Online (Sandbox Code Playgroud)

然后,您可以根据 Helm 值设置环境变量。根据您使用的图表以及值的传递方式,您可能需要执行不同的设置,但例如使用官方 FluentBit 图表,如下所示values-prod.yml

env:
- name: S3_BUCKET_NAME
  value: "bucket/prefix/random123/test"
Run Code Online (Sandbox Code Playgroud)

使用 ArgoCD,您可能有一个 Git 存储库,其中定义了 Helm 值文件(如values-prod.yml)和/或直接定义值的 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"
        # ...
Run Code Online (Sandbox Code Playgroud)

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