Configurando o Redis usando um ConfigMap
Esta página fornece um exemplo prático de como configurar o Redis usando um ConfigMap e baseia-se na tarefa Configurar um Pod para usar um ConfigMap.
Objetivos
- Criar um ConfigMap com valores de configuração para o Redis.
- Criar um Pod do Redis que monte e use o ConfigMap criado.
- Verificar se a configuração foi aplicada corretamente.
Antes de você começar
Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o minikube ou pode usar um dos seguintes ambientes:
Para verificar a versão, digite kubectl version
.
- O exemplo mostrado nesta página funciona com
kubectl
1.14 ou superior. - Entenda Configurar um Pod para usar um ConfigMap.
Exemplo prático: Configurando o Redis usando um ConfigMap
Siga os passos abaixo para configurar um cache Redis usando dados armazenados em um ConfigMap.
Primeiro, crie um ConfigMap com um bloco de configuração vazio:
cat <<EOF >./example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: ""
EOF
Aplique o ConfigMap criado acima, juntamente com o manifesto de Pod Redis:
kubectl apply -f example-redis-config.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml
Examine o conteúdo do manifesto do Pod Redis e observe o seguinte:
- Um volume chamado
config
é criado emspec.volumes[1]
- A
key
e opath
emspec.volumes[1].configMap.items[0]
expõem a chaveredis-config
do ConfigMapexample-redis-config
como um arquivo chamadoredis.conf
no volumeconfig
. - O volume
config
é então montado em/redis-master
porspec.containers[0].volumeMounts[1]
.
O efeito final é expor os dados de data.redis-config
do ConfigMap example-redis-config
acima como /redis-master/redis.conf
dentro do Pod.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:8.0.2
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
Examine os objetos criados:
kubectl get pod/redis configmap/example-redis-config
Você deverá ver a seguinte saída:
NAME READY STATUS RESTARTS AGE
pod/redis 1/1 Running 0 8s
NAME DATA AGE
configmap/example-redis-config 1 14s
Lembre-se de que deixamos a chave redis-config
no ConfigMap example-redis-config
em branco:
kubectl describe configmap/example-redis-config
Você deverá ver uma chave redis-config
vazia:
Name: example-redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis-config:
Use kubectl exec
para entrar no pod e executar a ferramenta redis-cli
para verificar a configuração atual:
kubectl exec -it redis -- redis-cli
Verifique maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Ele deve mostrar o valor padrão 0:
1) "maxmemory"
2) "0"
Da mesma forma, verifique maxmemory-policy
:
127.0.0.1:6379> CONFIG GET maxmemory-policy
O que também deve retornar seu valor padrão noeviction
:
1) "maxmemory-policy"
2) "noeviction"
Agora, vamos adicionar alguns valores de configuração ao ConfigMap example-redis-config
:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
Aplique o ConfigMap atualizado:
kubectl apply -f example-redis-config.yaml
Confirme que o ConfigMap foi atualizado:
kubectl describe configmap/example-redis-config
Você deverá ver os valores de configuração que acabamos de adicionar:
Name: example-redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru
Verifique novamente o Pod Redis usando redis-cli
via kubectl exec
para confirmar se a configuração foi aplicada:
kubectl exec -it redis -- redis-cli
Verifique maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Ele permanece no valor padrão de 0:
1) "maxmemory"
2) "0"
Da mesma forma, maxmemory-policy
permanece com a configuração padrão noeviction
:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Retorna:
1) "maxmemory-policy"
2) "noeviction"
Os valores de configuração não mudaram porque o Pod precisa ser reiniciado para carregar os valores atualizados dos ConfigMaps associados. Vamos excluir e recriar o Pod:
kubectl delete pod redis
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml
Agora verifique os valores de configuração mais uma vez:
kubectl exec -it redis -- redis-cli
Verifique maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Ele agora deve retornar o valor atualizado de 2097152:
1) "maxmemory"
2) "2097152"
Da mesma forma, maxmemory-policy
também foi atualizado:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Ele agora reflete o valor desejado de allkeys-lru
:
1) "maxmemory-policy"
2) "allkeys-lru"
Limpe o ambiente excluindo os recursos criados:
kubectl delete pod/redis configmap/example-redis-config
Próximos passos
- Aprenda mais sobre ConfigMaps.
- Veja um exemplo de como atualizar configuração usando ConfigMap.