Другой файл grafana.ini в зависимости от среды при развертывании с помощью helm

#kubernetes #grafana #kubernetes-helm #helmfile

#kubernetes #grafana #kubernetes-helm #helmfile

Вопрос:

Я развертываю grafana в kubernetes, используя пользовательскую диаграмму helm. Пользовательский файл grafana.ini копируется в образ docker при его сборке, файл grafana.ini содержит конфигурацию подключения к экземпляру RDS и различные пользовательские настройки авторизации. Это не идеально, когда я добавляю в микс более одной среды, поскольку для каждой сборки потребуется другой файл grafana.ini, и я хочу использовать один и тот же базовый образ docker. Это также небезопасно.

У меня есть три кластера kubernetes: dev, preprod и prod. Решающими отличиями будут конфигурация RDS.

Каков наилучший способ привязки файла grafana.ini к определенной сборке grafana, основанной на среде. Могу ли я использовать какую-то параметризованную конфигурационную карту?

Я использую helmfile для развертывания диаграммы helm, поэтому я знаком с концепцией наличия отдельных значений.файлы yaml для каждой среды и установка переменной среды для назначения правильной.

Комментарии:

1. Наличие ConfigMap и установка переменных из файлов значений , специфичных для каждой среды, звучит как правильный путь.

Ответ №1:

Вы можете смонтировать configmap как том в модуле.

Пример:

 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