GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come utilizzare ConfigMaps per la configurazione di Kubernetes

Una ConfigMap è una risorsa Kubernetes per inserire la configurazione nei tuoi container. Ti consentono di mantenere le impostazioni del tuo stack separatamente dal suo codice. Ecco come lavorare con ConfigMaps e fornirle ai tuoi Pod.

A cosa servono le ConfigMaps?

Le ConfigMaps sono progettate specificamente per incapsulare piccole quantità di dati di configurazione non sensibili. Sono un meccanismo per ottenere coppie chiave-valore arbitrarie nei tuoi pod. Sono comunemente usati per memorizzare l'indirizzo IP del server del database, l'indirizzo e-mail in uscita per la tua applicazione e altre impostazioni specifiche dell'applicazione che devi configurare al di fuori dei tuoi Pod.

ConfigMap ti consente di gestire questi dati in una risorsa Kubernetes dedicata. I pod ricevono le coppie chiave-valore come variabili di ambiente o file in un volume montato.

Per cosa non usarli?

Ci sono alcune situazioni in cui una ConfigMap dovrebbe non essere utilizzato.

Le ConfigMaps non vengono archiviate in modo sicuro e i loro valori non sono crittografati. Non devono contenere dati sensibili o riservati che, se divulgati, potrebbero costituire un rischio per la sicurezza o la privacy.

Non inserire password, chiavi API o chiavi di crittografia in una ConfigMap:utilizza invece un segreto Kubernetes, poiché funzionano in modo simile a ConfigMaps ma con protezioni aggiuntive. I sistemi che necessitano di una connessione al database devono inserire il nome host in una ConfigMap e le credenziali in un segreto separato.

Le singole ConfigMap non possono superare 1 MB di dimensione. I sistemi che richiedono più chiavi di configurazione possono essere meglio serviti da un approccio alternativo come l'iniezione di file di configurazione generati manualmente tramite un volume.

Se vuoi rimanere con ConfigMaps, considera la possibilità di dividere la tua configurazione su più risorse ConfigMap. Questo approccio dovrebbe evitare il limite di 1 MB consentendoti di fornire a ciascuno dei tuoi Pod il set minimo di chiavi di configurazione di cui ha bisogno.

I valori di ConfigMap possono essere stringhe UTF-8 o dati binari codificati come stringa base64. I nomi delle chiavi possono contenere caratteri alfanumerici, . (punto), - (trattino) e _ caratteri (sottolineatura). Alcuni linguaggi di programmazione e framework potrebbero avere una convenzione diversa per le variabili di configurazione, quindi assicurati di utilizzare un formato supportato sia da Kubernetes che dalla tua app.

Creazione di una ConfigMap

ConfigMaps hanno manifesti YAML semplici. Ogni ConfigMap necessita di un name nel formato Kubernetes standard e un data campo contenente le tue coppie chiave-valore:

apiVersion: v1
kind: ConfigMap
metadata:
  name: example-configmap
data:
  database_host: "192.168.0.10"
  system_email: "[email protected]"

I data il campo serve per specificare le chiavi con valori di stringa. Puoi usare binaryData invece o anche data per aggiungere valori binari con codifica base64. Le chiavi devono essere univoche in entrambi i data e binaryData .

Applica il manifest al tuo cluster utilizzando kubectl o il tuo strumento preferito.

Collegamento di ConfigMaps e Pod

Un ConfigMap non fa nulla da solo. Hai aggiunto alcuni dati al tuo cluster; ora colleghiamolo a un Pod:

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      envFrom:
        - configMapRef:
            name: example-configmap

Il envFrom campo richiama le variabili di ambiente definite da un'altra risorsa referenziata. In questo caso, un configMapRef identifica la ConfigMap creata in precedenza. I contenitori del Pod verranno avviati con database_host e system_email variabili di ambiente definite.

Aggiunta selettivamente di variabili d'ambiente

envFrom è utile quando vuoi consumare tutte le chiavi in ​​ConfigMap e sei certo che non ci saranno conflitti con le altre variabili di ambiente del tuo Pod. In situazioni più controllate, usa un normale env sezione, definire le singole chiavi ed estrarre il valore di ciascuna chiave da ConfigMap:

env:
  - name: DATABASE_HOST_IP
    valueFrom:
      configMapKeyRef:
        name: example-configmap
        key: database_host

Questo esempio mostra come avviare un Pod solo con il database_host chiave da ConfigMap. La chiave viene anche rinominata prima dell'iniezione, quindi il Pod la riceverà come DATABASE_HOST_IP .

Utilizzo di ConfigMaps con i volumi

ConfigMaps può essere montato come file all'interno dei Pod. Kubernetes crea un volume, inserisce il contenuto di ConfigMap come un insieme di file e monta il volume sul tuo Pod.

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
    - name: example-container
      image: example-image:latest
      volumeMounts:
        - name: app-config
          mountPath: "/etc/config-data"
          readOnly: true
  volumes:
    - name: app-config
      configMap:
        name: example-configmap

Questo manifest Pod crea un volume chiamato app-config . La configMap campo precompilerà il volume utilizzando i dati nella ConfigMap specificata.

Il Pod monta il volume su /etc/config-data . I tuoi contenitori possono leggere i file all'interno della directory per accedere ai tuoi valori di configurazione. Ogni chiave ConfigMap avrà il proprio file all'interno del punto di montaggio.

Aggiornamento dei valori di ConfigMap

Poiché ConfigMap è una risorsa API Kubernetes standard, puoi aggiornare i valori in qualsiasi momento modificando il tuo manifest e riapplicandolo al tuo cluster. Il modo in cui i nuovi valori raggiungono i tuoi Pod dipende dal meccanismo di iniezione che stai utilizzando.

Volumi montati

Le ConfigMaps montate nei Pod tramite un volume verranno aggiornate da Kubernetes. Le modifiche a ConfigMaps vengono verificate periodicamente; quando viene rilevata una differenza, i file nel tuo volume verranno aggiornati, quindi il tuo Pod riceverà i nuovi dati. Il ritardo dipende dall'intervallo di sincronizzazione configurato per le istanze Kubelet sui tuoi nodi di lavoro.

Variabili d'ambiente

Non è possibile modificare le variabili di ambiente di un pod, quindi le modifiche a ConfigMap non raggiungeranno i pod esistenti che fanno riferimento a chiavi tramite questo meccanismo. Devi sostituire i tuoi Pod per utilizzare i nuovi dati.

I Pod appena creati riceveranno sempre i dati ConfigMap correnti, indipendentemente dal fatto che tu stia utilizzando volumi o variabili di ambiente. Se devi forzare un aggiornamento della configurazione, modifica un'annotazione sul tuo Pod in modo che Kubernetes la ricrei.

Mappe di configurazione immutabili

ConfigMaps ha un immutable opzionale campo che ne impedisce l'aggiornamento. Quando questo campo è impostato, non puoi aggiornare i dati di ConfigMap o rimuovere lo stato immutabile.

apiVersion: v1
kind: ConfigMap
metadata:
  name: immutable-configmap
data:
  foo: bar
immutable: true

Questo può essere utile quando sei certo che i valori di configurazione non cambieranno mai. Migliora la sicurezza eliminando la possibilità di modifiche accidentali. Le prestazioni possono anche essere migliorate poiché Kubernetes non ha più bisogno di monitorare ConfigMap per propagare eventuali modifiche ai valori nei tuoi pod.

Riepilogo

ConfigMaps dovrebbe essere il tuo punto di riferimento per fornire chiavi di configurazione non sensibili ai tuoi pod Kubernetes. Sono una risorsa API di prima classe che puoi utilizzare come variabili di ambiente o file montati in volumi.

Le password e le altre credenziali appartengono a Secrets. Questi funzionano in modo molto simile a ConfigMaps e sono referenziati dai Pod allo stesso modo. Sostituisci configMapRef con secretRef per estrarre una chiave da un Secret denominato invece di una ConfigMap.


Docker
  1. Come utilizzo Ansible e anacron per l'automazione

  2. Come utilizzare Advanced rsync per backup Linux di grandi dimensioni

  3. Come utilizzare systemd-nspawn per il ripristino del sistema Linux

  4. Come utilizzare il provider Kubernetes Terraform

  5. Come utilizzare Lightdm per le sessioni definite dall'utente?

Come utilizzare il comando SCP per il trasferimento di file

Come controllare le porte di ascolto in Linux (porte in uso)

Come utilizzare Avidemux per l'editing video

Come installare e utilizzare Logwatch su Ubuntu 20.04

Come utilizzare il Bluetooth su Ubuntu per il trasferimento di file

Come utilizzare Docker Salva immagine ed esporta per la condivisione