Проекты*

Средство улучшенного распределения контейнеризации в облаке In.Cloud

Работа призёра конкурса проектов и исследований «Инженеры будущего» Открытой городской научно-практической конференции «Инженеры будущего» в секции «Информационные технологии, программирование, прикладная математика, социальный инжиниринг»

Направление работы: Инженеры
Авторы работы: ГБОУ Школа № 1528
Предметы: Информатика
Классы: 10 класс
Мероприятия: Конкурс проектов и исследований «Инженеры будущего» открытой городской научно-практической конференции «Инженеры будущего» 2021 года

Актуальность

Осенью 2020 года нам впервые пришлось начать работу с docker-проектами. Их суть заключается в том, что для проекта создаётся некоторая искусственная среда, называемая контейнером – весь написанный код, все подсервисы запускаются на отдельной машине, которая взаимодействует с основным сервером, т. е. перенаправляет открытые порты и ограничивает программу в использовании ресурсов сервера, также доступно и много других функций для регулировки и контроля. Со временем количество нашей работы с контейнеризацией только возрастало, а так как проекты были для разных целей, запускались они также на разных серверах.

Две платформы, используемые сейчас, Portainer и Jenkins, не способны предоставить разработчикам интуитивно понятный интерфейс, а также не раскрывают полный потенциал docker-команд.

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

Возникла проблема отсутствия возможности удобно, быстро и мобильно контролировать запущенные проекты на серверах. Решение проблемы создание средства единого контроля и управления проектами, запущенных путём контейнеризации docker с использованием платформы In.Cloud. Это группа сервисов для управления собственными серверами и возможностью загрузки и дальнейшего хранения на них файлов, а также запуска docker-контейнеров и их управления через платформу.

Цель

Организовать управление контейнерами типа docker и docker-compose на разных серверах.

Задачи

  1. Изучить язык программирования Python и проанализировать существующие решения для работы с docker-проектами.
  2. Организовать платформу In.Cloud для обеспечения безопасного хранения информации.
  3. Изучить принципы работы API для обработки команд с главного сервера, куда, в свою очередь, сам пользователь отправляет запросы.
  4. Разработать подсервис In.Cloud Collab для организации совместной работы над проектами.
  5. Представить разработку пользовательского интерфейса к платформе.

Оснащение и оборудование, использованное при создании работы

  • Персональный компьютер с установленным ПО (IDE pycharm, Python)
  • Github.com
  • Docker

Описание

Первый этап работы. Выбор языка программирования Python, знакомство с библиотекой subprocess, которая позволяет запускать контейнеры путём выполнения python-скрипта. Вывод: используем эту библиотеку, она будет отвечать за обращение с сервером и управление процессами, запущенными на серверах, отслеживать их «живучесть», а также собирать статистику об использовании ресурсов.

Серверная часть будет реализована через библиотеку, которая бы позволила удалённо работать с сервером. В течение года мы ежедневно действовали с фреймворком FastAPI и ORM Tortoise для работы с БД, так что сомнений не оставалось, и для создания API были использованы именно эти средства, а в качестве самой СУБД были выбраны SQLite3 и PostgreSQL.

Второй этап. Так как проект запланирован не только для личного пользования, но и для потенциального выхода «на публику», необходимо просчитать нагрузку на серверы самой платформы и сделать решение настолько стабильным и эффективным, насколько это возможно.

Путём размышлений, тестов, а также на основе собственного опыта, мы разделили всю платформу на четыре крупных подсервиса:

  • In.Cloud Driver (отвечает за работу на каждом из серверов, зарегистрированных в платформе, – за управление контейнерами на машине, за сбор статистики и за безопасную передачу файлов между пользователем и сервером).
  • In.Cloud Collab (отвечает за совместную работу над серверами и контейнерами и за образование «команд» в платформе).
  • In.Cloud Control (отвечает за хранение и управление системной информацией, такой как данные пользователя, токены для доступа к аккаунту, список всех привязанных серверов к платформе, а также распределение команд пользователя по серверам).

Все эти подсервисы тесно связаны и вместе образуют качественную и удобную платформу.

В настоящий момент ведётся разработка главного пользовательского интерфейса, который бы предоставлял доступ к самой платформе In.Cloud. Для этого использован фреймворк Electron для разработки PC-приложения и фреймворк Flask для создания веб-приложения. Проблема заключается в освоении нового для меня языка JavaScript. Однако первый прототип приложения уже готов:

Результаты работы/выводы

На сегодняшний день по результатам проведённой работы в двух IT-стартапах активно используется созданная платформа, а также прорабатывается модель для выхода на более широкую аудиторию.

Перспективы использования результатов работы

В дальнейшем планируется воссоздать систему аренды ячеек на сервере In.Cloud Cell. Система будет напоминать VDS, однако такие ячейки гораздо выгоднее для пользователя, так как платить он будет не за весь сервер, а за ресурсы, которые использует. Если на весь проект ему надо 200 Мб оперативной памяти и 2 Гб постоянной памяти, ячейка даст ему именно столько, т. к. Docker-контейнер запускается на заготовленном сервере и не резервирует лишнее место.

Сотрудничество с вузом/учреждением при создании работы

Компания «HaClever» (тестирующая разработку компания)