GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak používat ConfigMaps pro konfiguraci Kubernetes

ConfigMap je zdroj Kubernetes pro vkládání konfigurace do vašich kontejnerů. Umožňují vám udržovat nastavení zásobníku odděleně od jeho kódu. Zde je návod, jak pracovat s ConfigMaps a dodávat je do svých modulů.

K čemu jsou ConfigMaps?

ConfigMaps jsou speciálně navrženy pro zapouzdření malého množství necitlivých konfiguračních dat. Jde o mechanismus pro získávání libovolných párů klíč–hodnota do vašich modulů. Běžně se používají k ukládání IP adresy vašeho databázového serveru, odchozí e-mailové adresy pro vaši aplikaci a dalších nastavení specifických pro aplikaci, která je třeba konfigurovat mimo vaše moduly.

ConfigMap vám umožňuje spravovat tato data ve vyhrazeném zdroji Kubernetes. Pody obdrží páry klíč–hodnota jako proměnné prostředí nebo soubory v připojeném svazku.

Na co je nepoužívat?

Existují situace, kdy by ConfigMap neměla být použit.

ConfigMaps nejsou uloženy bezpečně a jejich hodnoty nemají žádné šifrování. Nesmí obsahovat žádná citlivá nebo důvěrná data, která by v případě úniku představovala bezpečnostní riziko nebo riziko pro soukromí.

Do ConfigMap nevkládejte hesla, API klíče ani šifrovací klíče – místo toho použijte Kubernetes Secret, protože fungují podobně jako ConfigMaps, ale s dodatečnou ochranou. Systémy, které potřebují připojení k databázi, by měly umístit název hostitele do mapy ConfigMap a přihlašovací údaje do samostatného tajného klíče.

Velikost jednotlivých ConfigMaps nesmí přesáhnout 1 MB. Systémům, které potřebují více konfiguračních klíčů, může lépe posloužit alternativní přístup, jako je vkládání ručně generovaných konfiguračních souborů prostřednictvím svazku.

Pokud chcete zůstat u ConfigMaps, zvažte rozdělení konfigurace mezi více zdrojů ConfigMap. Tento přístup by se měl vyhnout omezení 1 MB a zároveň vám umožnit dodat každému z vašich modulů minimální sadu konfiguračních klíčů, kterou potřebuje.

Hodnoty ConfigMap mohou být buď řetězce UTF-8, nebo binární data zakódovaná jako řetězec base64. Názvy klíčů mohou obsahovat alfanumerické . (tečka), - (pomlčka) a _ (podtržítko) znaky. Některé programovací jazyky a rámce mohou mít odlišné konvence pro konfigurační proměnné, takže se ujistěte, že používáte formát, který podporuje Kubernetes i vaše aplikace.

Vytvoření mapy ConfigMap

ConfigMaps mají jednoduché YAML manifesty. Každá mapa ConfigMap potřebuje name ve standardním formátu Kubernetes a data pole obsahující vaše páry klíč–hodnota:

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

data pole je pro specifikaci klíčů s řetězcovými hodnotami. Můžete použít binaryData místo toho nebo stejně jako data přidat binární hodnoty zakódované v base64. Klíče musí být jedinečné v rámci obou data a binaryData .

Použijte manifest na svůj cluster pomocí kubectl nebo váš preferovaný nástroj.

Propojení ConfigMaps a Pods

ConfigMap sama o sobě nic nedělá. Do clusteru jste přidali nějaká data; nyní jej propojíme s Pod:

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

envFrom pole vtahuje proměnné prostředí definované jiným odkazovaným zdrojem. V tomto případě configMapRef identifikuje ConfigMap vytvořenou dříve. Kontejnery podu budou spuštěny s database_host a system_email definované proměnné prostředí.

Selektivní přidávání proměnných prostředí

envFrom je užitečné, když chcete využít každý klíč v ConfigMap a jste si jisti, že nedojde ke konfliktům s ostatními proměnnými prostředí vašeho Podu. Ve více kontrolovaných situacích použijte běžné env definujte jednotlivé klíče a vytáhněte hodnotu každého klíče z ConfigMap:

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

Tento příklad ukazuje, jak lze pod spustit pouze database_host klíč z ConfigMap. Klíč je také před injekcí přejmenován, takže modul jej obdrží jako DATABASE_HOST_IP .

Použití ConfigMaps se svazky

ConfigMaps lze připojit jako soubory uvnitř Pods. Kubernetes vytvoří svazek, vloží obsah ConfigMap jako sadu souborů a připojí svazek k vašemu Podu.

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

Tento manifest pod vytváří svazek nazvaný app-config . configMap pole předem vyplní svazek pomocí dat v zadané ConfigMap.

Modul připojí svazek do /etc/config-data . Vaše kontejnery mohou číst soubory v adresáři pro přístup k vašim konfiguračním hodnotám. Každý klíč ConfigMap bude mít svůj vlastní soubor v bodě připojení.

Aktualizace hodnot ConfigMap

Protože ConfigMap je standardní prostředek Kubernetes API, můžete hodnoty kdykoli aktualizovat úpravou manifestu a jeho opětovným použitím ve vašem clusteru. Jak se nové hodnoty dostanou do vašich podů, závisí na injekčním mechanismu, který používáte.

Připojené svazky

ConfigMaps namontované do Podů prostřednictvím svazku budou aktualizovány Kubernetes. Změny v ConfigMaps jsou pravidelně kontrolovány; když je zjištěn rozdíl, soubory ve vašem svazku budou aktualizovány, takže váš modul obdrží nová data. Zpoždění závisí na intervalu synchronizace nakonfigurovaném pro instance Kubelet na vašich pracovních uzlech.

Proměnné prostředí

Změna proměnných prostředí podu není možná, takže změny ConfigMap se nedostanou ke stávajícím modulům, které odkazují na klíče prostřednictvím tohoto mechanismu. Abyste mohli používat nová data, musíte pody vyměnit.

Nově vytvořené moduly vždy obdrží aktuální data ConfigMap, bez ohledu na to, zda používáte svazky nebo proměnné prostředí. Pokud potřebujete vynutit aktualizaci konfigurace, změňte anotaci na svém Podu, aby ji Kubernetes znovu vytvořil.

Neměnné ConfigMaps

ConfigMaps mají volitelný immutable pole, které brání jejich aktualizaci. Když je toto pole nastaveno, nemůžete aktualizovat data ConfigMap ani odstraňovat neměnný stav.

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

To může být užitečné, když jste si jisti, že se hodnoty konfigurace nikdy nezmění. Zlepšuje bezpečnost tím, že odstraňuje možnost náhodných úprav. Výkon lze také zlepšit, protože Kubernetes již nepotřebuje monitorovat ConfigMap, aby přenesl jakékoli změny hodnot do vašich modulů.

Přehled

ConfigMaps by měly být vaším cílem pro poskytování necitlivých konfiguračních klíčů pro vaše Kubernetes Pods. Jedná se o prvotřídní prostředek API, který můžete využívat jako proměnné prostředí nebo připojené soubory ve svazcích.

Hesla a další přihlašovací údaje patří do Tajemství. Tyto fungují velmi podobně jako ConfigMaps a stejným způsobem na ně odkazují moduly Pods. Nahraďte configMapRef s secretRef k vytažení klíče z pojmenovaného Tajemství místo z ConfigMap.


Docker
  1. Jak používám Ansible a anacron pro automatizaci

  2. Jak používat systemd-nspawn pro obnovu systému Linux

  3. Jak používat Terraform Kubernetes Provider

  1. Jak používat pokročilý rsync pro velké zálohy Linuxu

  2. Jak používat Podman uvnitř Kubernetes

  3. Jak používat Lightdm pro uživatelsky definované relace?

  1. Jak používám Cockpit pro domácí správu linuxového serveru

  2. Jak používat CherryTree pro psaní poznámek

  3. Jak vygenerovat certifikát s vlastním podpisem pro Kubernetes