Обзор Nanocl
Nanocl — переносимая платформа с открытым исходным кодом для контейнеров и виртуальных машин на собственной инфраструктуре. Декларативный Statefile описывает Cargo, VM, задания, секреты и ресурсы контроллеров; демон Nanocl согласует эти объекты с локальной средой выполнения.
Название сокращает nano cloud: проект предоставляет полезные облачные примитивы нагрузок без большой плоскости управления.
Возможности Nanocl
- Именованные реплицируемые приложения в Cargo с упорядоченными init-контейнерами и Docker-совместимой конфигурацией.
- Готовность с учётом здоровья, перезапуски, история и контролируемые обновления.
- Управление жизненным циклом контейнеров и VM через HTTP API и CLI
nanocl. - Динамические правила HTTP, потоков и DNS через
ncproxyиncdns. - Секреты, задания, метрики, шаблоны Statefile и резервное копирование состояния.
Nanocl 0.18 прежде всего предназначен для одного узла. В нём нет автоматического планирования на нескольких узлах, автомасштабирования, высокой доступности всего кластера или service mesh. Именованные сети Docker локальны для узла и не принадлежат пространствам имён Nanocl.
Архитектура Nanocl
Клиент nanocl отправляет запросы API в nanocld. Демон хранит желаемое и наблюдаемое состояние в nstore, управляет процессами Docker и публикует события для контроллеров прокси и DNS.
Стандартная установка содержит:
- nanocld / ndaemon — API и контроллер нагрузок.
- nstore — постоянное хранилище состояния управления на CockroachDB.
- nmetrics — сервис метрик хоста
metrsd. - ncproxy — контроллер прокси со встроенным Nginx в том же контейнере. Отдельный сервис
nproxyбольше не требуется. - ncdns — контроллер DNS со встроенным dnsmasq в том же контейнере. Отдельный сервис
ndnsбольше не требуется. - ncvpnkit — сетевой контроллер Docker Desktop, устанавливаемый только для этой среды.
Упрощённая архитектура одного узла:

На схеме каждый Cargo обозначен группой процессов. В 0.18 реплика Cargo может содержать несколько именованных контейнеров приложения и, при необходимости, одну внутреннюю сетевую песочницу.
Основные объекты
Cargo
Cargo — сохраняемая контейнерная нагрузка с одним или несколькими именованными приложениями, необязательными init-контейнерами и числом реплик. См. Cargo с несколькими контейнерами.
Виртуальная машина
Виртуальная машина запускает QEMU в управляемом контейнере и использует полный локальный путь образа диска. Необязательный init-контейнер может подготовить образ перед запуском.
Задание
Job — конечная контейнерная задача. В отличие от приложений Cargo, она должна завершиться после выполнения работы.
Ресурс
Ресурсы расширяют Nanocl через контроллеры. Стандартные контроллеры ncproxy и ncdns используют ресурсы правил прокси и DNS.
Секрет
Секреты содержат данные окружения, реестра или TLS. Секрет Cargo наследуется всеми его контейнерами; секрет контейнера действует только для соответствующего именованного контейнера.