2.5. Création et utilisation de cartes de configuration


Les sections suivantes définissent les cartes de configuration et comment les créer et les utiliser.

2.5.1. Comprendre les cartes de configuration

De nombreuses applications nécessitent une configuration en utilisant une combinaison de fichiers de configuration, d’arguments de ligne de commande et de variables d’environnement. Dans Red Hat OpenShift Service sur AWS, ces artefacts de configuration sont découplés du contenu de l’image pour garder les applications conteneurisées portables.

L’objet ConfigMap fournit des mécanismes pour injecter des conteneurs avec des données de configuration tout en gardant les conteneurs agnostiques de Red Hat OpenShift Service sur AWS. La carte de configuration peut être utilisée pour stocker des informations fines telles que des propriétés individuelles ou des informations grossières comme des fichiers de configuration entiers ou des blobs JSON.

L’objet ConfigMap contient des paires clés-valeur de données de configuration qui peuvent être consommées dans des pods ou utilisées pour stocker des données de configuration pour des composants système tels que des contrôleurs. À titre d’exemple:

Définition d’objet de ConfigMap

kind: ConfigMap
apiVersion: v1
metadata:
  creationTimestamp: 2016-02-18T19:14:38Z
  name: example-config
  namespace: my-namespace
data: 
1

  example.property.1: hello
  example.property.2: world
  example.property.file: |-
    property.1=value-1
    property.2=value-2
    property.3=value-3
binaryData:
  bar: L3Jvb3QvMTAw 
2
Copy to Clipboard Toggle word wrap

1 1
Contient les données de configuration.
2
Indique un fichier qui contient des données non-UTF8, par exemple un fichier binaire Java keystore. Entrez les données du fichier dans la base 64.
Note

Lorsque vous créez une carte de configuration à partir d’un fichier binaire, vous pouvez utiliser le champ de données binaires, comme une image.

Les données de configuration peuvent être consommées en pods de diverses manières. La carte de configuration peut être utilisée pour:

  • Peupler les valeurs variables d’environnement dans les conteneurs
  • Définir les arguments de ligne de commande dans un conteneur
  • Populer des fichiers de configuration dans un volume

Les utilisateurs et les composants système peuvent stocker les données de configuration dans une carte de configuration.

La carte de configuration est similaire à un secret, mais conçue pour prendre en charge plus facilement le travail avec des chaînes qui ne contiennent pas d’informations sensibles.

Configuration des restrictions de carte

Il faut créer une carte de configuration avant que son contenu puisse être consommé en pods.

Les contrôleurs peuvent être écrits pour tolérer les données de configuration manquantes. Consultez les composants individuels configurés en utilisant des cartes de configuration au cas par cas.

Les objets ConfigMap résident dans un projet.

Ils ne peuvent être référencés que par des pods dans le même projet.

Le Kubelet ne prend en charge que l’utilisation d’une carte de configuration pour les pods qu’il obtient du serveur API.

Cela inclut tous les pods créés en utilisant le CLI, ou indirectement à partir d’un contrôleur de réplication. Il n’inclut pas les pods créés en utilisant le service Red Hat OpenShift sur le drapeau --manifest-url d’AWS node, son drapeau --config ou son API REST parce que ce ne sont pas des moyens courants de créer des pods.

Il est possible de créer une carte de configuration dans le service Red Hat OpenShift sur la console web AWS.

Procédure

  • Créer une carte de configuration en tant qu’administrateur de cluster:

    1. Dans la perspective Administrateur, sélectionnez Charges de travail Config Maps.
    2. En haut à droite de la page, sélectionnez Créer une carte de configuration.
    3. Entrez le contenu de votre carte de configuration.
    4. Choisissez Créer.
  • Créer une carte de configuration en tant que développeur:

    1. Dans la perspective Développeur, sélectionnez Config Maps.
    2. En haut à droite de la page, sélectionnez Créer une carte de configuration.
    3. Entrez le contenu de votre carte de configuration.
    4. Choisissez Créer.

La commande suivante permet de créer une carte de configuration à partir d’annuaires, de fichiers spécifiques ou de valeurs littérales.

Procédure

  • Créer une carte de configuration:

    $ oc create configmap <configmap_name> [options]
    Copy to Clipboard Toggle word wrap

Il est possible de créer une carte de configuration à partir d’un répertoire à l’aide du drapeau --from-file. Cette méthode vous permet d’utiliser plusieurs fichiers dans un répertoire pour créer une carte de configuration.

Chaque fichier dans le répertoire est utilisé pour remplir une clé dans la carte de configuration, où le nom de la clé est le nom du fichier, et la valeur de la clé est le contenu du fichier.

À titre d’exemple, la commande suivante crée une carte de configuration avec le contenu du répertoire example-files:

$ oc create configmap game-config --from-file=example-files/
Copy to Clipboard Toggle word wrap

Affichez les clés dans la carte de configuration:

$ oc describe configmaps game-config
Copy to Clipboard Toggle word wrap

Exemple de sortie

Name:           game-config
Namespace:      default
Labels:         <none>
Annotations:    <none>

Data

game.properties:        158 bytes
ui.properties:          83 bytes
Copy to Clipboard Toggle word wrap

Les deux touches de la carte sont créées à partir des noms de fichiers dans le répertoire spécifié dans la commande. Le contenu de ces touches peut être grand, de sorte que la sortie d’oc décrit uniquement les noms des clés et leurs tailles.

Conditions préalables

  • Il faut avoir un répertoire avec des fichiers contenant les données avec lesquelles vous souhaitez remplir une carte de configuration.

    La procédure suivante utilise ces exemples de fichiers: game.properties et ui.properties:

    $ cat example-files/game.properties
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    enemies=aliens
    lives=3
    enemies.cheat=true
    enemies.cheat.level=noGoodRotten
    secret.code.passphrase=UUDDLRLRBABAS
    secret.code.allowed=true
    secret.code.lives=30
    Copy to Clipboard Toggle word wrap

    $ cat example-files/ui.properties
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    color.good=purple
    color.bad=yellow
    allow.textmode=true
    how.nice.to.look=fairlyNice
    Copy to Clipboard Toggle word wrap

Procédure

  • Créer une carte de configuration contenant le contenu de chaque fichier dans ce répertoire en entrant la commande suivante:

    $ oc create configmap game-config \
        --from-file=example-files/
    Copy to Clipboard Toggle word wrap

La vérification

  • Entrez la commande oc get pour l’objet avec l’option -o pour voir les valeurs des touches:

    $ oc get configmaps game-config -o yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    apiVersion: v1
    data:
      game.properties: |-
        enemies=aliens
        lives=3
        enemies.cheat=true
        enemies.cheat.level=noGoodRotten
        secret.code.passphrase=UUDDLRLRBABAS
        secret.code.allowed=true
        secret.code.lives=30
      ui.properties: |
        color.good=purple
        color.bad=yellow
        allow.textmode=true
        how.nice.to.look=fairlyNice
    kind: ConfigMap
    metadata:
      creationTimestamp: 2016-02-18T18:34:05Z
      name: game-config
      namespace: default
      resourceVersion: "407"
      selflink: /api/v1/namespaces/default/configmaps/game-config
      uid: 30944725-d66e-11e5-8cd0-68f728db1985
    Copy to Clipboard Toggle word wrap

Il est possible de créer une carte de configuration à partir d’un fichier à l’aide du drapeau --from-file. L’option --from-file peut être transmise plusieurs fois au CLI.

Il est également possible de spécifier la clé à définir dans une carte de configuration pour le contenu importé à partir d’un fichier en passant une expression key=value à l’option --from-file. À titre d’exemple:

$ oc create configmap game-config-3 --from-file=game-special-key=example-files/game.properties
Copy to Clipboard Toggle word wrap
Note

Lorsque vous créez une carte de configuration à partir d’un fichier, vous pouvez inclure des fichiers contenant des données non-UTF8 qui sont placées dans ce champ sans corrompre les données non-UTF8. Le service Red Hat OpenShift sur AWS détecte les fichiers binaires et encode de manière transparente le fichier en tant que MIME. Dans le serveur, la charge utile MIME est décodée et stockée sans corrompre les données.

Conditions préalables

  • Il faut avoir un répertoire avec des fichiers contenant les données avec lesquelles vous souhaitez remplir une carte de configuration.

    La procédure suivante utilise ces exemples de fichiers: game.properties et ui.properties:

    $ cat example-files/game.properties
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    enemies=aliens
    lives=3
    enemies.cheat=true
    enemies.cheat.level=noGoodRotten
    secret.code.passphrase=UUDDLRLRBABAS
    secret.code.allowed=true
    secret.code.lives=30
    Copy to Clipboard Toggle word wrap

    $ cat example-files/ui.properties
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    color.good=purple
    color.bad=yellow
    allow.textmode=true
    how.nice.to.look=fairlyNice
    Copy to Clipboard Toggle word wrap

Procédure

  • Créer une carte de configuration en spécifiant un fichier spécifique:

    $ oc create configmap game-config-2 \
        --from-file=example-files/game.properties \
        --from-file=example-files/ui.properties
    Copy to Clipboard Toggle word wrap
  • Créer une carte de configuration en spécifiant une paire clé-valeur:

    $ oc create configmap game-config-3 \
        --from-file=game-special-key=example-files/game.properties
    Copy to Clipboard Toggle word wrap

La vérification

  • Entrez la commande oc get pour l’objet avec l’option -o pour voir les valeurs des touches à partir du fichier:

    $ oc get configmaps game-config-2 -o yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    apiVersion: v1
    data:
      game.properties: |-
        enemies=aliens
        lives=3
        enemies.cheat=true
        enemies.cheat.level=noGoodRotten
        secret.code.passphrase=UUDDLRLRBABAS
        secret.code.allowed=true
        secret.code.lives=30
      ui.properties: |
        color.good=purple
        color.bad=yellow
        allow.textmode=true
        how.nice.to.look=fairlyNice
    kind: ConfigMap
    metadata:
      creationTimestamp: 2016-02-18T18:52:05Z
      name: game-config-2
      namespace: default
      resourceVersion: "516"
      selflink: /api/v1/namespaces/default/configmaps/game-config-2
      uid: b4952dc3-d670-11e5-8cd0-68f728db1985
    Copy to Clipboard Toggle word wrap

  • Entrez la commande oc get pour l’objet avec l’option -o pour voir les valeurs des touches à partir de la paire clé-valeur:

    $ oc get configmaps game-config-3 -o yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    apiVersion: v1
    data:
      game-special-key: |- 
    1
    
        enemies=aliens
        lives=3
        enemies.cheat=true
        enemies.cheat.level=noGoodRotten
        secret.code.passphrase=UUDDLRLRBABAS
        secret.code.allowed=true
        secret.code.lives=30
    kind: ConfigMap
    metadata:
      creationTimestamp: 2016-02-18T18:54:22Z
      name: game-config-3
      namespace: default
      resourceVersion: "530"
      selflink: /api/v1/namespaces/default/configmaps/game-config-3
      uid: 05f8da22-d671-11e5-8cd0-68f728db1985
    Copy to Clipboard Toggle word wrap

    1
    C’est la clé que vous avez définie à l’étape précédente.

Il est possible de fournir des valeurs littérales pour une carte de configuration.

L’option --from-littérale prend une syntaxe key=valeur, qui permet de fournir des valeurs littérales directement sur la ligne de commande.

Procédure

  • Créer une carte de configuration en spécifiant une valeur littérale:

    $ oc create configmap special-config \
        --from-literal=special.how=very \
        --from-literal=special.type=charm
    Copy to Clipboard Toggle word wrap

La vérification

  • Entrez la commande oc get pour l’objet avec l’option -o pour voir les valeurs des touches:

    $ oc get configmaps special-config -o yaml
    Copy to Clipboard Toggle word wrap

    Exemple de sortie

    apiVersion: v1
    data:
      special.how: very
      special.type: charm
    kind: ConfigMap
    metadata:
      creationTimestamp: 2016-02-18T19:14:38Z
      name: special-config
      namespace: default
      resourceVersion: "651"
      selflink: /api/v1/namespaces/default/configmaps/special-config
      uid: dadce046-d673-11e5-8cd0-68f728db1985
    Copy to Clipboard Toggle word wrap

Les sections suivantes décrivent certains cas d’utilisation lors de la consommation d’objets ConfigMap dans des pods.

Il est possible d’utiliser des cartes de configuration pour remplir des variables d’environnement individuelles dans des conteneurs ou pour remplir des variables d’environnement dans des conteneurs à partir de toutes les clés qui forment des noms de variables d’environnement valides.

À titre d’exemple, considérez la carte de configuration suivante:

ConfigMap avec deux variables d’environnement

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config 
1

  namespace: default 
2

data:
  special.how: very 
3

  special.type: charm 
4
Copy to Clipboard Toggle word wrap

1
Le nom de la carte de configuration.
2
Le projet dans lequel réside la carte de configuration. Les cartes de configuration ne peuvent être référencées que par des pods dans le même projet.
3 4
Les variables d’environnement à injecter.

ConfigMap avec une variable d’environnement

apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config 
1

  namespace: default
data:
  log_level: INFO 
2
Copy to Clipboard Toggle word wrap

1
Le nom de la carte de configuration.
2
Environnement variable à injecter.

Procédure

  • Il est possible de consommer les clés de ce ConfigMap dans un pod à l’aide des sections configMapKeyRef.

    Exemple de spécification de Pod configurée pour injecter des variables d’environnement spécifiques

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "env" ]
          env: 
    1
    
            - name: SPECIAL_LEVEL_KEY 
    2
    
              valueFrom:
                configMapKeyRef:
                  name: special-config 
    3
    
                  key: special.how 
    4
    
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config 
    5
    
                  key: special.type 
    6
    
                  optional: true 
    7
    
          envFrom: 
    8
    
            - configMapRef:
                name: env-config 
    9
    
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never
    Copy to Clipboard Toggle word wrap

    1
    Il permet d’extraire les variables d’environnement spécifiées à partir d’un ConfigMap.
    2
    Le nom d’une variable d’environnement de pod dans laquelle vous injectez la valeur d’une clé.
    3 5
    Le nom du ConfigMap pour tirer des variables d’environnement spécifiques.
    4 6
    Environnement variable à tirer du ConfigMap.
    7
    Rend l’environnement variable optionnel. En option, le pod sera démarré même si le ConfigMap spécifié et les clés n’existent pas.
    8
    Il permet d’extraire toutes les variables d’environnement d’un ConfigMap.
    9
    Le nom du ConfigMap pour tirer toutes les variables d’environnement.

    Lorsque ce pod est exécuté, les logs de pod incluront la sortie suivante:

    SPECIAL_LEVEL_KEY=very
    log_level=INFO
    Copy to Clipboard Toggle word wrap
Note

Le code SPECIAL_TYPE_KEY=charm n’est pas listé dans la sortie de l’exemple car optionnel: true est défini.

Il est possible d’utiliser une carte de configuration pour définir la valeur des commandes ou des arguments dans un conteneur à l’aide de la syntaxe de substitution de Kubernetes $(VAR_NAME).

À titre d’exemple, considérez la carte de configuration suivante:

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
Copy to Clipboard Toggle word wrap

Procédure

  • Afin d’injecter des valeurs dans une commande dans un conteneur, vous devez consommer les clés que vous souhaitez utiliser comme variables d’environnement. Ensuite, vous pouvez vous référer à eux dans la commande d’un conteneur en utilisant la syntaxe $(VAR_NAME).

    Exemple de spécification de la gousse configurée pour injecter des variables d’environnement spécifiques

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] 
    1
    
          env:
            - name: SPECIAL_LEVEL_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.how
            - name: SPECIAL_TYPE_KEY
              valueFrom:
                configMapKeyRef:
                  name: special-config
                  key: special.type
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      restartPolicy: Never
    Copy to Clipboard Toggle word wrap

    1
    Injectez les valeurs dans une commande dans un conteneur en utilisant les clés que vous souhaitez utiliser comme variables d’environnement.

    Lorsque ce pod est exécuté, la sortie de la commande écho s’exécute dans le conteneur test-conteneur comme suit:

    very charm
    Copy to Clipboard Toggle word wrap

Il est possible d’injecter du contenu dans un volume en utilisant des cartes de configuration.

Exemple de ressource personnalisée ConfigMap (CR)

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
  special.type: charm
Copy to Clipboard Toggle word wrap

Procédure

Il existe plusieurs options différentes pour injecter du contenu dans un volume en utilisant des cartes de configuration.

  • La façon la plus basique d’injecter du contenu dans un volume en utilisant une carte de configuration est de remplir le volume avec des fichiers où la clé est le nom du fichier et le contenu du fichier est la valeur de la clé:

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/special.how" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config 
    1
    
      restartPolicy: Never
    Copy to Clipboard Toggle word wrap
    1
    Fichier contenant la clé.

    Lorsque ce pod est exécuté, la sortie de la commande chat sera:

    very
    Copy to Clipboard Toggle word wrap
  • Il est également possible de contrôler les chemins dans le volume où sont projetées les touches cartographiques de configuration:

    apiVersion: v1
    kind: Pod
    metadata:
      name: dapi-test-pod
    spec:
      securityContext:
        runAsNonRoot: true
        seccompProfile:
          type: RuntimeDefault
      containers:
        - name: test-container
          image: gcr.io/google_containers/busybox
          command: [ "/bin/sh", "-c", "cat", "/etc/config/path/to/special-key" ]
          volumeMounts:
          - name: config-volume
            mountPath: /etc/config
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop: [ALL]
      volumes:
        - name: config-volume
          configMap:
            name: special-config
            items:
            - key: special.how
              path: path/to/special-key 
    1
    
      restartPolicy: Never
    Copy to Clipboard Toggle word wrap
    1
    Chemin vers la configuration de la clé map.

    Lorsque ce pod est exécuté, la sortie de la commande chat sera:

    very
    Copy to Clipboard Toggle word wrap
Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat