Конфігурування Redis за допомогою ConfigMap
Ця сторінка надає реальний приклад конфігурування Redis за допомогою ConfigMap і базується на завданні Конфігурування Pod для використання ConfigMap.
Цілі
- Створити ConfigMap з конфігураційними значеннями Redis
- Створити Pod з Redis, який монтує та використовує створений ConfigMap
- Перевірити, що конфігурація була правильно застосована.
Перш ніж ви розпочнете
Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:
Для перевірки версії введітьkubectl version
.- Приклад, показаний на цій сторінці, працює з
kubectl
версії 1.14 і вище. - Розуміння Конфігурування Pod для використання ConfigMap.
Реальний приклад: Конфігурування Redis за допомогою ConfigMap
Виконайте наведені нижче кроки для конфігурування кешу Redis за допомогою даних, збережених у ConfigMap.
Спершу створіть ConfigMap з порожнім блоком конфігурації:
cat <<EOF >./example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: ""
EOF
Застосуйте створений вище ConfigMap разом з маніфестом 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
Перегляньте вміст маніфесту Podʼа Redis і зверніть увагу на наступне:
- Том
config
створено за допомогоюspec.volumes[1]
- Пара
key
іpath
уspec.volumes[1].configMap.items[0]
експонує ключredis-config
зexample-redis-config
ConfigMap як файл з назвоюredis.conf
у томіconfig
. - Том
config
потім монтується в/redis-master
за допомогоюspec.containers[0].volumeMounts[1]
.
Це має загальний ефект експозиції даних з data.redis-config
з example-redis-config
ConfigMap як /redis-master/redis.conf
всередині Pod.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
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
Перегляньте створені обʼєкти:
kubectl get pod/redis configmap/example-redis-config
Ви повинні побачити наступний вивід:
NAME READY STATUS RESTARTS AGE
pod/redis 1/1 Running 0 8s
NAME DATA AGE
configmap/example-redis-config 1 14s
Нагадаємо, що ми залишили ключ redis-config
у example-redis-config
ConfigMap порожнім:
kubectl describe configmap/example-redis-config
Ви повинні побачити порожній ключ redis-config
:
Name: example-redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis-config:
Використовуйте kubectl exec
, щоб увійти в Pod і запустити інструмент redis-cli
, щоб перевірити поточну конфігурацію:
kubectl exec -it redis -- redis-cli
Перевірте maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Він має показати типове значення 0:
1) "maxmemory"
2) "0"
Аналогічно, перевірте maxmemory-policy
:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Що також повинно показати типове значення noeviction
:
1) "maxmemory-policy"
2) "noeviction"
Тепер додамо деякі конфігураційні значення до example-redis-config
ConfigMap:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
Застосуйте оновлений ConfigMap:
kubectl apply -f example-redis-config.yaml
Перевірте, що ConfigMap був оновлений:
kubectl describe configmap/example-redis-config
Ви повинні побачити конфігураційні значення, які ми щойно додали:
Name: example-redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru
Ще раз перевірте Pod Redis за допомогою redis-cli
через kubectl exec
, щоб побачити, чи конфігурація була застосована:
kubectl exec -it redis -- redis-cli
Перевірте maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Він залишається з типовим значенням 0:
1) "maxmemory"
2) "0"
Аналогічно, maxmemory-policy
залишається з типовими налаштуваннями noeviction
:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Повертає:
1) "maxmemory-policy"
2) "noeviction"
Конфігураційні значення не змінилися, оскільки Pod необхідно перезапустити, щоб отримати оновлені значення з асоційованих ConfigMap. Видалимо та заново створимо Pod:
kubectl delete pod redis
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/pods/config/redis-pod.yaml
Тепер ще раз перевірте конфігураційні значення:
kubectl exec -it redis -- redis-cli
Перевірте maxmemory
:
127.0.0.1:6379> CONFIG GET maxmemory
Тепер він має показати оновлене значення 2097152:
1) "maxmemory"
2) "2097152"
Аналогічно, maxmemory-policy
також було оновлено:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Він тепер показує бажане значення allkeys-lru
:
1) "maxmemory-policy"
2) "allkeys-lru"
Очистіть свою роботу, видаливши створені ресурси:
kubectl delete pod/redis configmap/example-redis-config
Що далі
- Дізнайтеся більше про ConfigMaps.
- Ознайомтеся з прикладом Оновлення конфігурації через ConfigMap.