Kubernetes配置映射数据值外部化。

6

我正在为我们的k8s集群安装fluent-bit。 我们的仓库里有它的helm图表,Argo正在进行部署。

在helm图表中的资源之一是一个配置映射,其数据值如下:

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

我的问题是如何将桶的价值外部化,以便它不是硬编码的(请注意,桶价值具有随机数)?由于s3存储桶由在同一主节点上运行的单独应用程序创建,因此随机生成的s3存储桶名称可用作环境变量,例如,在节点上执行“echo $s3bucketName”将给出实际值。
我尝试在配置映射上执行以下操作,但它没有起作用,并且在pod上检查时仅被设置为它本来的样子:
bucket $(echo $s3bucketName) 

使用Helm,我知道可以像下面这样实现,然后可以使用脚本类似helm --set从环境变量中设置值。但是通过argocd自动进行部署,所以没有地方执行helm --set命令,请告诉我是否存在其他方法。
bucket {{.Values.s3.bucket}}

TIA


范围很窄,我会创建一个 init 容器来负责创建这个 configmap,在其中可以访问该变量。 - Saikat Chakrabortty
ArgoCD 可以使用 argo app set 命令覆盖参数值(更多信息请参见此处)。 - user15659347
@p10l,谢谢,您知道相应的YAML吗?由于Argo同步是自动化的,我们不使用Argo CLI。同时,要设置的值是否可以来自系统环境变量? - lorraine batol
2个回答

2

你可以使用helm template ... --set ... > out.yaml命令而不是使用helm install来将图表在本地渲染成yaml文件。然后,该文件可以被Argo处理。

文档


Argo正在进行自动同步,我不运行cli来控制Argo或Helm,一切都是声明性的yaml。是否有任何等效于--set的选项可以从系统环境变量中获取? - lorraine batol

1

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

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

您可以在Helm值上设置环境变量。根据您使用的图表以及传递值的方式,您可能需要执行不同的设置,但例如使用官方FluentBit图表和像values-prod.yml这样的文件:
env:
- name: S3_BUCKET_NAME
  value: "bucket/prefix/random123/test"

使用 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"
        # ...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接