Введение в LPIC-3 305: виртуализация и контейнеризация

Рейтинг: 57.8% · 13 голосов
Специализация LPIC-3 305 (v3.0): KVM/QEMU и libvirt, Xen, образы дисков, контейнеры (namespaces/cgroups, LXC/LXD, Docker), оркестрация (Compose, Swarm, Kubernetes, Helm), Vagrant/Packer/cloud-init.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Введение в LPIC-3 305: виртуализация и контейнеризация

Сообщение Sergey_Sysadmin »

Оглавление курса (16)
  1. Введение в LPIC-3 305: виртуализация и контейнеризация (вы здесь)
  2. Концепции и теория виртуализации [351.1]
  3. Xen [351.2]
  4. QEMU и KVM [351.3]
  5. Управление ВМ через libvirt [351.4, часть 1]
  6. libvirt: виртуальные сети и пулы хранилищ [351.4, часть 2]
  7. Управление образами дисков ВМ [351.5]
  8. Концепции контейнеризации [352.1]
  9. LXC и LXD [352.2]
  10. Docker: образы и контейнеры [352.3, часть 1]
  11. Docker: тома, сети, логирование, ресурсы [352.3, часть 2]
  12. Оркестрация контейнеров
  13. Облачные инструменты: OpenStack и Terraform [353.1]
  14. Packer [353.2]
  15. cloud-init [353.3]
  16. Vagrant [353.4]
Урок 0. Введение в LPIC-3 305: виртуализация и контейнеризация

Этот урок задаёт систему координат для всего курса. LPIC-3 305 - не про одну машину и даже не про сервис на нескольких машинах, как было в LPIC-2. Здесь вы становитесь архитектором инфраструктуры: решаете, на чём вообще запускать рабочую нагрузку - в полноценной виртуальной машине, в контейнере или вынести в облако через provisioning. Это три разных способа нарезать ресурсы одного железа, и выбор между ними определяет безопасность, плотность и стоимость всей платформы. Разберём, чем эти три мира отличаются по механике, как устроен сам экзамен 305-300, как курс связан с отдельными курсами Docker и Kubernetes, и как поднять стенд с вложенной виртуализацией, на котором мы проживём весь материал.

Изображение

Как это работает

Виртуализация и контейнеризация решают одну задачу - разделить ресурсы хоста между изолированными нагрузками - но на разных уровнях стека. Полная виртуализация (KVM, QEMU, libvirt, исторически Xen) даёт каждой нагрузке отдельное гостевое ядро. Гипервизор эмулирует или пробрасывает оборудование, гость думает, что владеет целым компьютером. Изоляция максимальная: можно крутить Windows рядом с Linux, можно упасть гостевым ядром, не задев хост. Цена - накладные расходы: каждая VM тащит своё ядро, свою память, свой загрузчик.

Контейнеризация (namespaces, cgroups, LXC/LXD, Docker, Podman) не создаёт второе ядро. Все контейнеры делят ядро хоста, а изоляцию даёт сам ядерный механизм: namespaces режут видимость (свой список процессов, своя сеть, своя файловая система), cgroups режут потребление (сколько CPU и памяти можно взять), а seccomp, SELinux и AppArmor режут права. Контейнер стартует за миллисекунды и почти не ест лишнего, поэтому на одном хосте их влезают сотни. Расплата - общее ядро: ядерная уязвимость или несовместимость ядра бьёт по всем контейнерам сразу.

Cloud provisioning - это третий угол, не способ изоляции, а способ доставки. cloud-init, Packer и Vagrant отвечают на вопрос не "как изолировать", а "как из голого образа за секунды получить настроенную машину". Packer печёт золотой образ, cloud-init донастраивает его при первой загрузке (ключи, пользователи, сеть), Vagrant поднимает воспроизводимый локальный стенд. Эти инструменты одинаково работают и над VM, и над облачными инстансами.

Правило выбора на 2026 год простое. Нужна жёсткая изоляция, чужое ядро или эмуляция железа (Windows-гость, другой дистрибутив ядра, доверенная мультиарендность) - берём VM. Нужна плотность, скорость и одинаковое ядро для всех (микросервисы, stateless-нагрузки, CI) - берём контейнеры. На практике их комбинируют: Kubernetes-узлы сами часто живут внутри VM, получая и плотность контейнеров, и границу безопасности гипервизора.

Команды и примеры

Экзамен один - 305-300, версия 3.0 - и покрывает три блока тем. Тема 351 - полная виртуализация (концепции, KVM/QEMU/libvirt, образы дисков, обзор Xen). Тема 352 - контейнеризация (ядерные основы, LXC/LXD, Docker, оркестрация: Compose, Swarm, Kubernetes, Helm). Тема 353 - развёртывание и provisioning (cloud-init, Packer, Vagrant, обзорно OpenStack и Terraform). 60 вопросов на 90 минут, есть fill-in-the-blank, где имя демона, ключа или директивы надо вписать по памяти. Для действительности LPIC-3 нужен активный LPIC-2.

Первым делом проверяем, что хост вообще тянет аппаратную виртуализацию:

Код: Выделить всё

# Поддержка VT-x / AMD-V в процессоре (число больше 0 - хорошо)
grep -Ec '(vmx|svm)' /proc/cpuinfo

# Готовность KVM: пакет и устройство
lsmod | grep kvm
ls -l /dev/kvm
Установка стека виртуализации различается по семействам:

Код: Выделить всё

# Debian / Ubuntu
apt-get install qemu-system libvirt-daemon-system virtinst

# RHEL / Fedora / AlmaLinux / Rocky (dnf5 в RHEL 10 и свежей Fedora)
dnf install qemu-kvm libvirt virt-install
Контейнерный движок ставим тоже под оба мира - в курсе идут и Docker, и Podman:

Код: Выделить всё

# Debian / Ubuntu
apt-get install podman    # docker ставится из репозитория Docker отдельно

# RHEL / Fedora
dnf install podman
Ключевой момент стенда - вложенная виртуализация (nested). Если основной стенд сам живёт в VM (ноутбук, облачный инстанс), внутренние VM не запустятся без неё. Включаем nested на хосте:

Код: Выделить всё

# Intel: проверить и включить вложенность
cat /sys/module/kvm_intel/parameters/nested      # должно стать Y
echo "options kvm_intel nested=1" > /etc/modprobe.d/kvm-nested.conf

# AMD: то же для kvm_amd
cat /sys/module/kvm_amd/parameters/nested
echo "options kvm_amd nested=1" > /etc/modprobe.d/kvm-nested.conf

# применить: перезагрузить модуль или хост
modprobe -r kvm_intel && modprobe kvm_intel
Проверяем, что libvirt и контейнеры ожили:

Код: Выделить всё

systemctl status libvirtd       # сокет-активируемый, может стартовать по запросу
virsh list --all
podman info | grep -i graphDriver
Частые грабли
  • Путать изоляцию контейнера с изоляцией VM. Контейнер делит ядро хоста - это не песочница уровня гипервизора, и для недоверенного кода один контейнер недостаточен без дополнительной границы.
  • Забыть включить nested на верхнем гипервизоре. Внутренние VM тихо падают или работают на программной эмуляции в десятки раз медленнее, а человек думает, что сломан libvirt.
  • Игнорировать BIOS/UEFI. VT-x или AMD-V бывают выключены в прошивке, и /dev/kvm не появится, сколько пакетов ни ставь.
  • Считать Docker и Kubernetes одним и тем же. Docker - это движок одного хоста, Kubernetes - оркестратор кластера поверх движков; на экзамене 352 это разные подтемы с разными весами.
  • Лить cloud-init там, где он не предусмотрен. Он отрабатывает один раз при первой загрузке образа; повторно настроить уже живую систему им не выйдет без сброса состояния.
  • Брать цели LPI за описание современного стека. Xen и Swarm в целях есть, но в проде 2026 это KVM и Kubernetes; учим для экзамена, в работу несём актуальное.
Мини-лаба
  • На своём хосте выполните grep -Ec '(vmx|svm)' /proc/cpuinfo и убедитесь, что аппаратная виртуализация доступна; если ноль - включите её в UEFI.
  • Включите вложенную виртуализацию для своего CPU (kvm_intel или kvm_amd) и подтвердите значением Y в /sys/module.
  • Поднимите внутри основного стенда две вложенные VM: одну на Debian 13 или Ubuntu 24.04 LTS, вторую на RHEL 10, AlmaLinux или Fedora 41+.
  • На каждой установите стек виртуализации штатным менеджером (apt на одной, dnf на другой) и проверьте появление /dev/kvm.
  • На той же машине поднимите один контейнер через podman run и сравните время старта контейнера и время загрузки вложенной VM.
  • Создайте изолированную libvirt-сеть без блока forward, чтобы тестовые сервисы не утекали наружу, и подключите к ней обе вложенные машины.
  • Снимите снапшоты чистых систем - к ним будем откатываться перед каждой следующей лабой курса.
Контрольные вопросы
  • Чем принципиально отличается изоляция полной виртуализации от изоляции контейнера на уровне ядра?
  • Какие три блока тем (351-353) входят в экзамен 305-300 и что покрывает каждый?
  • Какие два ядерных механизма дают контейнеру изоляцию видимости и ограничение ресурсов, и за что отвечает каждый?
  • Зачем нужна вложенная виртуализация и как проверить, что она включена для Intel и для AMD?
  • В чём разница ролей cloud-init, Packer и Vagrant в задаче provisioning?
  • Почему Docker и Kubernetes на экзамене 352 - это разные подтемы, и какую задачу решает каждый?
👍1 ❤️2 🔥 😄 🤔1
Аватара пользователя
debian21
Сообщения: 1
Зарегистрирован: 15 май 2026, 06:00

Re: Введение в LPIC-3 305: виртуализация и контейнеризация

Сообщение debian21 »

А LPIC-2 обязательно держать активным всё время или достаточно был сдан когда-то? У меня сертификат через год протухает, не хочется пересдавать только ради 305
👍3 ❤️ 🔥 😄 🤔1
Аватара пользователя
kafkalover
Сообщения: 1
Зарегистрирован: 11 май 2026, 21:21

Re: Введение в LPIC-3 305: виртуализация и контейнеризация

Сообщение kafkalover »

Поднял стенд на облачном инстансе, вложенные VM падали с ошибкой пока не включил nested на провайдере - оказалось не у всех тарифов оно вообще доступно, проверяйте заранее
👍1 ❤️2 🔥 😄 🤔
Ответить
Следующая глава →
Концепции и теория виртуализации [351.1]

Все главы курса «LPIC-3 305: виртуализация и контейнеризация»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-3 305: виртуализация и контейнеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость