K8s em Exemplos: Variáveis de Ambiente

Variáveis de ambiente configuram containers em runtime. Kubernetes suporta múltiplas fontes: valores estáticos, ConfigMaps, Secrets e a Downward API. Env vars são definidas na inicialização do container e não atualizam automaticamente.

pod-env.yaml

Defina variáveis de ambiente diretamente no spec do Pod. Simples e explícito, mas requer redeploy para mudar valores. Use para config estática que raramente muda.

spec:
  containers:
    - name: app
      image: my-app:v1
      env:
        - name: PORT
          value: "8080"
        - name: DEBUG
          value: "false"
        - name: FEATURES
          value: "auth,logging,metrics"
pod-env-refs.yaml

Referencie ConfigMaps e Secrets para configuração externalizada. Use optional: false para falhar startup do Pod se a chave estiver faltando. Desacopla config dos specs de Pod.

env:
  - name: DATABASE_URL
    valueFrom:
      secretKeyRef:
        name: db-secrets
        key: url
        optional: false
  - name: LOG_LEVEL
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: LOG_LEVEL
        optional: true
pod-downward-api.yaml

A Downward API expõe metadados do Pod via fieldRef. Injete nome do Pod, namespace, IP e info do node. Essencial para logging, tracing e auto-descoberta.

env:
  - name: POD_NAME
    valueFrom:
      fieldRef:
        fieldPath: metadata.name
  - name: POD_NAMESPACE
    valueFrom:
      fieldRef:
        fieldPath: metadata.namespace
  - name: POD_IP
    valueFrom:
      fieldRef:
        fieldPath: status.podIP
  - name: NODE_NAME
    valueFrom:
      fieldRef:
        fieldPath: spec.nodeName
pod-labels-env.yaml

Acesse labels e annotations via Downward API. Útil para passar info de deploy para sua aplicação para métricas, tracing ou feature flags.

env:
  - name: APP_VERSION
    valueFrom:
      fieldRef:
        fieldPath: metadata.labels['app.kubernetes.io/version']
  - name: DEPLOY_SHA
    valueFrom:
      fieldRef:
        fieldPath: metadata.annotations['deploy-sha']
  - name: SERVICE_ACCOUNT
    valueFrom:
      fieldRef:
        fieldPath: spec.serviceAccountName
pod-resource-env.yaml

resourceFieldRef expõe limites de recursos do container. Crítico para sizing de heap JVM e caching com awareness de memória. Use divisor para converter unidades (1Mi, 1m).

env:
  - name: MEMORY_LIMIT
    valueFrom:
      resourceFieldRef:
        containerName: app
        resource: limits.memory
        divisor: 1Mi
  - name: CPU_REQUEST
    valueFrom:
      resourceFieldRef:
        containerName: app
        resource: requests.cpu
        divisor: 1m
pod-envfrom.yaml

envFrom carrega todas as chaves de um ConfigMap ou Secret. Use prefix para namespacear. Chaves ficam prefixadas: CONFIG_DEBUG, SECRET_API_KEY.

spec:
  containers:
    - name: app
      envFrom:
        - configMapRef:
            name: app-config
          prefix: CONFIG_
        - secretRef:
            name: app-secrets
          prefix: SECRET_
pod-env-interpolation.yaml

Env vars podem referenciar outras env vars usando sintaxe $(VAR_NAME). Avaliadas na inicialização do container. Útil para construir strings de conexão de componentes.

env:
  - name: DB_HOST
    value: "postgres"
  - name: DB_PORT
    value: "5432"
  - name: DB_NAME
    value: "myapp"
  - name: DATABASE_URL
    value: "postgresql://$(DB_HOST):$(DB_PORT)/$(DB_NAME)"

A ordem importa: env vars são avaliadas em ordem. Vars posteriores podem referenciar anteriores. Refs de ConfigMap/Secret são resolvidas antes de valores inline que as usam.

env:
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: db-secrets
        key: password
  - name: DATABASE_URL
    value: "postgresql://user:$(DB_PASSWORD)@db:5432/app"

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