Развертывание Redis в Kubernetes

Я пытаюсь запустить кластер Redis в Kubernetes. Я не планирую сохранять какие-либо данные Redis на диск. Можно ли запустить кластер Redis как развертывание Kubernetes, а не как набор с отслеживанием состояния?


person Sashi    schedule 06.04.2020    source источник


Ответы (2)


Да, хотя я бы, вероятно, по-прежнему использовал StatefulSet специально для функций, чтобы обеспечить запуск только одного модуля за раз.

person coderanger    schedule 06.04.2020
comment
Спасибо, но зачем нам эта функция, т.е. запуск только одного модуля? Разве у нас не должно быть несколько модулей, работающих для обеспечения высокой доступности и балансировки нагрузки? - person Sashi; 06.04.2020
comment
Да, будет работать несколько, StatefulSets просто убедитесь, что они запускаются по одному, чтобы у вас не возникло проблемы с паническим бегством, пытающимся присоединиться к кластеру сразу. - person coderanger; 06.04.2020
comment
Все доступные примеры показывают, что кластер Redis развертывается как комбинация StatefulSets и PersistentVolumes Kubernetes. Это также имеет смысл, поскольку каждый экземпляр Redis зависит от файла конфигурации, который отслеживает другие экземпляры кластера и их роли. Известны ли вам примеры развертывания Redis в кластере с помощью контроллера развертывания? - person Sashi; 16.04.2020

да, можно сохранять данные в PVC с наборами с отслеживанием состояния, однако в диаграмме управления для кластера HA Redis они используют только наборы с отслеживанием состояния:

apiVersion: v1
kind: Service
metadata:
  name: redis
spec:
  ports:
    - port: 6379
      name: redis
  clusterIP: None
  selector:
    app: redis
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: redis
spec:
  selector:
    matchLabels:
      app: redis  
  serviceName: redis
  replicas: 1
  template:
    metadata:
      labels:
        app: redis 
    spec:
      containers:
        - name: redis
          image: redislabs/redis
          args: ["--requirepass", "admin", "--appendonly", "yes", "--save", "900", "1", "--save", "30", "2"]
          ports:
            - containerPort: 6379
              name: redis
          resources:
            limits:
              cpu: .50
              memory: 1500Mi
            requests:
              cpu: .25
              memory: 1024Mi
          volumeMounts:
            - name: redis-volume
              mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: redis-volume
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 20Gi
person Harsh Manvar    schedule 06.04.2020
comment
Да, я видел схему руля и отсюда вопрос. Зачем нужны наборы с состоянием? Почему мы не можем просто использовать контроллер развертывания и запустить развертывание без сохранения состояния? - person Sashi; 06.04.2020
comment
Я надеюсь, что у вас есть представление о приложениях без сохранения состояния и с сохранением состояния. когда приложение ничего не хранит в памяти или на томе, вы можете использовать развертывание без сохранения состояния, однако использование с отслеживанием состояния, когда приложение хранит что-либо в памяти, поэтому всегда следите за тем, чтобы реплики запускались после того, как одна из них завершается правильно. - person Harsh Manvar; 06.04.2020
comment
Согласен, но в моем случае я не использую какой-либо постоянный том, и я могу потерять свои данные в памяти. Почему я все еще должен определять набор Stateful для Redis? - person Sashi; 06.04.2020