Что такое CaaS – контейнеры как услуга?

Контейнеры как сервисное покрытие

В этой статье мы поговорим о контейнерах как услуге (CaaS). Это одна из новых, но мощных облачных моделей. Вы узнаете о ее основных функциях, плюсах и минусах, сравнении с другими облачными моделями, а также о том, как развернуть простое приложение с помощью контейнеров.

Contents

Основные выводы

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

Что такое контейнеры как услуга?

Определение CaaS: Containers as a Service – это модель облачных вычислений, которая позволяет разработчикам загружать, создавать, масштабировать и управлять контейнерами.

Контейнеры DevOps – это легкие автономные исполняемые пакеты, включающие все необходимое для запуска приложения. Это время выполнения, код, библиотеки, файлы конфигурации и многое другое. Контейнеры отличаются высокой переносимостью, небольшим размером и эффективностью.

Используя CaaS, разработчики и операционные ИТ-команды могут не беспокоиться о базовой инфраструктуре. Вместо этого они могут мыслить на гораздо более высоком уровне.

Им нужно только написать приложение, докеризировать его и перенести в облако. Обо всем остальном – масштабировании, балансировке нагрузки и мониторинге – позаботится облачный провайдер!

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

Каковы основные функции Containers as a Service?

Не существует официальной спецификации, которая бы определяла, какие функции должен включать в себя CaaS. Они различаются у разных производителей. Тем не менее, самыми основными функциональными возможностями Containers as a Service являются:

  • Время выполнения контейнера (отвечает за запуск ваших контейнерных приложений)
  • Реестр контейнеров (позволяет хранить и распространять уже созданные образы Docker)
  • Автоматическое масштабирование (увеличение или уменьшение количества контейнеров в зависимости от трафика)
  • Встроенная система CI/CD (берет ваш код из системы VCS, такой как GitHub или GitLab).
  • Балансировка нагрузки (распределяет трафик между несколькими контейнерами для повышения производительности)
  • Мониторинг и ведение журналов (обеспечивает расширенные возможности мониторинга контейнеров)

В чем преимущества контейнеров как сервиса?

Ускоренная разработка и развертывание

Использование CaaS позволяет значительно ускорить процесс разработки и развертывания программного обеспечения. Контейнеры упрощают процесс создания локальных сред разработки для начинающих разработчиков. Все, что им нужно сделать, – это выполнить пару команд, вместо того чтобы устанавливать кучу зависимостей или возиться с настройками ОС.

Кроме того, как только ваш проект будет контейнеризирован, его можно будет легко развернуть у любого поставщика CaaS.

Эффективность использования ресурсов

Контейнеры отличаются бережным отношением к ресурсам. Они разработаны для эффективного использования системных ресурсов, таких как процессор, память и хранилище. С помощью контейнеров можно запускать больше приложений, используя меньшее количество системных ресурсов. По сравнению с виртуальными машинами контейнеры более оптимизированы по ресурсам.

Портативность

Контейнерные приложения отличаются высокой степенью переносимости, поскольку они не зависят от операционной системы или базового оборудования. Используя CaaS, вы больше никогда не столкнетесь с проблемой “это работает на моей машине”.

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

Масштабируемость

Контейнеры в сочетании с программным обеспечением для оркестровки, таким как Kubernetes, обладают высокой масштабируемостью. Большинство поставщиков CaaS имеют встроенные функции автомасштабирования, балансировки нагрузки и другие. Это позволяет им принимать любой трафик и быстро масштабироваться после окончания всплеска трафика.

Упрощенная эксплуатация

CaaS устраняет разрыв между средой разработки и производственной средой. Кроме того, она упрощает процесс DevOps, предлагая встроенную систему CI/CD, которая интегрируется с вашей системой VCS.

Кроме того, CaaS позволит вам значительно сократить расходы, поскольку вам не понадобятся системные администраторы или инженеры DevOps.

Каковы ограничения контейнеров как сервиса?

Проблемы безопасности

Контейнеры обеспечивают меньшую изоляцию и безопасность, чем виртуальные машины, поскольку они используют одно и то же системное ядро. Это может быть потенциальным риском для безопасности. Если вы запускаете процессы контейнера Docker с правами root, хакер может выйти из контейнера и получить контроль над хост-системой.

Отсутствие контроля

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

Кривая обучения

Модель Containers as a Service более сложна, чем PaaS или BaaS. Она требует больших технических знаний о программировании, технологиях контейнеризации, Docker и т. д. Она более сложна в освоении, но овладение ею поможет вам сэкономить много времени и денег.

Постоянство данных

Контейнеры предназначены для работы без статических данных. Их нельзя использовать для хранения файлов, баз данных или чего-то еще, что требует сохранения данных. При использовании CaaS вам придется воспользоваться сторонним сервисом для размещения файлов, например AWS S3, Google Cloud Storage и т. д. Что касается базы данных, вы можете воспользоваться управляемым решением для баз данных.

Какую роль играют Docker и Kubernetes в платформе CaaS?

Docker и Kubernetes играют важнейшую роль в большинстве CaaS-платформ.

Docker – это бесплатная платформа с открытым исходным кодом для создания, развертывания, запуска и управления контейнерами. Она была выпущена в 2013 году и стала стандартом де-факто для упаковки контейнерного программного обеспечения.

Kubernetes (иногда также упоминается как K8s) – это программное обеспечение для оркестровки. Оно работает на более высоком уровне, чем Docker. Цель Kubernetes – обеспечить слаженную работу контейнерных кластеров. Он заботится о масштабировании, балансировке нагрузки, замене сломанных контейнеров и так далее.

Чем Containers as a Service отличается от других моделей?

В этом разделе мы сравним CaaS с другими облачными вычислительными сервисами, включая IaaS, PaaS и BaaS. Все они имеют свои плюсы и минусы, которые следует учитывать при развертывании проекта.

Исходя из уровней абстракции, CaaS находится где-то между IaaS и PaaS (как показано на рисунке ниже).

Iaas vs Caas vs PaaS vs BaaS

CaaS против IaaS

Инфраструктура как услуга (IaaS) – это гибкая модель облачных вычислений, при которой поставщик облачных услуг предлагает базовую инфраструктуру в виртуализированной среде. Сюда входят серверы, системы хранения данных, операционные системы и сети. IaaS – это наименее абстрагированный вариант, предоставляющий клиентам полный контроль над инфраструктурой.

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

CaaS против PaaS

Платформа как услуга (PaaS) – это услуга облачных вычислений, которая предоставляет разработчикам инструменты для создания и развертывания приложений. PaaS позволяет пользователям сосредоточиться на своем приложении, а не беспокоиться о базовой инфраструктуре. Большинство поставщиков PaaS позволяют запустить приложение в один-два клика!

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

Чтобы узнать больше о платформе как услуге, прочитайте статью Что такое Paas?

CaaS против BaaS

Backend as a Service (BaaS) – это модель облачных вычислений, которая полностью абстрагирует бэкенд от проекта. Она включает в себя базу данных, файловое хранилище, управление пользователями, API, SDK, push-уведомления, аутентификацию и многое другое. BaaS позволяет сосредоточиться на фронтенде и бизнес-логике, а не тратить время и деньги на повторяющиеся задачи программирования.

CaaS может использоваться для развертывания бэкендов и фронтендов, а BaaS – в основном для развертывания бэкендов. BaaS очень прост в использовании и иногда не требует никакого кода. CaaS, с другой стороны, требует приличных технических знаний в области программирования, докеризации и DevOps.

Чтобы узнать больше о сервисе Backend as a Service, ознакомьтесь с разделом Что такое BaaS?

Каковы лучшие поставщики услуг Containers as a Service?

Back4app Containers

Back4app Containers – это мощный облачный сервис, который предлагает CaaS-платформу для развертывания и масштабирования приложений в глобально распределенных контейнерах.

Она позволяет разработчикам сосредоточиться на своем программном обеспечении и процессе докеризации, не заботясь о DevOps. Платформа имеет встроенную систему CI/CD, интеграцию с GitHub и поддерживает развертывание без простоя.

Лучше всего то, что он предлагает бесплатный тарифный план и позволяет запустить ваше приложение в считанные минуты!

Amazon Elastic Container Service

Amazon Elastic Container Service (ECS) – это полностью управляемый сервис оркестровки контейнеров, который упрощает управление и развертывание контейнерного программного обеспечения. Все, что вам нужно сделать, – это описать свое приложение и необходимые ресурсы, а все остальное сделает AWS.

Плата за ECS не взимается, поскольку ECS использует другие службы AWS в фоновом режиме. Чтобы эффективно использовать ECS, вы должны быть знакомы с экосистемой AWS. AWS также предлагает бесплатный уровень для новых клиентов.

Google Cloud Kubernetes

Google Cloud Kubernetes (GKE) – это платформа оркестровки Google на базе Kubernetes. Она позволяет поставить контейнеры на автопилот, избавляя вас от необходимости управлять узлами. В ее состав входят готовые приложения и шаблоны Kubernetes, возможности автомасштабирования, управление несколькими кластерами и многое другое!

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

Как разместить простое приложение с помощью контейнеров?

В этом разделе мы рассмотрим, как собрать, докеризировать и развернуть простое веб-приложение на Python. Это руководство было разработано специально для Back4app Containers, но аналогичные шаги можно применить и к любому другому CaaS-провайдеру.

Цели

  1. Закодируйте приложение.
  2. Загрузите приложение в Docker и протестируйте его.
  3. Разместите исходный код на GitHub.
  4. Разверните приложение на CaaS.

Код приложения

Чтобы продемонстрировать процесс развертывания, мы создадим простой RESTful API с помощью FastAPI – современного, высокопроизводительного фреймворка на Python для создания готовых к производству API.

Настройка проекта

Начните с создания специальной папки для проекта и виртуальной среды:

$ mkdir fastapi-example && cd fastapi-example
$ python3.9 -m venv env && source env/bin/activate

Затем установите FastAPI со всеми его зависимостями:

$ pip install "fastapi[all]"

Использование спецификатора extra устанавливает некоторые дополнительные зависимости, такие как сервер Uvicorn, шаблонизатор Jinja2 и так далее. Если вам нужен самый минимум, не указывайте extra.

Создайте файл main.py со следующим содержимым:

# main.py

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    return {"message": "Back4app Containers rocks!"}

Это самое базовое приложение FastAPI, которое можно написать. Нам пришлось импортировать FastAPI, инициализировать его и зарегистрировать корневую конечную точку. При посещении / должно появиться сообщение Back4app Containers rocks!

Запуск и тестирование

Для запуска веб-приложения вы можете использовать встроенный ASGI-сервер Uvicorn:

$ uvicorn main:app --reload

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [9528] using WatchFiles
INFO:     Started server process [26308]
INFO:     Waiting for application startup.
INFO:     Application startup complete.  

Мы добавили флаг --reload, потому что хотим, чтобы сервер перезагружался, если мы вносим какие-либо изменения в исходный код.

Используйте cURL для отправки GET-запроса к корню API:

$ curl http://localhost:8000/

{
    "message": "Back4app Containers rocks!"
}

требования.txt

Еще одна вещь, которую нам нужно сделать, – это записать все требования в файл requirements.txt. Это позволит другим быстро установить все необходимые зависимости для нашего проекта.

$ pip freeze > requirements.txt

fastapi==0.97.0
pydantic==1.10.9
python-dotenv==1.0.0
...

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

Приложение Dockerize

Прежде чем приступить к работе, убедитесь, что на вашей локальной машине установлен Docker. Лучший способ проверить это – запустить docker --version в терминале.

Dockerfile

Для докеризации нашего проекта мы будем использовать Dockerfile. Dockerfile – это текстовый файл, содержащий все команды, которые пользователь может выполнить для сборки образа.

Создайте Dockerfile в корне проекта следующим образом:

# Dockerfile

# Use Alpine Linux as the base image
# we're using it since it's tiny in size (~5 MB)
FROM python:3.9.6-alpine

# Set the working directory
WORKDIR /app

# Set environmental variables
ENV PYTHONDONTWRITEBYTECODE 1  # Prevents Python from writing out .pyc files
ENV PYTHONUNBUFFERED 1         # Keeps Python from buffering stdin/stdout

# Copy over the requirements file and install the dependencies
COPY ./requirements.txt .
RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

# Copy over the source code
COPY . .

# Expose the port
EXPOSE 80

# Run the server
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

Ознакомьтесь с комментариями, чтобы понять, как работают разные инструкции.

Не волнуйтесь, вам не нужно запоминать все инструкции. Если вы вдруг застрянете, вы всегда можете обратиться к документации Docker. Кроме того, Docker-файлы для большинства языков и фреймворков можно найти в Интернете. Вам нужно только скопировать их и адаптировать под свои нужды.

.dockerignore

Наш проект содержит файлы и каталоги, которые мы не хотим включать в образ Docker. Чтобы игнорировать их, мы можем использовать файл .dockerignore.

Создайте файл .dockerignore в корне проекта:

# .dockerignore

.git/
.idea/
venv/

Не стесняйтесь добавлять дополнительные файлы и каталоги.

Сборка, запуск и тестирование

Перед развертыванием кода на CaaS убедитесь, что ваш проект успешно собирается и запускается на вашей машине.

Начните со сборки образа Docker:

$ docker build -t fastapi-example:1.0 .

Сводка аргументов:

  1. -t fastapi-example:1.0 присваивает теги/имена изображению.
  2. . определяет контекст сборки.

Затем проверьте, успешно ли был создан образ:

$ docker images

REPOSITORY        TAG       ID             CREATED AT      SIZE
fastapi-example   1.0       33feac11707d   4 seconds ago   72.8MB

После этого используйте только что созданный образ для создания нового контейнера:

$ docker run -p 80:80 --name fastapi-example -d fastapi-example:1.0

Сводка аргументов:

  1. -p 80:80 открывает порт 80.
  2. --name fastapi-example называет контейнер.
  3. -d запускает контейнер в отсоединенном режиме (не занимая терминал).
  4. fastapi-example:1.0 указывает, какой образ использовать.

Проверьте работающие контейнеры:

$ docker ps

ID        IMAGE                 COMMAND                CREATED   PORTS                
e67fdeg   fastapi-example:1.0   "uvicorn main:app.."   9s ago    0.0.0.0:80->80/tcp  

И наконец, отправьте GET-запрос на индекс API, чтобы проверить, получите ли вы сообщение:

$ curl http://localhost/

{
    "message": "Back4app Containers rocks!"
}

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

$ docker kill fastapi-example

Отправить на GitHub

Следующие шаги потребуют от вас наличия учетной записи GitHub. Если у вас его нет, зарегистрируйтесь. Кроме того, убедитесь, что Git установлен и настроен на вашей машине.

Создать репозиторий

Войдя в свою учетную запись GitHub, вы будете перенаправлены на панель управления. Используйте кнопку добавления в правом верхнем углу экрана, чтобы увидеть форму создания репозитория.

GitHub Создать репозиторий

Затем дайте репозиторию описательное имя и нажмите кнопку “Создать репозиторий”.

Форма создания репозитория GitHub

GitHub потребуется несколько минут, чтобы создать репозиторий. Как только репозиторий будет создан, вы будете перенаправлены на него. Обратите внимание на “URL удаленного репозитория”.

GitHub Получение удаленного URL-адреса

Передача исходного кода

Двигаясь дальше, вернитесь к своему локальному проекту.

Прежде чем приступить к версионному контролю кода, стоит создать файл .gitignore. Файл .gitignore позволяет определить, какие файлы и каталоги не должны быть добавлены в систему контроля версий. Этот файл работает так же, как и файл .dockerignore.

Создайте в корне проекта файл .gitignore со следующим содержимым:

# .gitignore

.idea/
venv/
.env
build/

Не стесняйтесь изменять файл в соответствии с вашими потребностями.

Затем откройте терминал и выполните следующую команду, чтобы инициализировать локальный Git-репозиторий:

$ git init

Затем добавьте все файлы в VCS и создайте начальный коммит:

$ git add .
$ git commit -m "my initial commit"

Наконец, добавьте удаленный источник GitHub и разместите на нем исходный код:

$ git remote add origin <remote_url>
$ git push origin master

Обязательно замените на удаленный URL-адрес из предыдущего шага.

На этом все должно быть готово. Если вы сейчас посмотрите на страницу репозитория GitHub, вы увидите, что все файлы были успешно добавлены.

Развернуть приложение

Чтобы развернуть приложение в Back4app Containers, вам понадобится учетная запись Back4app. Если у вас его еще нет, пройдите регистрацию.

Когда вы войдете в систему, вы увидите список ваших приложений. Нажмите на кнопку “Создать новое приложение”, чтобы начать процесс создания приложения.

Back4app Создать приложение

Back4app позволяет развертывать два типа приложений – либо Backend как сервис (BaaS), либо Containers как сервис (CaaS). Поскольку мы развертываем контейнерное приложение, выбираем вариант “Контейнеры как сервис”.

Back4app Containers as a Service

Если вам все еще нужно связать свой профиль GitHub и импортировать репозиторий, который мы создали в предыдущем шаге. Далее выберите его.

Back4app Containers Select Repository

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

Поскольку мы развертываем простое приложение, нам не нужны никакие из этих опций. Вам нужно только задать “Имя приложения” и нажать кнопку “Создать приложение”.

Back4app Контейнеры Настроить приложение

Back4app Containers потребуется несколько минут, чтобы извлечь исходный код из GitHub, собрать образ и запустить новый контейнер. Как только ваше приложение будет готово, статус изменится на “Готово”.

Когда это произойдет, вы можете нажать на зеленую ссылку в левой части экрана, чтобы открыть свое приложение в браузере. Вы также можете заметить, что Back4app Containers выдала бесплатный SSL-сертификат для вашего приложения.

Развертывание контейнеров Back4app завершено

Хорошая работа, вот и все!

Заключение

В заключение вы узнали о CaaS – одной из лучших нативных облачных моделей для микросервисной архитектуры. Теперь вы знаете ее основные особенности, преимущества, ограничения и лучших поставщиков CaaS. Кроме того, вы узнали, как развернуть простое докеризованное приложение на Back4app Containers.

Исходный код проекта доступен в репозитории back4app-containers-fastapi.

Дальнейшие шаги

  1. Посмотрите на многоступенчатые сборки, чтобы улучшить свои Docker-файлы и упростить их поддержку.
  2. Хорошей практикой безопасности является запуск процессов Docker Container под пользователем, не являющимся пользователем root.
  3. Ознакомьтесь с документацией Back4app Containers, чтобы узнать, как развернуть другие языки программирования и фреймворки.

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Что такое Containers as a Service?

Containers as a Service (CaaS) — это модель облачных вычислений, которая позволяет разработчикам загружать, собирать, масштабировать и управлять контейнерами. Контейнеры — это небольшие исполняемые пакеты приложений, которые легко развёртываются в любой среде. С помощью CaaS разработчики и команды ИТ-операций могут не беспокоиться о базовой инфраструктуре и сосредоточиться на более высокоуровневых задачах.

Каковы преимущества Containers as a Service?

– Быстрая разработка и развёртывание
– Эффективное использование ресурсов
– Портативность
– Масштабируемость
– Упрощённая эксплуатация

Каковы недостатки Containers as a Service?

– Проблемы с безопасностью
– Недостаток контроля
– Сложность освоения
– Сохранение данных

Какие лучшие провайдеры Containers as a Service?

– Back4app Containers
– Amazon Elastic Container Service (ECS)
– Google Cloud Kubernetes (GKE)

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

1. Напишите код приложения.
2. Оберните приложение в Docker и протестируйте его локально.
3. Загрузите исходный код на GitHub.
4. Разверните приложение на Back4app Containers.


Leave a reply

Your email address will not be published.