Перенос mongodb из докера в Куберне - PullRequest
0 голосов
/ 21 мая 2019

На данный момент у меня есть кластер Монго с двумя подчиненными и мастером, работающим на докере host1:27017, host2:27018, host3:27018 текущая версия 3.4.1

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

Не все так просто, во-первых, я могу сделать это, мигрировав из3.4.1 до 4.0.9 или у меня возникнут проблемы с репликацией?

Я провел несколько тестов локально, выполняя

docker run -p 27017:27017 mongo:4.0 mongod --replSet rs0  --bind_ip localhost,host1

Но у меня появляется следующая ошибка

Failed to set up listener: SocketException: Cannot assign requested address

Если у вас есть идеи, как это сделать, или просто дайте мне знать, если я иду в правильном направлении:)

1 Ответ

0 голосов
/ 22 мая 2019

Если вы не знакомы с mongodb-replicaset, я рекомендую использовать mongodb-replicaset helm charts напрямую.

Для меня настройка mongodb-replicaset helm charts слишком завершена. Поэтому я просто создаю набор состояний, а затем вручную запускаю репликацию.

Сначала создайте набор состояний и сервис.

apiVersion: v1
kind: Service
metadata:
  name: mongo-rs-headless
spec:
  type: ClusterIP
  clusterIP: None
  selector:
    app: mongo-rs-pod
  ports:
  - name: http
    port: 27017
    protocol: TCP
    targetPort: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: mongo-rs-sts
spec:
  serviceName: mongo-rs-headless
  replicas: 3
  updateStrategy:
    type: OnDelete
  template:
    metadata:
      labels:
        app: mongo-rs-pod
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: compute
        image: mongo:3-stretch
        imagePullPolicy: IfNotPresent
        command:
        - mongod
        - --dbpath=/data/db
        - --port=27017
        - --bind_ip=0.0.0.0
        - --replSet=rs1
        ports:
        - name: mongo
          containerPort: 27017
        volumeMounts:
        - name: mongo-data
          mountPath: /data/db
        livenessProbe:
          exec:
            command:
            - mongo
            - --eval
            - "db.adminCommand('ping')"
          initialDelaySeconds: 30
          timeoutSeconds: 5
          failureThreshold: 3
          periodSeconds: 30
          successThreshold: 1
        readinessProbe:
          exec:
            command:
            - mongo
            - --eval
            - "db.adminCommand('ping')"
          initialDelaySeconds: 5
          timeoutSeconds: 1
          failureThreshold: 3
          periodSeconds: 20
          successThreshold: 1
  volumes:
  - name: mongo-data
    emptyDir: {}

Затем, присоединитесь к одному из mongo-rs-pod, войдите в оболочку mongo, выполните:

rs.initiate({_id: "rs1", members: [
  { _id : 0, host : "mongo-rs-pod-0.mongo-rs-headless.default.svc.cluster.local" },
  { _id : 1, host : "mongo-rs-pod-1.mongo-rs-headless.default.svc.cluster.local" },
  { _id : 2, host : "mongo-rs-pod-2.mongo-rs-headless.default.svc.cluster.local" }
]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...