Kubernetes с отслеживанием состояния mongodb: Что такое правильная строка или как подключиться к mongodb запущенного набора состояний, к которому также подключена служба?

#mongodb #kubernetes

Вопрос:

Вот моя конфигурация YAML (все PV, набор состояний и служба создаются нормально, без проблем). Попробовал кучу решений для строки подключения Kubernetes mongo, но ничего не вышло.

Версия Kubernetes (мини-куб): 1.20.1

Хранилище для конфигурации: NFS (работает нормально, протестировано)

ОС: Linux Mint 20

КОНФИГУРАЦИЯ YAML:

 apiVersion: v1
kind: PersistentVolume
metadata:
  name: auth-pv
spec:
  capacity:
    storage: 250Mi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  nfs:
    path: /nfs/auth
    server: 192.168.10.104
---
apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    role: mongo
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo
  serviceName: mongo
  replicas: 1
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
  volumeClaimTemplates:
    - metadata:
        name: mongo-persistent-storage
      spec:
        storageClassName: manual
        accessModes: ["ReadWriteMany"]
        resources:
          requests:
            storage: 250Mi

 

Комментарии:

1. Алеади попробовал mongodb://<имя_службы>:27017 =<имя_службы>> не работает

Ответ №1:

Я обнаружил несколько проблем в вашем файле конфигурации. В файле манифеста службы, который вы используете

   selector:
    role: mongo
 

Но в вашем шаблоне модуля с полным набором состояний, который вы используете

 labels:
        app: mongo
 

Еще одна вещь, которую вы должны использовать ClusterIP:None , чтобы использовать безголовую службу, которая рекомендуется для набора состояний, если вы хотите получить доступ к базе данных с помощью dns-имени.

Комментарии:

1. Спасибо пулаку, я постараюсь дать вам знать.

Ответ №2:

Для всех зрителей рабочий YAML находится ниже

 right connection string is: mongodb://mongo:27017/<dbname>
 
 apiVersion: v1
kind: PersistentVolume
metadata:
  name: auth-pv
spec:
  capacity:
    storage: 250Mi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: manual
  nfs:
    path: /nfs/auth
    server: 192.168.10.104
---
apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    name: mongo
spec:
  ports:
    - port: 27017
      targetPort: 27017
  selector:
    app: mongo
  clusterIP: None  
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo
  serviceName: mongo
  replicas: 1
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mongo
          image: mongo
          ports:
            - containerPort: 27017
          volumeMounts:
            - name: mongo-persistent-storage
              mountPath: /data/db
  volumeClaimTemplates:
    - metadata:
        name: mongo-persistent-storage
      spec:
        storageClassName: manual
        accessModes: ["ReadWriteMany"]
        resources:
          requests:
            storage: 250Mi