Så här använder du ConfigMaps för Kubernetes -konfiguration

0
62

En ConfigMap är en Kubernetes -resurs för att injicera konfiguration i dina behållare. De låter dig behålla stackens inställningar separat från dess kod. Så här arbetar du med ConfigMaps och levererar dem till dina Pods.

Vad är ConfigMaps för?

ConfigMaps är speciellt utformade för att inkapsla små mängder icke-känslig konfigurationsdata. De är en mekanism för att få godtyckliga nyckel-värdepar i dina poddar. De används vanligtvis för att lagra din databaseservers IP-adress, den utgående e-postadressen för din applikation och andra applikationsspecifika inställningar som du behöver för att kunna konfigureras utanför dina Pods.

Med ConfigMap kan du hantera dessa data i en dedikerad Kubernetes -resurs. Böcker tar emot nyckel-värdepar som miljövariabler eller filer i en monterad volym.

Vad man inte ska använda dem till?

Det finns vissa situationer där en ConfigMap inte ska användas.

ConfigMaps lagras inte säkert och deras värden har ingen kryptering. De får inte innehålla känsliga eller konfidentiella uppgifter som skulle utgöra en säkerhets- eller integritetsrisk om de läckes ut.

Annonsering

Lägg inte in lösenord, API -nycklar eller krypteringsnycklar i en ConfigMap – använd en Kubernetes Secret istället, eftersom dessa fungerar på samma sätt som ConfigMaps men med ytterligare skydd. System som behöver en databasanslutning bör placera värdnamnet i en ConfigMap och referenser i en separat hemlighet.

Individuella ConfigMaps får inte överstiga 1 MB i storlek. System som behöver fler konfigurationsnycklar kan tjäna bättre på ett alternativt tillvägagångssätt, till exempel injicering av manuellt genererade konfigurationsfiler via en volym.

Om du vill hålla fast vid ConfigMaps kan du överväga att dela din konfiguration över flera ConfigMap -resurser. Detta tillvägagångssätt bör undvika taket på 1 MB samtidigt som du kan förse alla dina poddar med den minimala uppsättning konfigurationsnycklar som behövs.

ConfigMap-värden kan antingen vara UTF-8-strängar eller binär data som kodas som en bas64-sträng. Nyckelnamn kan innehålla alfanumeriska,. (punkt), – (bindestreck) och _ (understreck) tecken. Vissa programmeringsspråk och ramar kan ha en annan konvention för konfigurationsvariabler, så se till att du använder ett format som stöds av både Kubernetes och din app.

Skapa a ConfigMap

ConfigMaps har enkla YAML -manifest. Varje ConfigMap behöver ett namn i standardformatet Kubernetes och ett datafält som innehåller dina nyckel-värdepar:

apiVersion: v1 kind: ConfigMap metadata: name: example-configmap data: database_host: & quot; 192.168.0.10 & quot; system_email: & quot; k8s@example.com"

Datafältet är för att ange nycklar med strängvärden. Du kan använda binaryData istället eller såväl som data för att lägga till base64-kodade binära värden. Nycklar måste vara unika för både data och binära data.

Annonsering

Applicera manifestet på ditt kluster med kubectl eller ditt föredragna verktyg.

Länka ConfigMaps och Pods

En ConfigMap gör inget på egen hand. Du har lagt till lite data i ditt kluster; låt oss nu länka den till en Pod:

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

EnvFrom -fältet hämtar in miljövariabler som definieras av en annan refererad resurs. I det här fallet identifierar en configMapRef den ConfigMap som skapades tidigare. Podens behållare startas med database_host och system_email miljövariabler definierade.

Selektivt att lägga till miljövariabler

envFrom är användbart när du vill konsumera varje nyckel i ConfigMap och du är säker på att det inte kommer att finnas några konflikter med din Pods andra miljövariabler. I mer kontrollerade situationer använder du en vanlig env -sektion, definierar enskilda nycklar och drar värdet för varje nyckel från ConfigMap:

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

Detta exempel visar hur en pod kan startas med bara database_host -nyckeln från ConfigMap. Nyckeln byter också namn före injektion så att podden får den som DATABASE_HOST_IP.

Använda ConfigMaps With Volumes

ConfigMaps kan monteras som filer inuti skida. Kubernetes skapar en volym, injicerar innehållet i ConfigMap som en uppsättning filer och monterar volymen på din pod.

apiVersion: v1 kind: Podmetadata: name: example-pod spec: containers:-name: example-container image: example-image: latest volumeMounts:-name: app-config mountPath: & quot;/etc/config-data & quot; readOnly: true volumes:-name: app-config configMap: name: example-configmap Annonsering

Detta Pod-manifest skapar en volym som kallas app-config. ConfigMap-fältet fyller i volymen på förhand med data i den angivna ConfigMap.

Podden monterar volymen till /etc /config-data. Dina behållare kan läsa filerna i katalogen för att komma åt dina konfigurationsvärden. Varje ConfigMap-nyckel kommer att ha sin egen fil inom monteringspunkten.

Uppdatera ConfigMap-värden

Eftersom en ConfigMap är en standard Kubernetes API-resurs, kan du kan uppdatera värden när som helst genom att ändra ditt manifest och tillämpa det igen på ditt kluster. Hur de nya värdena når dina beläggningar beror på injektionsmekanismen du använder.

Monterade volymer

ConfigMaps monterade på Pods via en volym kommer att uppdateras av Kubernetes. Ändringar i ConfigMaps kontrolleras regelbundet; när en skillnad upptäcks kommer filerna i din volym att uppdateras, så din Pod kommer att ta emot den nya informationen. Fördröjningen beror på det synkroniseringsintervall som har konfigurerats för Kubelet-instanserna på dina arbetarnoder.

Miljövariabler

Att ändra en podds miljövariabler är inte möjligt så ConfigMap -ändringar når inte befintliga poddar som refererar till nycklar via denna mekanism. Du måste byta ut dina Pods för att kunna använda den nya datan.

Nyskapade Pods kommer alltid att få aktuell ConfigMap -data, oavsett om du använder volymer eller miljövariabler. Om du behöver tvinga fram en konfigurationsuppdatering ändrar du en kommentar på din Pod så att Kubernetes återskapar den.

Immutable ConfigMaps

ConfigMaps har ett valfritt oföränderligt fält som hindrar dem från att uppdateras. När det här fältet är inställt kan du inte uppdatera ConfigMaps data eller ta bort den oföränderliga statusen.

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

Detta kan vara användbart när du är säker på att konfigurationsvärden aldrig kommer att ändras. Det förbättrar säkerheten genom att ta bort risken för oavsiktliga ändringar. Prestanda kan också förbättras eftersom Kubernetes inte längre behöver övervaka ConfigMap för att sprida eventuella värdeändringar i dina Pods.

Sammanfattning

ConfigMaps bör vara din go-to för att leverera icke-känsliga konfigurationsnycklar till dina Kubernetes Pods. De är en förstklassig API-resurs som du kan använda som miljövariabler eller monterade filer i volymer.

Lösenord och andra referenser hör hemma i Secrets. Dessa fungerar mycket på samma sätt som ConfigMaps och refereras av Pods på samma sätt. Ersätt configMapRef med secretRef för att dra en nyckel ur en namngiven hemlighet istället för en ConfigMap.