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 可以处理此文件。
使用 FluentBit,您应该能够 use environment variables 例如:
output-s3.conf: |
[OUTPUT]
Name s3
Match *
bucket ${S3_BUCKET_NAME}
region ap-southeast-2
然后您可以在 Helm 值上设置环境变量。根据您使用的图表以及值的传递方式,您可能必须执行不同的设置,但是例如使用 official FluentBit charts 和 values-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:
直接更新
我正在我们的 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 可以处理此文件。
使用 FluentBit,您应该能够 use environment variables 例如:
output-s3.conf: |
[OUTPUT]
Name s3
Match *
bucket ${S3_BUCKET_NAME}
region ap-southeast-2
然后您可以在 Helm 值上设置环境变量。根据您使用的图表以及值的传递方式,您可能必须执行不同的设置,但是例如使用 official FluentBit charts 和 values-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:
直接更新