Redis#
Redis — это база данных размещаемая в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Является хранилищем типа «ключ-значение», но поддерживает множество различных типов значений: строки, списки, наборы, отсортированные наборы, хеши, потоки, HyperLogLog, растровые изображения.
Используется как для баз данных, так и для реализации кэшей, брокеров сообщений.
Сценарии использования Redis#
Настройка Redis с помощью Сonfigmap#
Для выполнения данного сценария необходимы права администратора.
Выполните следующие действия, чтобы настроить Redis с использованием данных, хранящихся в ConfigMap.
Создайте
ConfigMapс пустым блоком конфигурации:cat <<EOF >./example-redis-config.yaml apiVersion: v1 kind: ConfigMap metadata: name: example-redis-config data: redis-config: "" EOFПримените созданный выше
ConfigMapвместе с манифестом podredis:kubectl apply -f example-redis-config.yaml kubectl apply -f https://<registry>/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-configConfigMapкак файл с именем redis.conf на том config;том config монтируется по
/redis-masterадресуspec.containers[0].volumeMounts[1].
Внесите содержание манифеста, чтобы данные из
ConfigMapdata.redis-configиexample-redis-config, представленных выше, были доступны внутри pod по пути/redis-master/redis.conf: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-configConfigMapоставлен пустым:kubectl describe configmap/example-redis-configВывод должен отображать следующее:
Name: example-redis-config Namespace: default Labels: <none> Annotations: <none> Data ==== redis-config:Используйте
kubectl execдля входа в модуль и запуска 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-configConfigMap:
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
В выводе должны отображаться конфигурации, добавленные в шаге 10:
~~~bash
Name: example-redis-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru
~~~
Значения конфигурации не изменились, поскольку модуль необходимо перезапустить. Чтобы получить обновленные значения из связанных
ConfigMap, удалите и заново создайте pod:
kubectl delete pod redis
kubectl apply -f https://<registry>/content/en/examples/pods/config/redis-pod.yaml
Проверьте значения конфигурации:
kubectl exec -it redis -- redis-cli
Проверьте
maxmemory:
127.0.0.1:6379> CONFIG GET maxmemory
Вывод должен отобразить обновленное значение 2097152:
~~~bash
1) "maxmemory"
2) "2097152"
~~~
Обновите
maxmemory-policy:
127.0.0.1:6379> CONFIG GET maxmemory-policy
Вывод должен отражать значение allkeys-lru:
~~~bash
1) "maxmemory-policy"
2) "allkeys-lru"
~~~
Вывод сообщает, что все недавно используемые ключи заменены.
Удалите созданные ресурсы:
kubectl delete pod/redis configmap/example-redis-config
Настройка пароля для аутентификации Redis#
Активация пароля Redis включает одну из двух встроенных функций безопасности - команду auth, которая требует от клиентов аутентификации для доступа к базе данных. Пароль настраивается непосредственно в файле конфигурации Redis /etc/redis/redis.conf.
Перейдите к разделу
SECURITYи найдите закомментированную директиву:# requirepass foobaredУдалите символ
#из этой строки и заменитеfoobaredна надежный и длинный пароль, например:requirepass ;ksu4wYuwQR82Hr$После установки пароля сохраните файл и перезапустите Redis.
Изменение имен опасных команд#
Redis позволяет переименовывать или полностью отключать определенные команды, которые считаются опасными.
При запуске пользователями такие команды могут использоваться для изменения конфигурации, уничтожения или повреждения данных. Как и пароль аутентификации, команды переименовываются или отключаются в файле /etc/redis/redis.conf.
Некоторые команды, которые считаются опасными: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG.
Отключите команду, для этого переименуйте ее на пустую строку, как показано ниже:
rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command DEBUG ""Переименуйте команду, укажите другое имя, как показано ниже:
rename-command SHUTDOWN SHUTDOWN_MENOT rename-command CONFIG ASC12_CONFIGПосле изменений сохраните файл и перезапустите Redis.