Informazioni sugli Elementi ConfigMap di Kubernetes

Completato

Nel repository dell'applicazione è presente un file di configurazione caricato nel file index.html per consentire l'aggiornamento delle variabili di ambiente senza la necessità di una compilazione completa dell'immagine.

Il file di configurazione non contiene informazioni riservate, è sufficiente caricarlo insieme al contenitore. Come è possibile montare il file nel contenitore senza dover eseguire la crittografia o la codifica?

Informazioni sugli oggetti ConfigMap

ConfigMaps è la controparte di Secrets. Sebbene i segreti forniscono un modo per archiviare e distribuire i dati sensibili, gli elementi ConfigMap sono oggetti che consentono di archiviare i dati non sensibili usando la stessa struttura chiave-valore di un segreto. L'elemento ConfigMaps permette di separare le configurazioni dalle immagini del contenitore, consentendo a tali immagini di rimanere senza stato.

Crei un elemento ConfigMap per archiviare i dati di configurazione separatamente dal codice dell'applicazione e di caricarli in modo analogo a come vengono caricati i segreti nel pod. Puoi fare riferimento solo a ConfigMap usando una variabile di ambiente o montandoli come file in un volume all'interno del contenitore.

Gli oggetti ConfigMap hanno un limite per le dimensioni dei dati: un oggetto ConfigMap può contenere al massimo 1 MiB di dati. La limitazione delle dimensioni permette di evitare l'uso di file di configurazione complessi e di grandi dimensioni suddividendo le configurazioni di grandi dimensioni in blocchi più piccoli. Con ConfigMaps sarà quindi possibile montare nei contenitori solo i file di configurazione necessari, per una maggiore granularità.

Come i segreti, gli oggetti ConfigMap sono risorse con spazio dei nomi. Puoi accedere e montare un oggetto ConfigMap solo usando i contenitori presenti nello stesso spazio dei nomi in cui è stato creato.

Gli oggetti ConfigMap vengono largamente usati anche da altri strumenti, ad esempio Helm e gli operatori di Kubernetes, per archiviare e leggere gli stati.

Aggiornamenti di ConfigMap

Tutti gli oggetti ConfigMap che sono montati come volumi in un pod vengono aggiornati automaticamente dopo la modifica del valore. Questa modifica potrebbe non verificarsi immediatamente a causa della configurazione di Kubelet, ma viene eseguita automaticamente, quindi non è necessario riavviare il pod.

Quando un oggetto ConfigMap è associato a variabili di ambiente, non viene aggiornato automaticamente. Per questi casi, è necessario riavviare il pod per rendere effettive le modifiche.

Crea e usa gli elementi ConfigMap

Puoi creare un elemento ConfigMap, usando lo stesso approccio usato con i segreti, ovvero un file YAML. La specifica di un elemento ConfigMap è la seguente:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-name
  namespace: default
data:
  key-name: "value as key"
  key.name: |
    multi line
    property, called "file-like" values

Puoi fare riferimento agli elementi ConfigMap tramite una o più chiavi nella specifica di un pod o di una distribuzione, come illustrato nel seguente esempio:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: ENVIRONMENT_VARIABLE_NAME
          valueFrom:
            configMapKeyRef:
              name: configmap-name
              key: key-name

Puoi anche montarli come file all'interno del pod usando volumi di sola lettura, come illustrato nel seguente esempio:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      volumeMounts:
      - name: volume-name
        mountPath: "/path/to/mount"
        readOnly: true
  volumes:
    - name: volume-name
      configMap:
        name: configmap-name
        items:
        - key: "key-name"
          path: "path/to/mount/the/key"

Verificare le conoscenze

1.

Perché usare gli oggetti ConfigMap?

2.

Come è possibile usare gli oggetti ConfigMap in un'applicazione?

3.

Lo spazio dei nomi è un limite per gli oggetti ConfigMap?