Как я могу исправить MongoError: на GKE нет прокси-сервера mongos - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь развернуть и Express API на GKE, с Mongo StatefulSet.

1007 * googlecloud_ssd.yaml *

kind: StorageClass
apiVersion: storage.k8s.io/v1beta1
metadata:
  name: fast
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

Монго-statefulset.yaml

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: 2
  template:
    metadata:
      labels:
        role: mongo
        environment: test
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo
          command:
            - mongod
            - "--replSet"
            - rs0
            - "--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: "fast"
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

Я развернул свое Express приложение, и оно отлично работает, затем я развернул Mongo, используя вышеуказанную конфигурацию yaml.

Установив строку подключения в выражении как: "MongoDB: //mongo-0.mongo,mongo-1.mongo: 27017 /"

Я вижу, что обновленные модули не запускаются.

Глядя на логи этого контейнера, я вижу

{
 insertId:  "a9tu83g211w2a6"  
 labels: {…}  
 logName:  "projects/<my-project-id>/logs/express"  
 receiveTimestamp:  "2019-06-03T14:19:14.142238836Z"  
 resource: {…}  
 severity:  "ERROR"  
 textPayload:  "[ ERROR ] MongoError: no mongos proxy available
"  
 timestamp:  "2019-06-03T14:18:56.132989616Z"  
}

enter image description here

Я не уверен, как отлаживать / исправлять MongoError: no mongos proxy available

Редактировать Поэтому я уменьшил свои реплики до 1 на каждой, и теперь он работает.

Я не понимаю, почему это не сработает более чем на 1 реплике.

enter image description here

1 Ответ

0 голосов
/ 10 июня 2019

Соединение с базой данных Mongodb не работает по двум причинам:

  1. Невозможно подключиться к высокодоступному развертыванию MongoDB, запущенному внутри кластера Kubernetes, с использованием DNS-имен Pods.Эти уникальные имена POD: mongo-0.mongo, mongo-1.mongo с соответствующими полными доменными именами как mongo-0.mongo.default.svc.cluster.local, mongo-1.mongo.default.svc.cluster.local могут быть доступны только в кластере K8S.У вас есть веб-приложение Express, которое запускается на стороне клиента (веб-браузер) и требует подключения к вашему mongodb за пределами кластера.

  2. Строка подключения: вы должны подключиться к первичному узлу черезИмя службы Kubernetes, которая абстрагирует доступ к модулям за наборами реплик.

Решение:

Создайте отдельную службу Kubernetes для LoadBalancer или NodePortвведите свой основной набор реплик и используйте <ExternalIP_of_LoadBalancer>:27017 в строке подключения.

Я бы посоветовал вам взглянуть на официальную диаграмму управления mongodb , чтобы увидеть, какие файлы манифестатребуется, чтобы удовлетворить ваш случай.

Подсказка: используйте '--set service.type = LoadBalancer' с этой диаграммой управления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...