APD от 14.12.2020: виртуализация LXD теперь доступна в VMmanager. Чтобы попробовать LXD-контейнеры, оставьте заявку на демо.
В ноябре мы добавим в VMmanager новый тип виртуализации — LXD от Canonical. Linux Container Daemon — это системный диспетчер контейнеров c интерфейсом как у виртуальных машин, но с Linux (LXC) в качестве основы.
Хотя LXD — контейнерная виртуализация, она значительно отличается от хорошо известной Docker, так как имеет полноценную Linux-систему «на борту». ОС работает так, словно установлена на физический или виртуальный сервер. LXD и Docker не взаимоисключают друг друга: Docker-контейнеры можно использовать внутри LXD-контейнера.
LXD — это легковесная, быстрая и простая виртуализация, которая позволяет:
- Ограничивать ресурсы контейнера «на живую»
- Изолировать контейнеры и проекты друг от друга
- Обеспечить безопасность узлов кластера
- Более гибко и рационально использовать ресурсы узла
- Выдавать виртуальные ресурсы за несколько секунд!
Как будет работать LXD в VMmanager, расскажу далее.
Содержание
Особенности виртуализации LXD в VMmanager:
Кластер
Кластер — это основанная абстрактная единица для построения виртуальной инфраструктуры. В кластер объединяются несколько физических серверов с гомогенными сетевыми настройками, локальными и сетевыми хранилищами. В VMmanager появится новый тип кластера на серверах с ОС Ubuntu 20.04. На начальном этапе он будет поддерживать только сеть типа IP-fabric с обменом маршрутами по iBGP. Остальные конфигурации сети и второй сетевой интерфейс будут пока недоступны.
Локальное хранилище
Первое время новый кластер будет поддерживать только ZFS-хранилище. Контейнеры и образы будут храниться в ZFS-пуле, а локальные бэкапы — в директории на узле. ZFS обеспечивает высокую скорость доступа к данным, контроль их целостности и фрагментации и даёт возможность создавать очень большие пулы под хранение данных.
Для подключения узла, необходимо:
- Подготовить ZFS-пул на ноде и указать его имя в интерфейсе (например утилитой zfsutils-linux).
- Указать путь до файловой директории на ноде. В ней мы будем хранить бэкапы и образы контейнеров.
Чтобы создать zfs-пул, нужен раздел диска или логический диск целиком. В этом примере используется раздел диска:
zpool create tank /dev/sda4
Создаем пул и называем его tank. Посмотреть список пулов и их состояние можно zpool list. Посмотреть список внутри пула zfs list — здесь будут контейнеры. Например:
tank/containers/c1 1.01G 8.99G 1.45G
/var/snap/lxd/common/lxd/storage-pools/default/containers/c1
Видно, сколько ресурсов выделено и использовано. Можно смонтировать на узел указанную директорию и посмотреть там файлы:
zfs mount tank/containers/c1
В будущем мы планируем добавить поддержку таких типов локальных хранилищ как DIR и LVM. И конечно сетевых - iSCSI, FC, Ceph.
Узел
Для подключения понадобится узел с ОС Ubuntu 20.04. При подключении узла VMmanager автоматически настроит его с помощью Ansible:
- Устанавливает пакеты:
- lxd стабильной версии 4.6
- nftables — для антиспуфинга и ограничения TCP соединений
- bird2 — для анонсирования маршрутов по iBGP
- Включает модули для работы IP-fabric:
net.ipv4.ip_forward=1 net.ipv6.conf.all.proxy_ndp=1 net.ipv6.conf.{node_iface}.proxy_ndp=1 net.ipv6.conf.all.forwarding=1
- Инициализирует LXD на сервере
- Настраивает удалённый доступ к LXD при помощи асимметричной пары ключей
- Далее с мастера осуществляется управление сервером LXD:
from pylxd import Client client = Client( endpoint='http://10.0.0.1:8443', cert=('lxd.crt', 'lxd.key')) print(client.trusted) ... True
Контейнер
На первом этапе будут доступны основные действия по управлению жизненным циклом контейнеров:
- Создание и удаление
- Старт/Стоп/Рестарт
- Изменение пароля
- Изменение ресурсов
- Изменение размера диска
- Создание резервной копии
- Восстановление из резервной копии
- Клонирование
- Холодная миграция
- Создание образа
- Добавление и удаление IPv4/IPv6 адреса
- Вес IO и IOPS
- Вес network
- Ограничение количества TCP соединений
На втором этапе мы добавим следующие возможности:
- Ограничение CPU в процентах
- Ограничение подключения к контейнеру по конкретным портам
- Живая миграция
- Добавление/удаление сетевого интерфейса
- Изменение размера диска
- Консольный доступ к контейнеру
Изменения в тонких настройках:
- Вес CPU, I/O, network в значениях от 0 до 10
- Лимит на чтение/запись можно будет задавать в iops, либо в Mbit/s
- Режим эмуляции CPU будет недоступен
- Добавится лимит использования CPU в процентах
В LXD изменение ресурсов и тонких настроек применяются наживую, без перезагрузки контейнера.
Вы получите инфраструктурный контейнер, такой же легкий, быстрый и гибкий как Docker. Но при этом более долговечный, изолированный и безопасный.
Использовать LXD удобно, если ваш IT-отдел регулярно выдает и поддерживает изолированные виртуальные ресурсы. Эта технология обеспечивает высокую производительность и безопасность сервисов при превосходной утилизации ресурсов.
Настройка контейнера
Для настройки только что созданных контейнеров при первом запуске мы используем технологию Cloud-init. Она позволяет легко устанавливать пакеты, записывать файлы, настраивать сеть, логин, пароль и другие параметры. Сloud-init вызывается при начальной загрузке, поэтому не нужно совершать дополнительных действий с узла или агентов внутри операционной системы контейнера — достаточно просто использовать образы с Cloud-init.
VMmanager использует Сloud-init в двух случаях:
- Для первоначальной настройки контейнера (например, чтобы создать учетную запись пользователя и установить необходимые пакеты).
- Для настройки сети при перезапуске контейнера. Например, назначить IP-адреса на интерфейс, прописать маршрут по умолчанию, осуществить миграцию и т.д.
В будущем это технология поможет нам представить удобный интерфейс для реализации функциональности Infrastructure-as-Code и VDC в продукте.
IP-fabric
Конфигурации обеспечивает работоспособность абстрагированных от инфраструктуры изолированных белых IP-адресов для виртуальных машин поверх узлов в серой сети.
При подключении узла в кластер платформа устанавливает bird2 и настраивает его практически так же, как и на кластере с KVM. Отличается только расположение файла конфига: на centos 8 это /etc/bird.conf, а в ubuntu 20 /etc/bird/bird.conf.
Подробнее об IP-fabric
Следующим шагом планируется реализация SDN при помощи Open vSwitch. А в дальнейшем мы добавим поддержку более простых схем сети.
Операционные системы
LXD — это легковесный гипервизор на базе родительской операционной системы. Поэтому в качестве гостевых ОС можно использовать только Linux.
Со временем в список ОС планируем добавить образы контейнеров LXD из репозитория Canonical. Однако в качестве первого решения мы рассматриваем возможность использования репозитория ispsystem с проверенными нашими DevOps инженерами образами. Это нужно для гарантированной работоспособности сервисов наших клиентов, без сюрпризов.
LXD шаблон с cloud-init небольших размеров, быстро скачивается и разворачивается на ноде. Это позволяет платформе выдавать контейнер всего за несколько секунд.
В будущем появится возможность подключить к LXD-кластеру VMmanager любой репозиторий.
Лицензирование контейнеров
Сейчас мы лицензируем VMmanager по количеству узлов и виртуальных машин. LXD-контейнеры будут лицензироваться отдельно. Это обеспечивает гибкость: клиенты могут платить только за то, что им действительно нужно.
Попробуйте LXD в VMmanager
В начале ноября мы выпускаем поддержку LXD-контейнеров в базовой функциональности.
Инфраструктурные контейнеры LXD позволят эффективнее использовать физические ресурсы компании. Вы сможете:
- Быстро разворачивать инфраструктурные контейнеры для ваших заказчиков;
- Плотнее упаковывать гостевые ОС на узел;
- Организовать несколько локальных изолированных сред, например, для разработки или тестирования ПО;
- Обеспечить безопасность за счет изоляции LXD контейнера от физической инфраструктуры.
Попробуйте LXD-виртуализацию в качестве быстрой и надёжной альтернативы HyperV, VMware или KVM. С VMmanager это удобно — просто добавьте пустой узел с Ubuntu 20.04 и создавайте контейнеры.
Приглашаю поделиться своим мнением в комментариях.