2017-05-29 2 views
0

Je cours grafana en tant que pod dans mon cluster Kubernetes. Une fois Grafana initialisé, il crée une base de données sur localhost et y enregistre toutes les données. Cela signifie que chaque fois qu'un pod est détruit et recréé, la base de données entière est réinitialisée et je perds toutes les données précédentes.Modifier le fichier de configuration à l'intérieur de l'image avant le déploiement/la création du pod

La configuration grafana à l'intérieur du Pod DB est ::

#################################### Database #################################### 
[database] 
# Either "mysql", "postgres" or "sqlite3", it's your choice 
;type = sqlite3 
;host = 127.0.0.1:3306 
;name = grafana 
;user = root 
;password = 

Inorder pour se débarrasser de ce problème, je dois créer un DB externe et pointer mon Grafana d'utiliser cette instance DB chaque fois que je crée la Grafana Pod. Ma mise en œuvre par défaut en cours pour créer le pod Grafana est ::

apiVersion: v1 
kind: Service 
metadata: 
    name: lb-grafana-service 
spec: 
    ports: 
    - port: 4545 
     targetPort: 4545 
     protocol: TCP 
    clusterIP: 10.100.10.100 
---- 
apiVersion: v1 
kind: Service 
metadata: 
    annotations: 
    prometheus.io/scrape: 'true' 
    labels: 
    app: grafana 
    name: grafana 
    name: grafana 
spec: 
    ports: 
    - name: scrape 
    port: 4545 
    nodePort: 30999 
    protocol: TCP 
    type: NodePort 
    selector: 
    app: grafana 
---- 
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: grafana 
spec: 
    replicas: 1 
    selector: 
    matchLabels: 
     app: grafana 
    template: 
    metadata: 
     name: grafana 
     labels: 
     app: grafana 
    spec: 
     containers: 
     - name: grafana 
     image: grafana/grafana:develop 
     env: 
      - name: Prometheus_SERVICE_URL 
      value: http://172.29.219.105:30901 
      - name: GF_SECURITY_ADMIN_PASSWORD 
      value: "grafana" 
      - name: GF_SERVER_HTTP_PORT 
      value: "4545" 
     ports: 
      - containerPort: 9101 
     volumeMounts: 
     - mountPath: /var 
      name: grafana-storage 
     volumes: 
     - name: grafana-storage 
     emptyDir: {} 

Donc ce que je veux faire est de remplacer le fichier /etc/grafana/grafana.ini avant pod Grafana est en ligne ou tout simplement réécrire le fichier en cours avec de nouvelles valeurs. Je n'ai aucune idée de comment je peux le faire maintenant. Un peu d'orientation sera très appréciée.

+1

Vous pouvez utiliser [cartes de configuration] (https://kubernetes.io/docs/tasks/configure-pod-container/configmap /) pour ça. Téléchargez le 'grafana.ini' entier dans une carte de configuration et montez-le dans le pod grafana. – fishi

+0

Merci. On dirait que ça va faire le travail pour moi. –

Répondre

1

En général, vous pouvez utiliser ConfigMaps comme le commentaire dit.

L'image Grafana elle-même permet de fournir tous les paramètres de configuration via des variables d'environnement. Ceci est seulement mentionné dans le GitHub readme.

De cette façon, vous pouvez définir les variables d'environnement avec Kubernetes, comme:

spec: 
    template: 
     spec: 
     containers: 
     - name: grafana 
      image: grafana/grafana:4.1.1 
      env: 
      - name: "GF_SERVER_ROOT_URL" 
      value: "http://grafana.{{.clusterDomain}}" 
      - name: "GF_DATABASE_TYPE" 
      value: "{{.gfDatabaseType}}" 
      - name: "GF_DATABASE_HOST" 
      value: "{{.gfDatabaseHost}}" 
      - name: "GF_DATABASE_NAME" 
      value: "{{.gfDatabaseName}}" 
      - name: "GF_DATABASE_USER" 
      value: "{{.gfDatabaseUser}}" 
      - name: "GF_DATABASE_PASSWORD" 
      value: "{{.gfDatabasePassword}}" 
      - name: "GF_DATABASE_SSL_MODE" 
      value: "disable" 
      - name: "GF_AUTH_ANONYMOUS_ENABLED" 
      value: "true" 
+1

L'utilisation de variables d'environnement se trouve dans les documents de Grafana: http://docs.grafana.org/installation/configuration/#using-environment-variables Je suis un peu curieux de savoir pourquoi vous ne l'avez pas trouvé. Était-ce la recherche sur le site de docs qui n'a pas retourné un résultat ou ne l'avez-vous pas trouvé via Google? –