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:
- Command-line argumenten voor een container
- Omgevingsvariabelen voor een container
- Voeg een bestand toe in een alleen-lezen volume.
- 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
- 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?
- 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 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
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
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
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
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
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
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
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.