05: ConfigMap — tworzenie i użycie jako env

ConfigMap w Kubernetes: tworzenie i użycie jako zmienne środowiskowe

15 min

Cel zadania

Celem zadania jest nauka tworzenia ConfigMap w Kubernetes i używania go jako źródła zmiennych środowiskowych dla aplikacji.

Teoria

ConfigMap w Kubernetes

  • ConfigMap: Obiekt przechowujący dane konfiguracyjne jako pary klucz-wartość
  • Dlaczego oddzielenie konfiguracji od kodu?
    • Ten sam obraz kontenera działa w dev, staging i prod — zmieniasz tylko ConfigMap
    • Zmiana konfiguracji nie wymaga przebudowy obrazu Docker
    • Konfiguracja jest wersjonowana razem z innymi obiektami K8s
  • 3 sposoby tworzenia ConfigMap:
    • Z pliku YAML (kubectl apply -f)
    • Z linii poleceń (kubectl create configmap --from-literal)
    • Z plików konfiguracyjnych (kubectl create configmap --from-file)
  • 2 sposoby użycia w Pod:
    • Jako zmienne środowiskowe (env / envFrom) — to ćwiczenie
    • Jako pliki zamontowane w wolumenie (volumeMounts) — kolejne ćwiczenie
graph LR
    CM["ConfigMap<br/>(klucz-wartość)"]

    CM -->|"envFrom / env"| ENV["Pod: zmienne środowiskowe<br/>APP_ENV=production"]
    CM -->|"volumeMounts"| VOL["Pod: pliki w katalogu<br/>/config/app.properties"]

    style CM fill:#fff3e0,stroke:#f57c00
    style ENV fill:#e8f5e9
    style VOL fill:#e3f2fd

Zadanie 1: Tworzenie ConfigMap

1.1. Z pliku YAML

Utwórz plik basic-config-XX.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config-XX
data:
  ENVIRONMENT: "production"
  DATABASE_URL: "postgres://db:5432"
  API_KEY: "123456789"
  CACHE_ENABLED: "true"
kubectl apply -f basic-config-XX.yaml

1.2. Z linii poleceń

# Tworzenie z par klucz-wartość
kubectl create configmap cli-config-XX \
  --from-literal=ENVIRONMENT="production" \
  --from-literal=DATABASE_URL="postgres://db:5432" \
  --from-literal=API_KEY="123456789"

# Sprawdzenie utworzonego ConfigMap
kubectl get configmap cli-config-XX -o yaml

1.3. Z plików konfiguracyjnych

# Utwórz plik app.properties
cat > app-XX.properties << EOF
environment=production
database.url=postgres://db:5432
api.key=123456789
EOF

# Utwórz plik redis.conf
cat > redis-XX.conf << EOF
maxmemory 2mb
maxmemory-policy allkeys-lru
EOF

# Tworzenie ConfigMap z plików
kubectl create configmap files-config-XX \
  --from-file=app.properties=app-XX.properties \
  --from-file=redis.conf=redis-XX.conf

Zadanie 2: Używanie ConfigMap w Pod

2.1. Jako zmienne środowiskowe

Utwórz plik pod-env-config-XX.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: pod-env-config-XX
spec:
  containers:
  - name: app
    image: busybox
    command: ["/bin/sh", "-c", "env; sleep 3600"]
    env:
    - name: ENVIRONMENT
      valueFrom:
        configMapKeyRef:
          name: app-config-XX
          key: ENVIRONMENT
    - name: DATABASE_URL
      valueFrom:
        configMapKeyRef:
          name: app-config-XX
          key: DATABASE_URL

2.2. Wszystkie zmienne z ConfigMap

Utwórz plik pod-all-env-XX.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: pod-all-env-XX
spec:
  containers:
  - name: app
    image: busybox
    command: ["/bin/sh", "-c", "env; sleep 3600"]
    envFrom:
    - configMapRef:
        name: app-config-XX

Zadanie 3: Zarządzanie ConfigMap

3.1. Sprawdzanie ConfigMap

# Lista wszystkich ConfigMap
kubectl get configmap

# Szczegóły konkretnego ConfigMap
kubectl describe configmap app-config-XX

# Wyświetl w formacie YAML
kubectl get configmap app-config-XX -o yaml

3.2. Aktualizacja ConfigMap

# Edycja bezpośrednia
kubectl edit configmap app-config-XX

# Aktualizacja z nowego pliku YAML
kubectl apply -f updated-config-XX.yaml

3.3. Usuwanie ConfigMap

kubectl delete configmap app-config-XX

Zadanie 4: Eksport i konwersja ConfigMap

4.1. Eksport bez tworzenia obiektu

# Z wartości literalnych
kubectl create configmap app-config-XX \
  --from-literal=ENVIRONMENT="production" \
  --from-literal=DATABASE_URL="postgres://db:5432" \
  --dry-run=client \
  -o yaml > app-config-XX.yaml

# Z plików
kubectl create configmap files-config-XX \
  --from-file=app-XX.properties \
  --from-file=redis-XX.conf \
  --dry-run=client \
  -o yaml > files-config-XX.yaml

4.2. Eksport istniejącego ConfigMap

# Eksport do pliku YAML
kubectl get configmap app-config-XX -o yaml > existing-config-XX.yaml

4.3. Szablon ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: template-config-XX
data:
  APP_NAME: "my-app-XX"
  ENVIRONMENT: "development"
  CONFIG_VERSION: "1.0"

Najczęstsze problemy

Problem Rozwiązanie
ConfigMap nie istnieje Sprawdź nazwę i namespace
Pod nie startuje Sprawdź logi: kubectl describe pod
Zmienne nie widoczne Sprawdź configMapKeyRef/configMapRef

Dobre praktyki

  1. Organizacja ConfigMap
    • Grupuj powiązane konfiguracje
    • Używaj czytelnych nazw kluczy
    • Rozdzielaj konfiguracje na logiczne części
  2. Bezpieczeństwo
    • Nie przechowuj haseł (użyj Secrets)
    • Ogranicz dostęp do wrażliwych danych
    • Regularnie rotuj dane dostępowe
  3. Zarządzanie
    • Dokumentuj strukturę konfiguracji
    • Używaj systemu kontroli wersji
    • Testuj zmiany przed wdrożeniem

Podsumowanie

  • ConfigMap pozwala na centralne zarządzanie konfiguracją
  • Można tworzyć je na różne sposoby (YAML, CLI, pliki)
  • Można używać jako zmienne środowiskowe (env / envFrom)
  • W następnym ćwiczeniu poznasz montowanie ConfigMap jako wolumeny

Wskazówki

  • Zawsze weryfikuj poprawność YAML
  • Używaj kubectl describe configmap do debugowania
  • Aktualizuj dokumentację po zmianach
  • Twórz kopie zapasowe konfiguracji
  • Używaj --dry-run=client do testowania zmian
  • Regularnie eksportuj ConfigMapy do plików YAML

results matching ""

    No results matching ""