Post

Kubernetes 101: ConfigMaps

Fala galera! Seis tão baum?

No capítulo de hoje da nossa série “Kubernetes 101”, vamos explorar um dos conceitos mais essenciais no Kubernetes: os ConfigMaps. No Kubernetes, os ConfigMaps permitem armazenar configurações de aplicação em arquivos separados, facilitando a manutenção e a atualização de parâmetros sem a necessidade de alterar o código ou reconstruir imagens de contêineres. ConfigMaps são especialmente úteis para armazenar variáveis de configuração que podem variar entre ambientes (desenvolvimento, teste, produção), mantendo a consistência e a flexibilidade na configuração das aplicações.

O que é um ConfigMap?

Um ConfigMap é um objeto do Kubernetes que armazena dados de configuração em pares chave-valor, permitindo que essas configurações sejam facilmente injetadas em contêineres. Com ConfigMaps, você pode externalizar a configuração das suas aplicações, separando-a da lógica do aplicativo e da imagem do contêiner, o que possibilita um gerenciamento mais seguro e escalável.

Como criar um ConfigMap

Você pode criar um ConfigMap no Kubernetes usando tanto o método declarativo (YAML) quanto o imperativo (comandos kubectl).

Exemplo Declarativo

Para criar um ConfigMap com uma configuração de banco de dados, você pode definir um arquivo YAML como este:

1
2
3
4
5
6
7
8
9
10
apiVersion: v1
kind: ConfigMap
metadata:
  name: meu-configmap
  namespace: default
data:
  DB_HOST: "mysql.database.local"
  DB_PORT: "3306"
  DB_USER: "admin"
  DB_PASSWORD: "senha123"

Exemplo Imperativo

Para criar um ConfigMap usando o comando imperativo, você pode usar o seguinte:

1
2
3
4
5
kubectl create configmap meu-configmap \
  --from-literal=DB_HOST=mysql.database.local \
  --from-literal=DB_PORT=3306 \
  --from-literal=DB_USER=admin \
  --from-literal=DB_PASSWORD=senha123

Consumindo ConfigMaps em Pods

Existem várias maneiras de consumir um ConfigMap dentro de um Pod, incluindo como variáveis de ambiente, arquivos em um volume ou argumentos para o contêiner.

Exemplo de ConfigMap como variável de ambiente

Para acessar o ConfigMap no seu contêiner como variáveis de ambiente, adicione-o ao Pod da seguinte forma:

1
2
3
4
5
6
7
8
9
10
11
apiVersion: v1
kind: Pod
metadata:
  name: pod-com-configmap
spec:
  containers:
    - name: meu-container
      image: nginx
      envFrom:
        - configMapRef:
            name: meu-configmap

Exemplo de ConfigMap como arquivo em volume

Você também pode montar o ConfigMap como um volume, onde cada chave será um arquivo separado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: v1
kind: Pod
metadata:
  name: pod-com-configmap-volume
spec:
  containers:
    - name: meu-container
      image: nginx
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: meu-configmap

No exemplo acima, o ConfigMap será montado no contêiner em /etc/config, e cada chave será representada por um arquivo separado.

Testando ConfigMaps

Para testar um ConfigMap, crie um Pod temporário com um contêiner que possua curl ou um comando de shell para verificar se as variáveis ou os arquivos de configuração foram corretamente configurados.

Exemplo de Teste

Usando um contêiner baseado em Alpine com curl:

1
kubectl run curl-pod --image=alpine --rm -i --tty -- /bin/sh

Depois de criar um Pod temporário com kubectl run, você pode verificar se as variáveis de ambiente do ConfigMap foram carregadas corretamente:

Dentro do shell do Pod, você pode usar o comando env ou echo para verificar as variáveis:

1
2
3
4
5
# Liste todas as variáveis de ambiente e veja se as do ConfigMap estão presentes
env | grep DB_

# Ou exiba uma variável específica, como DB_HOST, para verificar seu valor
echo $DB_HOST

Esses comandos exibirão as variáveis de ambiente DB_HOST, DB_PORT, DB_USER, e DB_PASSWORD se foram corretamente aplicadas a partir do ConfigMap.

Se o ConfigMap foi montado como um volume, você poderá verificar se os arquivos foram criados no caminho especificado (/etc/config neste exemplo):

1
2
3
4
5
# Dentro do Pod, liste os arquivos montados
ls /etc/config

# Verifique o conteúdo de um dos arquivos
cat /etc/config/DB_HOST

Esse comando cat /etc/config/DB_HOST mostrará o conteúdo da chave DB_HOST configurada no ConfigMap. Você pode repetir o comando para cada chave que estiver presente.

Conclusão

Os ConfigMaps são uma ferramenta poderosa no Kubernetes, permitindo gerenciar configurações de maneira centralizada e segura. Isso facilita a manutenção, atualização e teste das configurações sem necessidade de alterar a imagem do contêiner. Ao utilizar ConfigMaps, você melhora a flexibilidade e segurança das suas aplicações no cluster.

E, como sempre, não se esqueça de consultar a documentação oficial do Kubernetes para mais detalhes e práticas recomendadas sobre o uso de ConfigMaps!

Você pode acessar a documentação oficial aqui: ConfigMaps

É isso, galera! Espero que tenham gostado!

Se você tiver alguma dúvida ou comentário, sinta-se à vontade para compartilhá-los conosco na seção de comentários abaixo!

Forte Abraço!

Este post está licenciado sob CC BY 4.0 e pelo autor.