ConfigMaps no Kubernetes: Guia Completo para Configuração Dinâmica e Moderna

ConfigMaps no Kubernetes: Guia Completo para Configuração Dinâmica e Moderna

O que é um ConfigMap?

No Kubernetes, o ConfigMap é um recurso vital que armazena dados de configuração não sensíveis em formato de pares chave-valor ou até mesmo como arquivos. Essa funcionalidade permite a separação clara entre a configuração e o código da aplicação, possibilitando alterações nos parâmetros durante a execução ou implantação, sem a necessidade de reconstruir imagens dos containers.


Como funciona o ConfigMap?

  • O ConfigMap guarda dados de configuração que podem ser referenciados por um ou vários Pods simultaneamente.
  • Essas informações são armazenadas no etcd, o banco de dados interno do Kubernetes, e disponibilizadas aos Pods que o referenciam.
  • Por ser destinado a dados não sensíveis, caso haja necessidade de armazenar informações confidenciais, recomenda-se o uso do recurso Secrets.
  • Os Pods podem acessar ConfigMaps principalmente de três maneiras:
    • Variáveis de ambiente: injetando pares chave-valor diretamente no ambiente do container.
    • Montagem como arquivos de volume: transformando as chaves em arquivos dentro do sistema de arquivos do container.
    • Argumentos na linha de comando: menos comum, depende da implementação da aplicação.

Benefícios de usar ConfigMaps

  • Separação clara entre configuração e código: evita a necessidade de reconstruir imagens para alterações simples nos parâmetros.
  • Centralização das configurações: facilita o gerenciamento e o reaproveitamento eficiente dos dados.
  • Flexibilidade para atualizar múltiplos Pods simultaneamente: simplifica as operações de manutenção e atualizações.
  • Integração completa com o modelo declarativo do Kubernetes: reforça boas práticas de infraestrutura como código.
  • Suporte a diferentes formatos de entrada: desde simples pares chave-valor até diretórios inteiros como arquivos.

Limitações e cuidados

  • Dados sensíveis: ConfigMaps não são indicados para armazenamento de informações confidenciais, pois são armazenados como texto claro no etcd; para isso, utilize os Secrets.
  • Atualizações não refletem automaticamente em variáveis de ambiente: quando consumidos via env vars, as mudanças exigem reinício dos Pods para serem aplicadas.
  • Necessidade de implementação de reload dinâmico: ao montar ConfigMaps como volumes, a aplicação precisa ser capaz de detectar e recarregar alterações, pois o Kubernetes não reinicia automaticamente os Pods.

Formas de consumir ConfigMaps em Pods

1. Variáveis de Ambiente

As chaves do ConfigMap podem ser injetadas diretamente como variáveis de ambiente dentro do container, facilitando o acesso pela aplicação.

Exemplo de ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  DB_HOST: database.example.com
  DB_PORT: "5432"

Exemplo de Pod consumindo via variáveis de ambiente:

apiVersion: v1
kind: Pod
metadata:
  name: pod-env-configmap
spec:
  containers:
  - name: app
    image: myapp:v1
    envFrom:
    - configMapRef:
        name: app-config

2. Montagem como Volume de Arquivos

Também é possível montar o ConfigMap como um volume, convertendo cada chave em um arquivo dentro do container, facilitando o uso por aplicações que consomem arquivos de configuração.

Exemplo:

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-configmap
spec:
  containers:
  - name: app
    image: myapp:v1
    volumeMounts:
    - name: config-volume
      mountPath: /etc/config
  volumes:
  - name: config-volume
    configMap:
      name: app-config

Com essa configuração, arquivos como /etc/config/DB_HOST e /etc/config/DB_PORT estarão disponíveis no container, contendo os valores correspondentes.


3. Variáveis Individuais

Também podem ser referenciadas chaves específicas do ConfigMap para criar variáveis individuais dentro do container, oferecendo controle mais granular sobre as configurações injetadas.


Atualizando ConfigMaps e refletindo mudanças nos Pods

Após atualizar um ConfigMap, o conteúdo armazenado no etcd é alterado imediatamente, mas a forma como essa atualização é propagada aos Pods depende do método de consumo:

  • Via variáveis de ambiente: é necessário reiniciar o Pod para que as novas variáveis sejam carregadas, pois o container carrega as variáveis apenas na inicialização.
  • Via volume montado: o conteúdo é atualizado automaticamente dentro do container em poucos segundos, já que o kubelet sincroniza os arquivos montados.

Para garantir a aplicação correta das mudanças:

  1. Montagem via volume: a aplicação deve estar preparada para detectar alterações e recarregar a configuração (por exemplo, lendo os arquivos novamente ou respondendo a sinais do sistema).
  2. Variáveis de ambiente: é necessário reiniciar os Pods ou realizar um rollout no Deployment para que as alterações tenham efeito.

Procedimento para atualizar ConfigMaps usados em Pods

Passos recomendados:

  1. Se estiver usando volumes e a aplicação suporta reload dinâmico, aguarde a sincronização automática ou force o reload na aplicação de forma controlada.

Para refletir as mudanças em variáveis de ambiente, reinicie os Pods através do rollout:

kubectl rollout restart deployment nome-do-deployment

ou exclua os Pods para que sejam recriados automaticamente:

kubectl delete pod nome-do-pod

Verifique o ConfigMap atualizado:

kubectl describe configmap app-config

Atualize o ConfigMap no cluster utilizando o comando:

kubectl apply -f app-config.yaml

Resumo

AspectoConfigMap
FunçãoArmazenar configurações não sensíveis
Principais usosParâmetros via variáveis de ambiente e arquivos montados
BenefíciosSeparação de configuração e código, fácil alteração
LimitaçõesNão deve conter dados sensíveis, atualização não automática em env vars
Consumo em PodsVariáveis de ambiente e volume de arquivos
Atualização práticaReinício do Pod para env vars; reload necessário para volumes

Conclusão

O ConfigMap é um componente essencial no Kubernetes para gerenciar configurações de forma flexível e dinâmica, promovendo uma arquitetura declarativa e modular. Ele permite modificar parâmetros de configuração sem recriar imagens de container, o que acelera o desenvolvimento e a operação.

Compreender as diferenças entre o consumo via variáveis de ambiente e por volumes é crucial para implementar processos eficazes de atualização e manter a alta disponibilidade das aplicações. Além disso, o uso adequado de ConfigMaps contribui para melhores práticas de segurança e eficiência operacional.

Por fim, integrar ConfigMaps com outras ferramentas do ecossistema Kubernetes, como Helm ou operadores customizados, pode ampliar ainda mais sua aplicabilidade e controle, tornando o gerenciamento de configurações mais robusto e escalável em ambientes de produção modernos.