使用 helm 部署时基于环境的不同 grafana.ini
Posted
技术标签:
【中文标题】使用 helm 部署时基于环境的不同 grafana.ini【英文标题】:Different grafana.ini based on environment when deploying with helm 【发布时间】:2021-03-13 15:22:08 【问题描述】:我正在使用自定义 helm 图表将 grafana 部署到 Kubernetes。构建时将自定义 grafana.ini 文件复制到 docker 映像中,grafana.ini 文件包含 RDS 实例连接配置和各种自定义身份验证设置。当我将多个环境混合在一起时,这并不理想,因为每个构建都需要不同的 grafana.ini 文件,并且我想使用相同的基础 docker 映像。它也不安全。
我有三个 Kubernetes 集群,dev、preprod 和 prod。关键的区别在于 RDS 配置。
根据环境,将 grafana.ini 文件绑定到特定版本的 grafana 的最佳方法是什么。我可以使用某种参数化的 configMap 吗?
我正在使用 helmfile 来部署 helm chart,因此我熟悉为每个环境拥有单独的 values.yaml 文件并设置环境变量来定位正确的环境变量的概念。
【问题讨论】:
拥有一个ConfigMap
并设置来自values files 的变量,这些变量特定于每个环境听起来像是要走的路。
【参考方案1】:
您可以将 configmap 作为卷挂载到 pod 中。
一个例子:
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: null
labels:
env: prod
app: metis
client: ueuropea
name: metis-clients-configmap
data:
clients_db_config.yaml: |
default-tenant:
DB_HOST: dbhost
DB_USERNAME: user
DB_PASSWORD: pass
DB_NAME: dbname
DB_PORT: 3306
部署:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
env: dev
app: metis
name: metis-rules-evaluator-dev
spec:
progressDeadlineSeconds: 3600
replicas: 0
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
template:
metadata:
labels:
env: dev
app: metis
client: ueuropea
mode: rules-evaluator
spec:
containers:
- image: metis
name: metis
imagePullPolicy: Always
resources:
requests:
memory: "1024Mi"
cpu: "3000m"
limits:
memory: "16384Mi"
cpu: "4000m"
volumeMounts:
- name: config-vol
mountPath: /usr/src/metis/config/
volumes:
- name: config-vol
configMap:
name: metis-clients-configmap
terminationGracePeriodSeconds: 150
restartPolicy: Always
在本例中,configmap 数据将被挂载到路径:/usr/src/metis/config/
并将创建文件 clients_db_config.yaml
,该文件也可以是 .ini
【讨论】:
以上是关于使用 helm 部署时基于环境的不同 grafana.ini的主要内容,如果未能解决你的问题,请参考以下文章
使用 Helm Charts 和 VMware Tanzu 应用程序目录简化 Kubernetes 中后备服务的部署