Миграция / Режим обслуживания
Миграция виртуальных машин — ключевая функция управления виртуализованной инфраструктурой, которая дает возможность переносить работающие виртуальные машины с одного физического узла на другой без необходимости их выключения. Этот процесс критичен для выполнения различных задач и сценариев:Миграция виртуальных машин необходима для ряда задач и сценариев:
- Балансировка нагрузки. Перемещение виртуальных машин между узлами позволяет равномерно распределять нагрузку на серверы, обеспечивая использование ресурсов наилучшим образом.
- Перевод узла в режим обслуживания. Виртуальные машины могут быть перемещены с узлов, которые нужно вывести из эксплуатации для выполнения планового обслуживания или обновления программного обеспечения.
- Обновление «прошивки» виртуальных машин. Миграция позволяет обновить «прошивку» виртуальных машины, не прерывая их работу.
Запуск миграции произвольной машины
Далее рассмотрен пример миграции выбранной виртуальной машины.
Перед началом миграции проверьте текущий статус виртуальной машины с помощью следующей команды:
d8 k get vm
В результате будет выведена информация о виртуальной машине:
NAME PHASE NODE IPADDRESS AGE
linux-vm Running virtlab-pt-1 10.66.10.14 79m
Как видно, виртуальная машина в данный момент работает на узле virtlab-pt-1
.
Для выполнения миграции виртуальной машины с одного узла на другой с учетом требований по размещению, используется ресурс VirtualMachineOperation (vmop
) с типом Evict
.
d8 k apply -f - <<EOF
apiVersion: virtualization.deckhouse.io/v1alpha2
kind: VirtualMachineOperation
metadata:
name: migrate-linux-vm-$(date +%s)
spec:
# Имя виртуальной машины.
virtualMachineName: linux-vm
# Операция для миграции.
type: Evict
EOF
После создания ресурса vmop
, выполните команду:
d8 k get vm -w
В результате будет выведена информация о статусе виртуальной машины:
NAME PHASE NODE IPADDRESS AGE
linux-vm Running virtlab-pt-1 10.66.10.14 79m
linux-vm Migrating virtlab-pt-1 10.66.10.14 79m
linux-vm Migrating virtlab-pt-1 10.66.10.14 79m
linux-vm Running virtlab-pt-2 10.66.10.14 79m
Эта команда отображает статус виртуальной машины в процессе миграции. Она позволяет отслеживать процесс перемещения виртуальной машины с одного узла на другой.
Если необходимо прервать миграцию, удалите соответствующий ресурс vmop
, пока он находится в фазе Pending
или InProgress
.
Режим обслуживания
При проведении работ на узлах, на которых работают виртуальные машины, существует риск нарушения их работоспособности. Чтобы избежать этого, узел следует перевести в режим обслуживания, предварительно переместив все виртуальные машины на другие доступные узлы.
Для перевода узла в режим обслуживания и перемещения виртуальных машин выполните следующую команду:
d8 k drain <nodename> --ignore-daemonsets --delete-emptydir-data
где <nodename>
— узел, на котором предполагается выполнить работы и который должен быть освобождён от всех ресурсов (в том числе от системных).
Эта команда выполняет несколько задач:
- эвакуирует все поды с указанного узла.
- игнорирует DaemonSet’ы, чтобы не остановить критически важные сервисы.
- удаляет временные данные, хранящиеся в
emptyDir
, освобождая ресурсы узла.
Если необходимо вытеснить с узла только виртуальные машины, можно использовать более точную команду с фильтрацией по метке, которая соответствует виртуальным машинам. Для этого выполните следующую команду:
d8 k drain <nodename> --pod-selector vm.kubevirt.internal.virtualization.deckhouse.io/name --delete-emptydir-data
После выполнения команды d8 k drain
узел перейдёт в режим обслуживания, и виртуальные машины на нём запускаться не смогут.
Чтобы вывести его из режима обслуживания, остановите выполнение команды drain
(Ctrl+C), затем выполните команду:
d8 k uncordon <nodename>
Восстановление после сбоя (ColdStandby)
ColdStandby обеспечивает механизм восстановления работы виртуальной машины в случае сбоя узла, на котором она была запущена.
Для работы этого механизма необходимо выполнить следующие требования:
- для политики запуска виртуальной машины (
.spec.runPolicy
) должно быть установлено одно из следующих значений:AlwaysOnUnlessStoppedManually
,AlwaysOn
; - на узлах, где запущены виртуальные машины, должен быть включён механизм fencing.
Рассмотрим, как работает механизм ColdStandby на примере:
- Кластер состоит из трех узлов:
master
,workerA
иworkerB
. На worker-узлах включён механизм Fencing. Виртуальная машинаlinux-vm
запущена на узлеworkerA
. - На узле
workerA
возникает проблема (выключилось питание, пропала сеть, и т. д.). - Контроллер проверяет доступность узлов и обнаруживает, что
workerA
недоступен. - Контроллер удаляет узел
workerA
из кластера. - Виртуальная машина
linux-vm
запускается на другом подходящем узле (workerB
).