Виртуализация в Linux
Обзор виртуализации
Виртуализация — это технология, которая позволяет программной платформе, называемой гипервизором, запускать процессы, содержащие полностью эмулируемую компьютерную систему.
Гипервизор отвечает за управление ресурсами физического оборудования, которые могут использоваться отдельными виртуальными машинами
Такие виртуальные машины называются гостевыми системами гипервизора
К наиболее распространённым гипервизорам для Linux относятся:
Xen — это гипервизор первого типа с открытым исходным кодом, то есть для его работы не требуется базовая операционная система. Такой гипервизор называется гипервизором на «голом железе», поскольку компьютер может загружаться непосредственно в гипервизор.
Kernel Virtual Machine — это модуль ядра Linux для виртуализации. KVM является гипервизором как первого, так и второго типа, поскольку, несмотря на то, что для его работы требуется обычная операционная система Linux, он может отлично функционировать в качестве гипервизора, интегрируясь с работающей установкой Linux. Для создания и управления виртуальными машинами, развернутыми с помощью KVM, используется libvirt демон и связанные с ним программные утилиты.
Oracle VM VirtualBox — кроссплатформенное приложение, которое работает на Linux, macOS и Microsoft Windows. Поскольку для работы VirtualBox требуется базовая операционная система, это гипервизор второго типа.
Процесс переноса виртуальной машины с одного гипервизора на другой называется миграцией, и в разных реализациях гипервизоров используются разные методы. Некоторые миграции можно выполнять только после полного отключения гостевой системы, а другие — во время ее работы (так называемая миграция в режиме реального времени). Такие методы могут быть полезны во время технического обслуживания гипервизоров или для обеспечения отказоустойчивости системы, когда гипервизор выходит из строя и гостевую систему можно перенести на работающий гипервизор.
Типы виртуальных машин
Существует три основных типа виртуальных машин: полностью виртуализированная гостевая система, паравиртуализированная гостевая система и гибридная гостевая система.
Полностью Виртуализированный
Все инструкции, которые должна выполнять гостевая операционная система, должны выполняться в рамках полностью виртуализированной установки операционной системы. Это связано с тем, что в гостевой системе не устанавливаются дополнительные программные драйверы для преобразования инструкций в команды для имитации или реального оборудования.
Полностью виртуализированная гостевая система — это система, в которой гостевая система (или HardwareVM) не знает, что она является запущенным экземпляром виртуальной машины. Чтобы этот тип виртуализации работал на оборудовании на базе архитектуры x86, в системе, на которой установлен гипервизор, должны быть включены расширения Intel VT-x или AMD-V. Это можно сделать в меню настройки BIOS или UEFI.
Паравиртуализированный
Паравиртуализированная гостевая система (или PVM) — это система, в которой гостевая операционная система знает, что она является запущенным экземпляром виртуальной машины. В таких системах используется модифицированное ядро и специальные драйверы (известные как гостевые драйверы), которые помогают гостевой операционной системе использовать программные и аппаратные ресурсы гипервизора. Производительность паравиртуализированной гостевой системы часто выше, чем у полностью виртуализированной, благодаря преимуществам, которые дают эти программные драйверы.
Гибрид
Паравиртуализацию и полную виртуализацию можно объединить, чтобы обеспечить практически нативную производительность ввода-вывода для операционных систем без изменений с помощью паравиртуализированных драйверов в полностью виртуализированных операционных системах. Паравиртуализированные драйверы содержат драйверы для накопителей и сетевых устройств с улучшенной производительностью дискового и сетевого ввода-вывода.
Платформы виртуализации часто предоставляют готовые гостевые драйверы для виртуализированных операционных систем. В KVM используются драйверы из проекта Virtio, а в Oracle VM VirtualBox — гостевые расширения, доступные в виде загружаемого ISO-образа с компакт-диска.
Виртуальная машина часто состоит из группы файлов, в первую очередь XML-файла, который определяет виртуальную машину (например, ее аппаратную конфигурацию, возможности подключения к сети, параметры дисплея и т. д.), и связанного с ней файла образа жесткого диска, на котором установлена операционная система и ее программное обеспечение.
ls /etc/libvirt/qemu
всего 24
drwxr-xr-x 3 root root 4096 29 окт. 17:48 networks
-rw------- 1 root root 5667 29 июн. 17:17 rhel8.0.xml
Часть qemu в пути к каталогу указывает на базовое программное обеспечение, на котором работают виртуальные машины на основе KVM
Проект QEMU предоставляет гипервизору программное обеспечение для эмуляции аппаратных устройств, которые будут использоваться виртуальной машиной, таких как контроллеры дисков, доступ к центральному процессору хоста, эмуляция сетевых карт и многое другое.
ls -l /etc/libvirt/qemu/networks/
всего 8
drwxr-xr-x 2 root root 4096 29 июн. 17:15 autostart
-rw------- 1 root root 576 28 июн. 16:39 default.xml
Образ жесткого диска этой виртуальной машины находится по адресу /var/lib/libvirt/images/rhel8
sudo ls -lh /var/lib/libvirt/images/rhel8
-rw------- 1 root root 5.5G 25 окт. 15:57 /var/lib/libvirt/images/rhel8
Идентификатор устройства D-Bus
Во многих установках Linux используется идентификационный номер компьютера, генерируемый во время установки, — идентификатор компьютера D-Bus.
С помощью следующей команды можно проверить, существует ли идентификатор компьютера D-Bus для работающей системы:
dbus-uuidgen --ensure
Если сообщений об ошибках нет, значит, у системы есть идентификатор. Чтобы узнать текущий идентификатор компьютера D-Bus, выполните следующую команду:
dbus-uuidgen --get
13da9b9ba4b64ddebab4....
Отображаемая строка текста — это текущий идентификационный номер. Ни у одной из двух систем Linux, работающих на гипервизоре, не должно быть одинакового идентификатора компьютера D-Bus.
Идентификатор компьютера D-Bus находится по адресу /var/lib/dbus/machine-id и символически связан с /etc/machine-id
Не рекомендуется изменять этот идентификационный номер в работающей системе, так как это может привести к нестабильной работе и сбоям.
Если у двух виртуальных машин одинаковый идентификатор компьютера D-Bus, выполните следующие действия, чтобы сгенерировать новый:
sudo rm -f /etc/machine-id
sudo dbus-uuidgen --ensure=/etc/machine-id
Если /var/lib/dbus/machine-id не является символической ссылкой на /etc/machine-id, то /var/lib/dbus/machine-id необходимо удалить.
Предварительная настройка облачных систем
Полезным инструментом, упрощающим развертывание облачных виртуальных машин, является утилита cloud-init .
Эта команда вместе с соответствующими файлами конфигурации и предустановленным образом виртуальной машины представляет собой независимый от поставщика способ развертывания гостевой системы Linux на множестве платформ IaaS. С помощью текстовых файлов YAML (YAML — это не язык разметки) администратор может предварительно настроить сетевые параметры, выбор программных пакетов, конфигурацию SSH-ключей, создание учетных записей пользователей, языковые настройки и множество других параметров для быстрого создания новых систем.
При первоначальной загрузке новой системы cloud-init считывает настройки из файлов конфигурации YAML и применяет их. Этот процесс требуется только при первоначальной настройке системы и упрощает развертывание парка новых систем на платформе облачного провайдера.
Синтаксис YAML-файла, используемый с cloud-init, называется cloud-config. Вот пример файла cloud-config:
#cloud-config
часовой пояс: Africa/Dar_es_Salaam
имя хоста: test-system
# Обновляем систему при первой загрузке
apt_update: true
apt_upgrade: true
# Устанавливаем веб-сервер Nginx
packages:
- nginx
Контейнеры
Для Linux существует множество контейнерных технологий, таких как Docker, Kubernetes, LXD/LXC, systemd-nspawn, OpenShift и другие.
В контейнерах используется механизм контрольных групп (более известный как cgroups) в ядре Linux. Cgroup — это способ разделения системных ресурсов, таких как память, процессорное время, а также пропускная способность диска и сети, для отдельного приложения. Администратор может напрямую использовать cgroups для установки ограничений на системные ресурсы для приложения или группы приложений, которые могут находиться в одной cgroup. По сути, именно это и делает за администратора контейнерное программное обеспечение, а также предоставляет инструменты, упрощающие управление и развертывание cgroups.
Вопросы и ответы
Какие расширения процессора необходимы для аппаратной платформы на базе x86, на которой будут работать полностью виртуализированные гостевые системы?
VT-x для процессоров Intel или AMD-V для процессоров AMD
Какой тип виртуализации, скорее всего, будет использоваться для критически важных серверов, требующих максимальной производительности?
Операционная система, использующая паравиртуализацию, например Xen, в качестве гостевой операционной системы, может более эффективно использовать доступные аппаратные ресурсы за счет программных драйверов, предназначенных для работы с гипервизором.
Выполните следующую команду, чтобы проверить, включены ли в вашей системе расширения процессора для запуска виртуальной машины (результаты могут отличаться в зависимости от вашего процессора): grep --color -E "vmx|svm" /proc/cpuinfo. В зависимости от результата вы можете увидеть выделенное слово «vmx» (для процессоров с поддержкой Intel VT-x) или «svm» (для процессоров с поддержкой AMD SVM). Если результатов нет, обратитесь к инструкциям по настройке виртуализации для вашего процессора в BIOS или UEFI.
Если вы используете графическую среду рабочего стола, рекомендуется также установить приложение virt-manager — графический интерфейс, который можно использовать при установке KVM. Это упростит установку виртуальных машин и управление ими.
sudo apt install virt-manager






