K8s em Exemplos: ConfigMaps

ConfigMaps armazenam configuração não sensível como pares chave-valor. Eles desacoplam configuração de imagens de container. Injete-os como variáveis de ambiente ou monte como arquivos. Nunca armazene secrets aqui.

configmap.yaml

ConfigMaps usam a API core v1. O campo data contém pares chave-valor de string para configuração.

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DEBUG: "false"
  ENVIRONMENT: "production"
  LOG_LEVEL: "info"
configmap-file.yaml

Armazene arquivos de config multi-linha usando sintaxe de bloco literal (|). A chave se torna o nome do arquivo quando montado. Perfeito para nginx.conf ou application.yaml.

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  nginx.conf: |
    server {
      listen 80;
      location / {
        proxy_pass http://backend:8080;
      }
    }
pod-envfrom.yaml

Injete todas as chaves como variáveis de ambiente com envFrom. Use prefix para namespacear e evitar colisões. DEBUG vira APP_DEBUG.

spec:
  containers:
    - name: app
      image: my-app:v1
      envFrom:
        - configMapRef:
            name: app-config
          prefix: APP_
pod-env-valueFrom.yaml

Selecione chaves específicas com valueFrom. Útil quando nomes de chave do ConfigMap não correspondem às env vars esperadas. Use optional: true para permitir startup do Pod se a chave estiver faltando.

env:
  - name: DEBUG_MODE
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: DEBUG
        optional: true
pod-volume-mount.yaml

Monte ConfigMap como arquivos em um volume. Cada chave vira um arquivo. ConfigMaps montados atualizam automaticamente quando alterados (~1 minuto). Use items para selecionar chaves específicas.

spec:
  containers:
    - name: app
      volumeMounts:
        - name: config
          mountPath: /etc/app
          readOnly: true
  volumes:
    - name: config
      configMap:
        name: app-config
        items:
          - key: nginx.conf
            path: nginx.conf
configmap-immutable.yaml

ConfigMaps imutáveis não podem ser alterados após criação. Isso melhora performance (sem watches) e previne mudanças acidentais. Você deve deletar e recriar para atualizar.

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config-v1
immutable: true
data:
  ENVIRONMENT: "production"
  LOG_LEVEL: "info"
terminal

Crie ConfigMaps imperativamente de literals, arquivos, diretórios ou env files. O padrão —dry-run=client -o yaml gera manifests declarativos.

$ kubectl create configmap app-config \
    --from-literal=DEBUG=false \
    --from-literal=PORT=8080
configmap/app-config created

$ kubectl create configmap nginx-conf \
    --from-file=nginx.conf
configmap/nginx-conf created

$ kubectl create configmap my-config \
    --from-env-file=.env \
    --dry-run=client -o yaml > configmap.yaml
terminal

Atualizações de ConfigMap com volumes montados propagam automaticamente. Env vars nunca atualizam - restart do Pod é necessário. Use rollout restart ou ferramentas como Reloader para auto-restart.

$ kubectl edit configmap app-config
configmap/app-config edited

$ kubectl rollout restart deployment my-app
deployment.apps/my-app restarted

Índice | GitHub | Use as setas do teclado para navegar |