Configmaps in Kubernetes

Een ConfigMap wordt gebruikt om niet-vertrouwelijke gegevens op te slaan. De gegevens staan in sleutel-waarde paren. Pods kunnen ConfigMaps consumeren als command-line argumenten, omgevingsvariabelen of als configuratiebestanden in een volume.

Met behulp van een ConfigMap kunnen we omgevingsspecifieke configuratie loskoppelen van de container images. Dit kan ons helpen bij het maken van onze portable toepassingen. ConfigMap biedt geen versleuteling, dus het is altijd aan te raden geen vertrouwelijke informatie in de Configmap op te slaan. In plaats van config te gebruiken, kunnen secretes gebruikt worden om vertrouwelijke informatie of beveiligingssleutels of wachtwoorden op te slaan.

Er zijn de volgende verschillende manieren waarop ConfigMap gegevens binnen een Pod gebruikt kunnen worden:

  1. Command-line argumenten voor een container
  2. Omgevingsvariabelen voor een container
  3. Voeg een bestand toe in een alleen-lezen volume.
  4. Schrijf code om binnen de Pod te draaien die de Kubernetes API gebruikt om een ConfigMap te lezen.

Om meer over Configmap te weten te komen, bezoek je Kubernetes’ officiĆ«le pagina hier.

In dit artikel zullen we twee voorbeelden zien om gegevens uit configmaps te benaderen. In het ene voorbeeld zullen we config maps gebruiken als omgevingsvariabelen in het pod commando, en in het andere zullen we een volume vullen met gegevens die in een ConfigMap zijn opgeslagen.

Vereisten

  1. Kubernetes Cluster met minstens 1 worker node.
    Als je wilt leren hoe je een Kubernetes Cluster maakt, klik danhier. Deze gids helpt je een Kubernetes cluster te maken met 1 Master en 2 Nodes op AWS Ubuntu 18.04 EC2 Instances.

Wat zullen we doen?

  1. Maak een Configmap en krijg toegang tot de gegevens ervan

Maak een Configmap en krijg toegang tot de gegevens ervan.

Maak een bestand met de volgende config-map definitie.

vim my-configmap-demo1.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap-demo1
data:
  variable_one: one
  variable_two: two

configmap-definitie

Configmap kun je aanmaken met het volgende commando.

kubectl create -f my-configmap-demo1.yaml

Verkrijg de gegevens van de config-map die we maakten.

kubectl get configmaps
kubectl describe configmaps my-configmap-demo1

create-configmap

In de bovenstaande schermafbeelding zie je dat we onze gegevens “variable_one” en “variable_two” beschikbaar hebben in de config map die we maakten.

Nu kan deze config map in de Pod benaderd worden.

Om configmap gegevens als omgevingsvariabelen in pod commando’s te benaderen, maken we een pod definitie bestand met de volgende inhoud.

vim my-pod-with-configmaps-as-environment-variables.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-configmap-demo
spec:
  containers:
    - name: my-container-configmap-demo
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "echo $(variable_one_env) $(variable_two_env)" ]
      env:
        - name: variable_one_env
          valueFrom:
            configMapKeyRef:
              name: my-configmap-demo1
              key: variable_one
        - name: variable_two_env
          valueFrom:
            configMapKeyRef:
              name: my-configmap-demo1
              key: variable_two
  restartPolicy: Never

pod-definitie-te-gebruiken-configmap-als-omgeving-variabelen

Nu zijn we klaar om een pod te maken die gegevens uit configmap als omgevingsvariabelen kan benaderen.

kubectl get podss
kubectl create -f my-pod-with-configmaps-as-environment-variables.yml
kubectl get pod

create-pod-to-use-configmap-as-environment-variables

Omdat de pod zijn uitvoering met succes heeft voltooid en bestaat omdat er geen proces is dat de pods in leven kan houden, kunnen we zijn logs controleren om te zien of configmap in de pod beschikbaar was of niet. Om dit te controleren hebben we in de pod het echo commando gebruikt dat de waarden van de variabelen afdrukt.

kubectl get pods
kubectl logs my-pod-configmap-demo

check-pod-logs-to-see-configmap

In de bovenstaande schermafbeelding is te zien dat de configmap gegevens in de pod toegankelijk waren en dat hij met echo commando waarden heeft afgedrukt als “one” en “two”.

Configmap gegevens zijn ook als bestanden in volumes beschikbaar.

Om configmap gegevens via volumes te benaderen, maak je een pod definitie met de volgende inhoud.

vim my-pod-with-configmaps-added-to-volume.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-configmap-demo2
spec:
  containers:
    - name: my-container-configmap-demo2
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh", "-c", "ls /etc/myconfig/" ]
      volumeMounts:
      - name: my-config-volume
        mountPath: /etc/myconfig
  volumes:
    - name: my-config-volume
      configMap:
        name: my-configmap-demo1
  restartPolicy: Never

pod-definitie-naar-mount-configmap-als-een-volume

Laten we nu een pod maken die configmap gegevens beschikbaar kan hebben als bestanden uit het “my-config-volume” volume. Deze configmap gegevens zullen beschikbaar zijn onder “/etc/myconfig” directory in de pod.

kubectl get pods
kubectl create -f my-pod-with-configmaps-added-to-volume.yml
kubectl get pods

create-pod-to-use-configmap-from-volume-as-files

Ook deze keer is de pod met succes verlaten omdat er geen proces is om de pod in leven te houden.

Maar, we hebben “ls /etc/myconfig” commando gebruikt dat de inhoud van “/etc/myconfig” directory opsomt.

kubectl get pods

In de logs kunnen we zien of configmap gegevens beschikbaar waren als bestanden onder “/etc/myconfig”

kubectl logs my-pod-configmap-demo2

check-pod-logs-to-see-cofigmap-als-bestanden

In de bovenstaande schermafbeelding zie je dat de configmap gegevens in de pod beschikbaar waren als “variable_one” en “variable_two” bestanden.

Conclusie

In dit artikel leerden we om een configmap te maken en die op 2 manieren te benaderen. We zagen de stappen om de configmap gegevens te benaderen als omgevingsvariabelen aan het pod commando en bestanden in volume in de pod.