22 октября 2020 Время чтения: 7 минут

Быстрые, легкие и безопасные. Инфраструктурные контейнеры LXD в VMmanager

Александр Гришин

Александр Гришин

Руководитель платформы виртуализации VMmanager

ISPSystem

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, расскажу далее.

Содержание

Кластер

Кластер — это основанная абстрактная единица для построения виртуальной инфраструктуры. В кластер объединяются несколько физических серверов с гомогенными сетевыми настройками, локальными и сетевыми хранилищами. В VMmanager появится новый тип кластера на серверах с ОС Ubuntu 20.04. На начальном этапе он будет поддерживать только сеть типа IP-fabric с обменом маршрутами по iBGP. Остальные конфигурации сети и второй сетевой интерфейс будут пока недоступны.


LXD-кластер в платформе VMmanager

Локальное хранилище

Первое время новый кластер будет поддерживать только 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:

  1. Устанавливает пакеты:
    • lxd стабильной версии 4.6
    • nftables — для антиспуфинга и ограничения TCP соединений
    • bird2 — для анонсирования маршрутов по iBGP
  2. Включает модули для работы 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
    
  3. Инициализирует LXD на сервере
  4. Настраивает удалённый доступ к LXD при помощи асимметричной пары ключей
  5. Далее с мастера осуществляется управление сервером 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 от контейнера на Docker

Использовать LXD удобно, если ваш IT-отдел регулярно выдает и поддерживает изолированные виртуальные ресурсы. Эта технология обеспечивает высокую производительность и безопасность сервисов при превосходной утилизации ресурсов.

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

Для настройки только что созданных контейнеров при первом запуске мы используем технологию Cloud-init. Она позволяет легко устанавливать пакеты, записывать файлы, настраивать сеть, логин, пароль и другие параметры. Сloud-init вызывается при начальной загрузке, поэтому не нужно совершать дополнительных действий с узла или агентов внутри операционной системы контейнера — достаточно просто использовать образы с Cloud-init.

VMmanager использует Сloud-init в двух случаях:

  1. Для первоначальной настройки контейнера (например, чтобы создать учетную запись пользователя и установить необходимые пакеты).
  2. Для настройки сети при перезапуске контейнера. Например, назначить 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-шаблоны из репозитория ISPsystem

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

Лицензирование контейнеров

Сейчас мы лицензируем VMmanager по количеству узлов и виртуальных машин. LXD-контейнеры будут лицензироваться отдельно. Это обеспечивает гибкость: клиенты могут платить только за то, что им действительно нужно.

Попробуйте LXD в VMmanager

В начале ноября мы выпускаем поддержку LXD-контейнеров в базовой функциональности.

Инфраструктурные контейнеры LXD позволят эффективнее использовать физические ресурсы компании. Вы сможете:

  • Быстро разворачивать инфраструктурные контейнеры для ваших заказчиков;
  • Плотнее упаковывать гостевые ОС на узел;
  • Организовать несколько локальных изолированных сред, например, для разработки или тестирования ПО;
  • Обеспечить безопасность за счет изоляции LXD контейнера от физической инфраструктуры.

Попробуйте LXD-виртуализацию в качестве быстрой и надёжной альтернативы HyperV, VMware или KVM. С VMmanager это удобно — просто добавьте пустой узел с Ubuntu 20.04 и создавайте контейнеры.

Управление LXD в платформе VMmanager не требует знаний командной строки: настроить кластер и работать с контейнерами можно в графическом интерфейсе.


Приглашаю поделиться своим мнением в комментариях.