0

我正在使用自定义 helm 图表将 grafana 部署到 kubernetes。构建时将自定义 grafana.ini 文件复制到 docker 映像中,grafana.ini 文件包含 RDS 实例连接配置和各种自定义身份验证设置。当我将多个环境混合在一起时,这并不理想,因为每个构建都需要不同的 grafana.ini 文件,并且我想使用相同的基础 docker 映像。它也不安全。

我有三个 Kubernetes 集群,dev、preprod 和 prod。关键的区别在于 RDS 配置。

根据环境,将 grafana.ini 文件绑定到特定版本的 grafana 的最佳方法是什么。我可以使用某种参数化的 configMap 吗?

我正在使用 helmfile 来部署 helm 图表,因此我熟悉为每个环境拥有单独的 values.yaml 文件并设置环境变量以定位正确的环境变量的概念。

4

1 回答 1

2

您可以将 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 数据将安装在 path: 上/usr/src/metis/config/,并将创建clients_db_config.yaml也可以是 .ini的文件

于 2020-12-01T18:50:55.523 回答