Автомасштабирование Kubernetes MongoDB

Я развернул настройку mongodb с отслеживанием состояния в своем кластере k8s. Каждый раз, когда я масштабирую новый модуль, мне нужно добавить модуль из консоли mongodb с помощью команды rs.add(). Могу ли я каким-либо образом организовать это?.. Также, как я могу выставить свою службу mongodb за пределы моего кластера k8s.. Изменение типа службы на nodeport у меня не сработало.. Пожалуйста, помогите.

Ниже приведен файл yaml с отслеживанием состояния, который я использовал для развертывания mongodb.

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
  - port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  template:
    metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo:3.4
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--bind_ip"
            - 0.0.0.0
            - "--smallfiles"
            - "--noprealloc"
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
        - name: mongo-sidecar
          image: cvallance/mongo-k8s-sidecar
          env:
            - name: MONGO_SIDECAR_POD_LABELS
              value: "role=mongo,environment=test"
  volumeClaimTemplates:
  - metadata:
      name: mongo-persistent-storage
      annotations:
        volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 2Gi

person Nithin Radhakrishnan    schedule 18.09.2019    source источник


Ответы (2)


Как предполагает @PjoterS, вы можете масштабировать реплики или модули mongoDB внутри kubernetes с помощью HPA.

Но при этом вы также должны позаботиться о монтировании тома с ним, а также о задержке данных между репликами.

Я бы посоветовал сначала проверить собственный вариант кластера масштабирования, предоставляемый самой базой данных mongo, и настроить. Вы можете использовать некоторые операторы для mongoDB, например: https://docs.mongodb.com/kubernetes-operator/master/tutorial/install-k8s-operator/

В противном случае, если ваша текущая конфигурация соответствует собственному кластеру и поддерживает масштабирование реплики и копирование данных между репликами, вы можете перейти на HPA.

Вы также можете взглянуть на это: https://medium.com/faun/scaling-mongodb-on-kubernetes-32e446c16b82

person Harsh Manvar    schedule 20.09.2019

Поскольку вы используете Kubernetes, платформу Container Orchestration, вы всегда можете масштабировать deployment/statefulset, используя $ kubectl scale deployment [deployment_name] --repplicas=X или $ kubectl scale statefulset [statefulset-name] --replicas=X, где X означает, сколько всего модулей вы хотите иметь в развертывании. Он будет автоматически создавать модули на основе ваших настроек развертывания. Если вы не хотите создавать его вручную, вам следует прочитать об автомасштабировании Kubernetes — HPA.

Что касается выставления приложения за пределы Kubernetes, вы должны сделать это с помощью Service. Дополнительную информацию можно найти здесь. Я не уверен, что NodePort прав в этом сценарии. Вы можете проверить описание ServiceType.

Однако я не очень хорошо знаком с MongoDB с Kubernetes, но, возможно, эти руководства помогут вам. Масштабирование MongoDB в Kubernetes, Запуск MongoDB как микросервиса с Docker и Kubernetes, Запуск MongoDB в Kubernetes с помощью StatefulSets.

Надеюсь, это поможет.

person PjoterS    schedule 20.09.2019
comment
Не могли бы вы уточнить, как HPA решает запуск команды rs.add() на каждом новом узле? - person ZedTuX; 25.11.2019