Redis#
Redis — это база данных размещаемая в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Является хранилищем типа «ключ-значение», но поддерживает множество различных типов значений: строки, списки, наборы, отсортированные наборы, хеши, потоки, HyperLogLog, растровые изображения.
Используется как для баз данных, так и для реализации кэшей, брокеров сообщений.
Сценарии использования Redis#
Настройка 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вместе с манифестом 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:
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: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
Настройка пароля для аутентификации 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.