Redis#

Redis — это база данных размещаемая в оперативной памяти, снабжена механизмами снимков и журналирования для обеспечения постоянного хранения (на дисках, твердотельных накопителях). Является хранилищем типа «ключ-значение», но поддерживает множество различных типов значений: строки, списки, наборы, отсортированные наборы, хеши, потоки, HyperLogLog, растровые изображения.

Используется как для баз данных, так и для реализации кэшей, брокеров сообщений.

Сценарии использования Redis#

Настройка Redis с помощью Configmap#

Для выполнения данного сценария необходимы права администратора.

Выполните следующие действия, чтобы настроить Redis с использованием данных, хранящихся в ConfigMap.

  1. Создайте ConfigMapс пустым блоком конфигурации:

    cat <<EOF >./example-redis-config.yaml
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: example-redis-config
    data:
      redis-config: ""
    EOF
    
  2. Примените созданный выше ConfigMap вместе с манифестом pod redis:

    kubectl apply -f example-redis-config.yaml
    kubectl apply -f https://<registry>/content/en/examples/pods/config/redis-pod.yaml
    
  3. Изучите содержимое манифеста 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].

  4. Внесите содержание манифеста, чтобы данные из ConfigMap data.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
    
  5. Изучите созданные объекты:

    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
    
  6. Убедитесь, что ключ redis-config example-redis-config ConfigMap оставлен пустым:

    kubectl describe configmap/example-redis-config
    

    Вывод должен отображать следующее:

    Name:         example-redis-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    redis-config:
    
  7. Используйте kubectl exec для входа в модуль и запуска redis-cli инструмента для проверки текущей конфигурации:

    kubectl exec -it redis -- redis-cli
    
  8. Проверьте maxmemory:

    127.0.0.1:6379> CONFIG GET maxmemory
    

    В выводе должно отображаться значение по умолчанию 0:

    1) "maxmemory"
    2) "0"
    
  9. Проверьте maxmemory-policy:

    127.0.0.1:6379> CONFIG GET maxmemory-policy
    

    В выводе должно отобразиться значение по умолчанию noeviction:

    1) "maxmemory-policy"
    2) "noeviction"
    
  10. Добавьте значения конфигурации в example-redis-configConfigMap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: example-redis-config
    data:
      redis-config: |
        maxmemory 2mb
        maxmemory-policy allkeys-lru    
    
  11. Примените обновленный ConfigMap:

    kubectl apply -f example-redis-config.yaml
    
  12. Проверьте, что 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
    
  13. Значения конфигурации не изменились, поскольку модуль необходимо перезапустить. Чтобы получить обновленные значения из связанных ConfigMap, удалите и заново создайте pod:

    kubectl delete pod redis
    kubectl apply -f https://<registry>/content/en/examples/pods/config/redis-pod.yaml
    
  14. Проверьте значения конфигурации:

    kubectl exec -it redis -- redis-cli
    
  15. Проверьте maxmemory:

    127.0.0.1:6379> CONFIG GET maxmemory
    

    Вывод должен отобразить обновленное значение 2097152:

    1) "maxmemory"
    2) "2097152"
    
  16. Обновите maxmemory-policy:

    127.0.0.1:6379> CONFIG GET maxmemory-policy
    

    Вывод должен отражать значение allkeys-lru:

    1) "maxmemory-policy"
    2) "allkeys-lru"
    

    Вывод сообщает, что все недавно используемые ключи заменены.

  17. Удалите созданные ресурсы:

    kubectl delete pod/redis configmap/example-redis-config
    

Настройка пароля для аутентификации Redis#

Активация пароля Redis включает одну из двух встроенных функций безопасности - команду auth, которая требует от клиентов аутентификации для доступа к базе данных. Пароль настраивается непосредственно в файле конфигурации Redis /etc/redis/redis.conf.

  1. Перейдите к разделу SECURITY и найдите закомментированную директиву:

    # requirepass foobared
    
  2. Удалите символ # из этой строки и замените foobared на надежный и длинный пароль, например:

    requirepass ;ksu4wYuwQR82Hr$
    
  3. После установки пароля сохраните файл и перезапустите Redis.

Изменение имен опасных команд#

Redis позволяет переименовывать или полностью отключать определенные команды, которые считаются опасными.

При запуске пользователями такие команды могут использоваться для изменения конфигурации, уничтожения или повреждения данных. Как и пароль аутентификации, команды переименовываются или отключаются в файле /etc/redis/redis.conf.

Некоторые команды, которые считаются опасными: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME и DEBUG.

  1. Отключите команду, для этого переименуйте ее на пустую строку, как показано ниже:

    rename-command FLUSHDB ""
    rename-command FLUSHALL ""
    rename-command DEBUG ""
    
  2. Переименуйте команду, укажите другое имя, как показано ниже:

    rename-command SHUTDOWN SHUTDOWN_MENOT
    rename-command CONFIG ASC12_CONFIG
    
  3. После изменений сохраните файл и перезапустите Redis.