ConfigMaps

Veel applicaties, ook die in een container draainen vereisen configuratie. Vaak kun je deze applicaties configureren met configuratiebestanden (i.e. config-files), en binnen containers zie je ook steeds vaker dat je hier environment-variabelen voor kan gebruiken.

Eén manier is om de container te bouwen met de config-files in de container zelf. Hoewel deze aanpak in veel gevallen zou werken valt het niet aan te raden. De container is namelijk niet of nauwelijks bruikbaar voor een andere omgeving of voor een andere toepassing. Een ander nadeel is dat de configuratie niet erg inzichtelijk is, zowel vanaf de command-line als via de web-interface.

Via een config-map koppel je de configuratie los van de container. Daardoor is een container voor veel meer toepassingen inzetbaar. Een ander voordeel aan een config-map is dat de configuratie makkelijk inzichtelijk is vanuit de command-line en vanuit de web-interface. Configuratie in een ConfigMap kan op 3 manieren beschikbaar gesteld worden aan containers:

  • Als environment-variables, zie onderstaand voorbeeld.
  • Als directory, hierbij zijn de keys de filenames en de values de inhoud van deze files.
  • Als file, hierbij dient een specifieke key in de ConfigMap te worden gekozen en de value van de key wordt de inhoud van de file.

Webconsole

ConfigMap is aan te maken via Resources → Config Maps en dan de knop create config map rechts bovenin.
Onderstaand voorbeeld is voor environment-variables: Dit is een config-map van een configfile (in dit geval voor nginx). De key is de filename van deze config-file en de value is de inhoud van de file.

Op dit moment is de config-map aangemaakt, maar hij is nog niet actief voor draaiende pods. Daarvoor moet hij nog worden toegekend door op Add to Application te klikken.

In het geval van environment-variables kies je natuurlijk voor Environment variables. Bij een config-file kies je voor Volume, bij 'mount path' geef je op in welke folder deze config file moet worden geplaatst binnen de pod die je hebt opgegeven.

Via de commandline

Maak een yml bestand aan, bijv. configmap.yml

Environment-variables:
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config-map
data:
  application.config: |-
    ---
    application:
    - name: frontend
      config: frontend.config
    - name: backend
      hostname: app-backend
  frontend.config: |-
    ---
    database:
      host: app-database
      user: db_user
      pass: somerandomhash
      database: db
    hostname: app.example.com
Config-files:
apiVersion: v1
kind: ConfigMap
objects:
- apiVersion: v1
  data:
    default.conf: |2-
 
      server {
        listen      8080;
        server_name localhost;
 
        access_log    /dev/stdout main;
        error_log     /dev/stderr;
 
        root /var/www/html;
 
        index index.php index.html;
 
        location ~\.php$ {
          try_files $uri =404;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
 
          fastcgi_pass voorbeeld-app-phpfpm-service:9000;
          fastcgi_index index.php;
          include fastcgi.conf;
        }
      }
metadata:
  annotations:
    description: Creates a configmap with the required NGINX configuration.

Voeg de configmap toe aan project via commandline: $ oc create -f <yml-file> -n <project>

Voeg de configmap toe aan de pods door de deployment-config aan te passen. oc edit dc/deployment-config Voeg onder de 'spec' onder 'containers':
Environment-variables:

 - envFrom:
   - configMapRef:
      name: voorbeeld-configmap


Config-files:

        volumeMounts:
        - mountPath: $folder_binnen_pod
          name: voorbeeld-configmap


Officiele documentatie: https://docs.openshift.com/container-platform/3.11/dev_guide/configmaps.html
Config-maps zijn een algemeen kubernetes concept dus kubenetes-documentatie over dit onderwerp kunnen ook van pas komen.

  • chp/concepten/configmap.txt
  • Last modified: 2020/01/20 13:13
  • (external edit)