Skip to content

Latest commit

 

History

History
152 lines (120 loc) · 4.92 KB

configmaps.md

File metadata and controls

152 lines (120 loc) · 4.92 KB

ConfigMaps

ConfigMaps werden dazu verwendet, die Konfiguration für eine Applikation vom Image zu trennen und bei Laufzeit dem Pod zur Verfügung zu stellen, ähnlich dem Setzen von Umgebungsvariablen. Dies erlaubt es, Applikationen innerhalb von Containern möglichst portabel zu halten.

In diesem Lab lernen Sie, wie man ConfigMaps erstellt und entsprechend verwendet.

ConfigMap in OpenShift Projekt anlegen

Um eine ConfigMap in einem Projekt anzulegen kann folgender Befehl verwendet werden:

oc create configmap [Name der ConfigMap] [Options]

Java Properties Files als ConfigMap

Ein klassisches Beispiel für ConfigMaps sind Property Files bei Java Applikationen, welche in erster Linie nicht via Umgebungsvariablen konfiguriert werden können.

Für dieses Beispiel verwenden wir das Spring Boot Beispiel aus Lab 4, [USERNAME]-dockerimage.

Tippoc project [USERNAME]-dockerimage

Mit dem folgenden Befehl legen wir nun die erste ConfigMap auf Basis eines lokalen Files an:

oc create configmap javaconfiguration --from-file=additional-labs/resources/properties.properties

Mit folgendem Befehl kann nun verifiziert werden, ob die ConfigMap erfolgreich angelegt wurde:

oc get configmaps
NAME                DATA   AGE
javaconfiguration   1      7s

Wir können uns auch den Inhalt der ConfigMap ansehen:

oc get configmaps javaconfiguration -o json

ConfigMap in Pod zur Verfügung stellen

Als nächstes wollen wir die ConfigMap im Pod verfügbar machen.

Grundsätzlich gibt es dafür die folgenden Möglichkeiten:

  • ConfigMap Properties als Umgebungsvariablen im Deployment
  • Commandline Arguments via Umgebungsvariablen
  • als Volumes in den Container gemountet

Im Beispiel hier wollen wir, dass die ConfigMap als File auf einem Volume liegt.

Hierfür müssen wir entweder den Pod oder in unserem Fall die DeploymentConfig mit oc edit dc example-spring-boot bearbeiten.

Zu beachten gilt es dabei den volumeMounts- (spec.template.spec.containers.volumeMounts: wie wird das Volume in den Container gemountet) sowie den volumes-Teil (spec.template.spec.volumes: welches Volume in unserem Fall die ConfigMap wird in den Container gemountet).

apiVersion: v1
kind: DeploymentConfig
metadata:
  annotations:
    openshift.io/generated-by: OpenShiftNewApp
  creationTimestamp: 2018-12-05T08:24:06Z
  generation: 2
  labels:
    app: example-spring-boot
  name: example-spring-boot
  namespace: [namespace]
  resourceVersion: "149323448"
  selfLink: /oapi/v1/namespaces/[namespace]/deploymentconfigs/example-spring-boot
  uid: 21f6578b-f867-11e8-b72f-001a4a026f33
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    app: example-spring-boot
    deploymentconfig: example-spring-boot
  strategy:
    activeDeadlineSeconds: 21600
    resources: {}
    rollingParams:
      intervalSeconds: 1
      maxSurge: 25%
      maxUnavailable: 25%
      timeoutSeconds: 600
      updatePeriodSeconds: 1
    type: Rolling
  template:
    metadata:
      annotations:
        openshift.io/generated-by: OpenShiftNewApp
      creationTimestamp: null
      labels:
        app: example-spring-boot
        deploymentconfig: example-spring-boot
    spec:
      containers:
      - env:
        - name: SPRING_DATASOURCE_USERNAME
          value: appuio
        - name: SPRING_DATASOURCE_PASSWORD
          value: appuio
        - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME
          value: com.mysql.cj.jdbc.Driver
        - name: SPRING_DATASOURCE_URL
          value: jdbc:mysql://mysql/appuio?autoReconnect=true
        image: appuio/example-spring-boot
        imagePullPolicy: Always
        name: example-spring-boot
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /etc/config
          name: config-volume
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - configMap:
          defaultMode: 420
          name: javaconfiguration
        name: config-volume

Anschliessend kann im Container im File /etc/config/properties.properties auf die Werte zugegriffen werden.

oc exec [POD] -- cat /etc/config/properties.properties
key=appuio
key2=openshift

Diese Properties Files können nun so von der Java Applikation im Container gelesen und verwendet werden. Das Image bleibt dabei umgebungsneutral.

Aufgabe: LAB10.4.1 ConfigMap Data Sources

Erstellen Sie jeweils eine ConfigMap und verwenden Sie dafür die verschiedenen Arten von Data Sources.

Machen Sie die Werte innerhalb von Pods auf die unterschiedlichen Arten verfügbar.


Ende Lab ConfigMaps

← zurück zur Übersicht