Как установить и запустить MongoDB в Kubernetes?

Опубликовано: 11 Января, 2023

MongoDB известен как сервер базы данных, ориентированный на документы. Нью-йоркская организация под названием 10 gen создавала платформу как службу, аналогичную Windows Azure, а затем разработала MongoDB как PAAS (платформа как услуга) в 2007 году, а затем выпустила ее как базу данных с открытым исходным кодом. server в 2009 году, а затем компания приобрела популярность как MongoDB Inc, где слово Mongo происходит от Humongous. Проще говоря, мы можем определить его как продукт сервера базы данных с открытым исходным кодом, который используется для хранения документов. Здесь описывается каждый компонент, необходимый для использования MongoDB в Kubernetes, а также то, как сделать коллекцию доступной за пределами Kubernetes. Также как выполнять основные задачи в MongoDB. Для новичка создание отдельных разделов с одновременным пониманием необходимых шагов — отличный способ узнать о Kubernetes и MongoDB.

Манифесты кластера MongoDB Kubernetes

Все Kubernetes Mongdb YAML, используемые в этом руководстве, размещены на Github. Клонируйте репозиторий для справки и использования.

https://github.com/yashjeswani63/kubernetes-mongodb

Мы определили все файлы MongoDB Kubernetes YAML. Если вы не хотите создавать каждый манифест, просто скомпилируйте репозиторий и выполните следующую команду из скомпилированного списка.

kubectl apply -f 

После установки MongoDB в Kubernetes, чтобы очистить записи, выполните следующие действия.

kubectl delete -f 

Начнем с настройки.

Создание секретов MongoDB

Секреты в Kubernetes — это объекты, используемые для предоставления судам конфиденциальной информации. Они аналогичны ConfigMaps с той разницей, что данные хранятся в закодированном формате. Для безопасности нашей модели MongoDB целесообразно ограничить доступ к веб-сайту паролем. Мы будем использовать секреты для монтирования нужных паролей в контейнеры. Сохраните следующий манифест:

mongodb-secrets.yaml

apiVersion: v1

data:

  password: cGFzc3dvcmQxMjM=

  username: YWRtaW51c2Vy

kind: Secret

metadata:

  creationTimestamp: null

  name: mongo-creds

Создайте секрет.

kubectl apply -f mongodb-secrets.yaml

Мы войдем, используя эту информацию.

Создать постоянный том MongoDB

Нам нужны тома, чтобы отслеживать данные. Таким образом, даже если наш pod выйдет из строя — данные не потеряются. Для Kubernetes есть два важных момента для создания томов.

  • PersistentVolumes (PV) : вещи, которые помещают карту в хранилище. Это часть хранилища в коллекции, предоставленной администратором.
  • Continuous Volume Claims (PVC) : элементы Kubernetes, которые служат приложениями для хранения. Kubernetes ищет PV там, где можно запросить пространство и выделить его для PVC. PVC работает, только если в коллекции Kubernetes включена гибкая поставка томов.

Давайте создадим один PVC для нашей модели MongoDB. Сохраните следующее как mongodb-pvc.yaml.

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: pvc

spec:

  storageClassName: “”

  accessModes:

    – ReadWriteOnce 

  volumeName: pv

  resources:

    requests:

      storage: 1Gi

Создайте PV.

kubectl create -f mongodb-pvc.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

  name: mongo-data

spec:

  accessModes:

    – ReadWriteOnce

  capacity:

    storage: 1Gi

  hostPath:

    path: /data/mongo

Развертывание развертывания MongoDB

Давайте сейчас создадим пост. Я снова добавил описание почтового файла MongoDB в конце этого раздела. Сохраните следующий манифест как mongodb-deployment.yaml. Здесь мы используем официальный образ mongo из Docker Hub.

apiVersion: apps/v1

kind: Deployment

metadata:

  creationTimestamp: null

  labels:

    app: mongo

  name: mongo

spec:

  replicas: 1

  selector:

    matchLabels:

      app: mongo

  strategy: {}

  template:

    metadata:

      creationTimestamp: null

      labels:

        app: mongo

    spec:

      containers:

      – image: mongo

        name: mongo

        args: [“–dbpath”,”/data/db”]

        livenessProbe:

          exec:

            command:

              – mongo

              – –disableImplicitSessions

              – –eval

              – “db.adminCommand(‘ping’)”

          initialDelaySeconds: 30

          periodSeconds: 10

          timeoutSeconds: 5

          successThreshold: 1

          failureThreshold: 6

        readinessProbe:

          exec:

            command:

              – mongo

              – –disableImplicitSessions

              – –eval

              – “db.adminCommand(‘ping’)”

          initialDelaySeconds: 30

          periodSeconds: 10

          timeoutSeconds: 5

          successThreshold: 1

          failureThreshold: 6

        env:

        – name: MONGO_INITDB_ROOT_USERNAME

          valueFrom:

            secretKeyRef:

              name: mongo-creds

              key: username

        – name: MONGO_INITDB_ROOT_PASSWORD

          valueFrom:

            secretKeyRef:

              name: mongo-creds

              key: password

        volumeMounts:

        – name: “mongo-data-dir”

          mountPath: “/data/db”

      volumes:

      – name: “mongo-data-dir”

        persistentVolumeClaim:

          claimName: “pvc”

Создать использование.

kubectl apply -f mongodb-deployment.yaml

Приложение YAML MongoDB имеет множество функций, таких как env vars из секретов, зондов и т. д. Давайте углубимся в то, что делает каждая часть.

Подключение к MongoDB извне

Давайте попробуем получить доступ к базе данных без коллекции. Для этого нам нужно создать еще одну службу Kubernetes. Сервисы в Kubernetes — это то, что модули используют для связи. Службы типа ClusterIP часто используются для связи между модулями. Для начала важно знать, что существует два типа сервисов ClusterIP:

  1. Безголовые услуги
  2. Услуги

Стандартные сервисы Kubernetes служат для балансировки нагрузки и следуют циклическому принципу распределения груза. Безголовые сервисы не работают как балансировщики нагрузки. Кроме того, Kubernetes предоставляет стандартные услуги для IP-адресов, в то время как услуги Headless недоступны. Безголовые службы чаще всего используются при использовании приложений с сохранением состояния.

В случае с нашим примером канала MongoDB мы будем использовать стандартный сервис с Nodeport 32000, так как мы используем тип доставки. Давайте создадим службу типа NodePort. Загрузите службу Kubernetes MongoDB ниже YAML как mongodb-nodeport-svc.yaml.

apiVersion: v1

kind: Service

metadata:

  labels:

    app: mongo

  name: mongo-nodeport-svc

spec:

  ports:

  – port: 27017

    protocol: TCP

    targetPort: 27017

    nodePort: 32000

  selector:

    app: mongo

  type: NodePort

status:

  loadBalancer:{}

Создайте SVC-файл.

kubectl create -f mongodb-nodeport-svc.yaml

Для подключения за пределами коллекции Kubernetes необходимо использовать IP-адрес сотрудника коллекции Kubernetes или адрес балансировки нагрузки. Если вы подписаны на Minikube, вы можете использовать minikube IP для подключения. Чтобы определить IP-адрес minikube или URL-адреса службы, используйте следующие инструкции.

minikube ip

minikube service –url mongo-nodeport-svc

Команда подключения:

mongo –host <ip> –port <port of nodeport svc> -u adminuser -p password123