Noções básicas sobre o ConfigMaps do Kubernetes

Concluído

No repositório de aplicativos, há um arquivo de configuração carregado no arquivo index.html para permitir que as variáveis de ambiente sejam atualizadas sem a necessidade de um build de imagem completo.

O arquivo de configuração não contém informações confidenciais, ele só precisa ser carregado junto com o contêiner. Como podemos montar o arquivo no contêiner sem a necessidade de criptografia ou codificação?

Noções básicas dos ConfigMaps

ConfigMaps são correlatos a Secrets. Embora os segredos forneçam uma maneira de armazenar e fornecer dados confidenciais, os ConfigMaps são objetos que fornecem uma maneira de armazenar dados não confidenciais usando a mesma estrutura de chave-valor que um segredo. O objeto ConfigMaps permite desacoplar configurações de imagens de contêiner, de modo que essas imagens permaneçam sem estado.

Você cria um ConfigMap para armazenar dados de configuração separadamente do código do aplicativo e carregá-los de maneira semelhante à forma como carregamos objetos Secret no Pod. Você só pode referenciar ConfigMaps usando uma variável de ambiente ou montando-as como um arquivo em um volume dentro do contêiner.

Os ConfigMaps têm uma limitação de tamanho de dados: você pode armazenar até 1 MiB de dados em um ConfigMap. A limitação de tamanho ajuda você a evitar arquivos de configuração grandes e complexos, fazendo com que você divida configurações grandes em partes menores. Com os ConfigMaps, você pode montar apenas os arquivos de configuração necessários em seus contêineres, o que possibilita mais granularidade.

Como os Segredos, os ConfigMaps contêm namespace. Você só pode acessar e montar um ConfigMap usando os contêineres presentes no mesmo namespace no qual ele foi criado.

Os ConfigMaps também são amplamente usados por outras ferramentas, como Helm e operadores de Kubernetes, para armazenar e ler estados.

Atualizações do ConfigMap

Todos os ConfigMaps montados como volumes dentro de um pod são atualizados automaticamente quando o valor deles é alterado. Essa alteração pode não ocorrer imediatamente devido à configuração do Kubelet, mas ocorre automaticamente para que não haja necessidade de reiniciar o Pod.

Quando um ConfigMap está associado a variáveis de ambiente, ele não é atualizado automaticamente. Nesses casos, é necessário reiniciar o Pod para que as alterações entrem em vigor.

Criar e usar ConfigMaps

Você pode criar um ConfigMap usando a mesma abordagem de um Secret: um arquivo YAML. A especificação do ConfigMap é a seguinte:

apiVersion: v1
kind: ConfigMap
metadata:
  name: configmap-name
  namespace: default
data:
  key-name: "value as key"
  key.name: |
    multi line
    property, called "file-like" values

Você pode referenciar os ConfigMaps por uma ou mais chaves na especificação de um Pod ou uma Implantação, conforme mostrado no seguinte exemplo:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      env:
        - name: ENVIRONMENT_VARIABLE_NAME
          valueFrom:
            configMapKeyRef:
              name: configmap-name
              key: key-name

Você também pode montá-los como arquivos dentro do pod usando volumes somente leitura, conforme mostrado no seguinte exemplo:

apiVersion: v1
kind: Pod
metadata:
  name: configmap-as-env
  namespace: default
spec:
  containers:
    - name: configmap-env
      image: alpine
      command: ["sleep", "3600"]
      volumeMounts:
      - name: volume-name
        mountPath: "/path/to/mount"
        readOnly: true
  volumes:
    - name: volume-name
      configMap:
        name: configmap-name
        items:
        - key: "key-name"
          path: "path/to/mount/the/key"

Verificar seus conhecimentos

1.

Por que devemos usar os ConfigMaps?

2.

Como você pode usar os ConfigMaps em um aplicativo?

3.

O namespace é uma limitação para ConfigMaps?