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:
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.
Maak een yml bestand aan, bijv. configmap.yml
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
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.