Formation-K8S

Formation K8S avec exercices et labs

View project on GitHub

ConfigMap

Role

Un ConfigMap est une collection de données qui pourra être utilisée soit comme des variables d’environnements, soit comme des références vers des fichiers que l’on pourra fournir à des Pods. Il faut garder comme principe en tête que l’on ne doit pas mettre de données sensibles dans un configmap (un secret est plus approprié pour cela). Un configmap est lu au démarrage du pod. Une fois celui-ci démarré, un changement dans le configmap ne sera pas forcément répercuté sur le pod : cela dépendra de la configuration de kubelet.

Les données dans un configmap sont en clair (ie non encodées en base64) contrairement au secret.

Structure

simple:

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap-env
data:
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

avec des fichiers complets

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfigmap-file
data:
  game.properties: |
    enemy.types=aliens,monsters
    player.maximum-lives=13
  exemple.yaml: |
    test:
      parametre: 34
    valeur: 45

Les usages d’un configmap au sein d’un pod

On peut s’en servir pour affecter une variable d’environnement.

apiVersion: v1
kind: Pod
metadata:
    name: test
spec:
    containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env:
              - name: SPECIAL_LEVEL_KEY
                valueFrom:
                    configMapKeyRef:
                        name: myconfigmap-env
                        key: player_initial_lives
                        
    restartPolicy: Never

On peut s’en servir pour affecter un ensemble de variables d’environnements

apiVersion: v1
kind: Pod
metadata:
    name: test-volume
spec:
    containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "env" ]
          envFrom:
              - configMapRef:
                  name: myconfigmap-env
                        
    restartPolicy: Never

On peut s’en servir pour monter un repertoire avec certains fichiers de la configMap dans un pod

apiVersion: v1
kind: Pod
metadata:
  name: test-volume-file
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh","-c","cat /etc/config/exemple.yaml" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: myconfigmap-file
        items:
        - key: exemple.yaml
          path: exemple.yaml
        - key: exemple2.yaml
          path: exemple2.yaml        
  restartPolicy: Never

Attention : on a toujours dans ce cas un montage d’un repertoire complet (qui ne contient qu’un fichier)

On peut s’en servir pour monter un fichier unique de la configMap dans un pod

apiVersion: v1
kind: Pod
metadata:
  name: test-volume-file
spec:
  containers:
    - name: test-container
      image: k8s.gcr.io/busybox
      command: [ "/bin/sh","-c","cat /etc/config/exemple.yaml" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config/example.yaml     #<==== Un seul fichier sera posé dans le repertoire
        subPath: example.yaml                   #<==== Un seul fichier contenu dans la CM 
  volumes:
    - name: config-volume
      configMap:
        name: myconfigmap-file
  
  restartPolicy: Never

On peut s’en servir pour monter des fichiers dans un pod

apiVersion: v1
kind: Pod
metadata:
  name: mypod

spec:
    containers:
        - name: test-container
          image: k8s.gcr.io/busybox
          command: [ "/bin/sh", "-c", "ls /etc/foo" ]
          volumeMounts:
            - name: foo
              mountPath: "/etc/foo"
              readOnly: true
  volumes:
  - name: foo
    configMap:
      name: myconfigmap-file

Commandes utiles

Création d’un configmap à partir d’une série de clef/valeur:

kubectl create cm -n NameSpace MyCM --from-literal=test=valeur --from-literal=test2=valeur2

Création d’un configmap à partir de fichier:

kubectl create cm -n NameSpace MyCM --from-file=toto.txt

Exercices

  • créer un configmap nommé “maconfigmap” à partir avec une propriété “couleur=rouge” ainsi que des fichiers suivant

monapplication.properties

test = "345"
ville = "toulouse"

fichier.yaml

test: "345"
legume:
  couleur: "orange"
  nom: "carotte"
ville: "toulouse"

Retour, Menu, Suite