Уроки курса
1 Введение в аппаратное обеспечение IT-инфраструктуры
90 мин
2 Архитектура серверов: x86 и ARM
90 мин
3 Центральные процессоры (CPU) в серверных решениях
90 мин
4 Серверная оперативная память и технология ECC
90 мин
5 Удаленное управление оборудованием: IPMI и BMC
90 мин
6 Дисковая подсистема: HDD, SSD и NVMe
90 мин
7 Основы RAID-массивов и аппаратные контроллеры
90 мин
8 Уровни RAID: 1, 5 и 10
90 мин
9 Выбор дисков и конфигурации RAID для различных задач
90 мин
10 Замена накопителей и перестроение RAID-массивов
90 мин
11 Основы сетевой топологии и модель OSI
90 мин
12 Структурированная кабельная система (СКС) и медная витая пара
90 мин
13 Оптоволоконные линии связи и трансиверы
90 мин
14 Коммутаторы (L2) и работа с MAC-адресами
90 мин
15 Маршрутизаторы (L3) и межсетевое взаимодействие
90 мин
16 Аппаратные файрволы и защита периметра сети
90 мин
17 Введение в аппаратную виртуализацию (Bare-metal)
90 мин
18 Гипервизор VMware ESXi: базовая настройка
90 мин
19 Гипервизор Proxmox VE: особенности эксплуатации
90 мин
20 Гипервизор KVM: распределение ресурсов
90 мин
21 Системы электропитания и ИБП топологии On-line
90 мин
22 Резервное электропитание и дизель-генераторные установки
90 мин
23 Охлаждение серверной: холодные и горячие коридоры
90 мин
24 Правила работы в ЦОД и антистатическая защита (ESD)
90 мин
25 Мониторинг аппаратной инфраструктуры в Zabbix
90 мин
26 Визуализация метрик оборудования в Grafana
90 мин
27 Стратегии резервного копирования и правило 3-2-1
90 мин
28 Основы ITIL: Управление инцидентами (Incident Management)
90 мин
29 Основы ITIL: Управление проблемами (Problem Management)
90 мин
30 Диагностика неисправностей: комплексный сценарий
90 мин

Гипервизор KVM: распределение ресурсов

Студент освоит базовые принципы работы с KVM и научится выделять процессорное время и блоки RAM для гостевых ОС.

Прогресс урока: 0%

Архитектура KVM (Kernel-based Virtual Machine)

KVM является уникальным решением в мире виртуализации. В отличие от ESXi, который представляет собой отдельную специализированную ОС, KVM — это модуль, встроенный прямо в ядро стандартной ОС Linux. Превращение обычного Linux-сервера в гипервизор 1-го типа происходит простой загрузкой модуля ядра (kvm.ko). Это означает, что KVM наследует все преимущества Linux: поддержку огромного парка оборудования, продвинутое управление памятью и планировщик процессов.

С архитектурной точки зрения каждая виртуальная машина в KVM представляет собой обычный процесс (процесс Linux) в операционной системе хоста. А каждый виртуальный процессор (vCPU) виртуальной машины — это отдельный поток (thread) внутри этого процесса. За эмуляцию аппаратного обеспечения (сетевых карт, дисковых контроллеров, видеокарт) для виртуальной машины отвечает пользовательская утилита QEMU. Поэтому связку часто называют QEMU/KVM.

Поскольку ВМ — это просто процессы Linux, за распределение процессорного времени между ними отвечает стандартный планировщик ядра Linux — CFS (Completely Fair Scheduler). CFS стремится справедливо распределить такты физического процессора (pCPU) между всеми потоками vCPU виртуальных машин. Однако, если суммарная нагрузка на сервер слишком высока, возникает специфическая проблема, требующая глубокой диагностики.

Распределение vCPU и проблема Steal Time

Мы уже обсуждали понятие оверкомиттинга (переподписки) ресурсов. В KVM выделение виртуальных процессоров (vCPU) больше, чем физических ядер (pCPU), является нормальной практикой. Коэффициент переподписки зависит от типа нагрузки: для VDI (виртуальных рабочих столов) он может составлять 4:1 (4 vCPU на 1 физическое ядро), для обычных серверов — 2:1, а для высоконагруженных баз данных строго 1:1.

Но что происходит, когда администратор допускает ошибку и создает слишком сильный оверкомит? Начинается эффект «Шумного соседа» (Noisy Neighbor). Несколько виртуальных машин одновременно пытаются выполнить ресурсоемкие задачи. Планировщик Linux CFS не может мгновенно предоставить физическое ядро всем желающим потокам vCPU. В результате виртуальная машина вынуждена «ждать» в очереди, пока гипервизор выделит ей физическое процессорное время.

Для диагностики этой проблемы внутри гостевой ОС Linux (внутри виртуальной машины) используется метрика Steal Time (st). Если вы зайдете в ВМ по SSH и запустите утилиту top, в строке состояния процессора вы увидите параметр %st (например, 15.0 st). Steal Time — это процент времени, которое виртуальный процессор хотел работать, но не мог, потому что гипервизор «украл» (steal) у него это время для обслуживания других виртуальных машин на том же физическом сервере. Если Steal Time стабильно превышает 5-10%, это критический инцидент: сервер перегружен, и необходимо либо мигрировать часть ВМ на другой узел кластера, либо физически добавлять процессоры.

Что означает высокий показатель Steal Time (st) при анализе загрузки процессора внутри виртуальной машины (например, в утилите top)?

Управление памятью в KVM и защита хоста (OOM Killer)

При распределении оперативной памяти в KVM необходимо помнить о критически важном правиле: Никогда не отдавайте 100% физической RAM виртуальным машинам. Гипервизор KVM — это ОС Linux, которой тоже нужна память для работы ядра, сетевого стека, файловой системы (особенно если используется ZFS, чей кэш ARC очень прожорлив) и процессов управления.

Если администратор выделит виртуальным машинам всю доступную память, и они начнут ее активно использовать, физическая память сервера (хоста) исчерпается. В этот момент ядро Linux активирует механизм защиты последней надежды — OOM Killer (Out Of Memory Killer). OOM Killer начинает сканировать все запущенные процессы и принудительно убивать (отправлять сигнал SIGKILL) те из них, которые потребляют больше всего памяти. Так как виртуальные машины в KVM — это просто процессы (qemu-system-x86_64), OOM Killer безжалостно завершит их работу. Для пользователя это выглядит как внезапное жесткое выключение сервера по питанию, что может привести к разрушению баз данных.

Правило хорошего тона (Best Practice): На хост-систему (гипервизор) всегда необходимо резервировать минимум 4-8 ГБ оперативной памяти (в зависимости от общего объема RAM и используемой файловой системы). В Proxmox и других системах на базе KVM это настраивается путем ограничения максимального пула выделяемой памяти, оставляя «запас прочности» для стабильной работы самого гипервизора.

Задание

Сценарий (Problem-Based Learning): Клиенты жалуются на случайные внезапные перезагрузки критичной виртуальной машины с базой данных PostgreSQL на хосте KVM. Система мониторинга показывает, что физическая RAM хоста была утилизирована на 99% прямо перед падением.

  • Подключитесь к физическому хосту KVM по SSH.
  • Проверьте системный журнал ядра Linux с помощью команды `dmesg -T | grep -i oom` или просмотрите /var/log/syslog.
  • Если в логах обнаружена запись 'Out of memory: Killed process <PID> (qemu-system-x86_64)', это подтверждает срабатывание OOM Killer.
  • Проанализируйте распределение RAM. Скорее всего, сумма выделенной ВМ памяти превышает физический объем без учета нужд самого гипервизора.
  • Уменьшите выделенную RAM для менее критичных ВМ на этом хосте или настройте механизмы Ballooning для динамического перераспределения памяти.
10 баллов