Поиск по сайту:

Как развернуть многоуровневое приложение с помощью Kubernetes


На этой странице

  1. Предварительные условия
  2. Что будем делать?
  3. Развертывание многоуровневого приложения
  4. Заключение

Многоуровневое приложение – это приложение, распределенное между несколькими уровнями. Он логически разделяет операционные уровни. Количество слоев зависит от требований бизнеса и приложений. В этой статье мы увидим приложение, разделенное на 2 уровня: внутренний и внешний. Мы будем использовать MongoDB в качестве бэкэнда для хранения данных и Python Flask в качестве внешнего веб-сервера. Мы будем развертывать эти два приложения с помощью развертываний в Kubernetes и иметь сервисы для пересылки к ним запросов.

Предпосылки

  1. Кластер Kubernetes по крайней мере с 1 рабочим узлом.
    Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на экземплярах AWS Ubuntu 18.04 EC2.
  2. Основные сведения о развертываниях и службах.
    Обратитесь к разделу Услуги, чтобы получить общее представление.

Что мы будем делать?

  1. Развертывание многоуровневого приложения

Развертывание многоуровневого приложения

Создайте новый файл с именем \test-db-deployment.yaml\ со следующим содержимым. Это определит развертывание MongoDB, которое будет действовать как база данных, внутренний уровень. var slotId=div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins =document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset .fullWidthResponsive=true;}

vim test-db-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-db
spec:
  selector:
    matchLabels:
      appdb: testdb
  replicas: 1
  template:
    metadata:
      labels:
        appdb: testdb
    spec:
      containers:
      - name: test-db
        image: mongo:3.3
        env:
        - name: MONGODB_DATABASE
          value: testdata
        ports:
        - containerPort: 27017

Теперь создайте службу, которая будет обслуживать запросы к MongoDB из нашего внешнего приложения. Эта служба будет прослушивать порт 27017 и пересылать запросы в MongoDB через тот же порт.

vim test-db-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mongodb
  labels:
    app: testdb
spec:
  ports:
  - port: 27017
    protocol: TCP
  selector:
    appdb: testdb

Следующим шагом является определение внешнего интерфейса. Создайте новый файл, содержащий следующее определение развертывания.

Это будет прослушивать порт 5000.

Запросы к MongoDB будут переадресовываться на MONGODB_HOST, т. е. в службу mongodb.

vim test-web-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 1
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test-app
        image: teamcloudyuga/rsvpapp
        env:
        - name: MONGODB_HOST
          value: mongodb
        ports:
        - containerPort: 5000
          name: web-port

Чтобы получить доступ к внешнему интерфейсу, мы создадим службу типа NodePort, прослушивающую порт 31081. Это означает, что к веб-серверу Python Flask можно получить доступ по IP=IP-Of-Any-Node и Port=31081. Создайте новый со следующим определением службы.

vim test-web-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: test
  labels:
    apps: test
spec:
  type: NodePort
  ports:
  - name: tcp-31081-5000
    nodePort: 31081
    port: 5000
    protocol: TCP
  selector:
    app: test

Теперь все готово для создания двухуровневого примера приложения. Прежде чем мы продолжим, давайте проверим, есть ли в кластере какие-либо объекты.

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

kubectl получить стручки

kubectl получить развертывания

kubectl получить сервис

На приведенном выше снимке экрана видно, что в кластере есть только 1 служба kubernetes по умолчанию.

Теперь выполните следующую команду одну за другой из каталога, в котором вы создали 4 файла, чтобы создать развертывание MongoDB, службу MongoDB, развертывание веб-сервера Python Flask и службу веб-сервера Python Flask.

kubectl создать -f test-db-deployment.yaml

kubectl создать -f test-db-service.yaml

kubectl создать -f test-web-deployment.yaml

kubectl создать -f test-web-service.yaml

На приведенном выше снимке экрана видно, что развертывание MongoDB, служба MongoDB, развертывание веб-сервера Python Flask и служба веб-сервера Python Flask созданы успешно.

Чтобы проверить то же самое, выполните следующие команды.

kubectl получить стручки

kubectl получить развертывания

kubectl получить сервис

На следующем снимке экрана видно, что созданы 2 модуля и 2 службы. Созданные модули контролируются созданным нами развертыванием.

Теперь у нас все готово для доступа к приложению по IP-адресу любого узла: 31081.

Как только вы нажмете URL-адрес в браузере, вы увидите приложение следующим образом. Это пример приложения, которое использует общедоступный образ докера и принадлежит CloudYuga. Здесь вы можете видеть, что счетчик RSVP равен 0, это означает, что в MongoDB нет данных.

Теперь мы можем добавить несколько демонстрационных записей.

После добавления нескольких записей мы видим, что количество изменилось. Это означает, что данные были сохранены в MongoDB.

Теперь, когда вам больше не нужны эти приложения, вы можете удалить все объекты, выполнив следующую команду из каталога, где находятся все ваши объектные файлы Kubernetes.

кубектл удалить -f .

Приведенная выше команда удалит развертывание MongoDB, службу MongoDB, развертывание веб-сервера Python Flask и созданную нами службу веб-сервера Python Flask.

Чтобы проверить, все ли созданные нами объекты были успешно удалены, выполните следующую команду.

кубектл получить все

На следующем снимке экрана видно, что существует только одна служба kubernetes по умолчанию, а созданные нами объекты больше не существуют.

Заключение

В этой статье мы создали развертывание внутренней базы данных и службы MongoDB для доступа к базе данных, а для внешнего интерфейса мы создали развертывание приложения на основе Python Flask и службу для доступа к этому внешнему интерфейсу. Мы также видели, что данные сохраняются во внутренней базе данных. Это пример двухуровневого приложения, в котором используются общедоступные образы докеров.