Авторские статьи

Перезагрузка в командной строке виртуальной машины Proxmox VE.


Если вы не слышали про такой проект Proxmox VE, то запомните это название, чтобы вспомнить его, когда вам потребуется удобное и бесплатное решение для внедрения виртуализации. Proxmox VE - это Debian Linux + веб интерфейс, благодаря которым вы получите доступ к мощному функционалу гипервизора KVM, Qemu, контейнерам LXC и СХД Ceph. У Proxmox VE есть развитый API, позволяющий реализовать альтернативный доступ к вашим виртуальным машинам. В данной статье речь пойдёт о консольной утилите pvesh, использующей API и помогающей админу в автоматизации его повседневных задач. Встала задача перезагружать виртуальную машину не собственными командами из планировщиков операционной системы (изнутри виртуальной машины), а снаружи, средствами Proxmox VE посылать сигнал, словно нажата виртуальная кнопка питания, приказывающая виртуальному серверу закругляться.

Хотелось бы создать решение, которое не было бы привязано к текущему расположению виртуальных машин на физических серверах в кластере виртуализации. Мы с коллегами активно используем Живую Миграцию, и сегодня VM1 работает на node2, а завтра её отправят в режиме онлайн на node3.

Данное требование сразу поставило крест на использовании низкоуровневой команды qm, которая требует отдачи ей приказа на той ноде кластера, где в данный момент трудится нужная виртуальная машина. Уже показывал мощь PveSh в примерах, так как он использует API Proxmox VE и позволяет реализовать задуманное.

Прежде чем начать перезагружать сервера, стоит напомнить, что для MS Windows Server неспроста даны ценные советы по их подготовке к работе в виртуализированной среде. При попытке их выключить через веб интерфейс или в консоли, у вас будет выведен запрос, и такое поведение нужно изменить.

Windows 2008 guest best practices
Windows 2012 guest best practices

К сожалению, нажимая виртуальную кнопку питания, вы выключаете виртуальный сервер, а не перезагружаете. То есть у нас не будет restart в том смысле, что будет shutdown + start. Для работы скрипта требуется лишь наличие jq, которая есть в стандартных репозиториях Debian и Ubuntu, и она облегчает работу с JSON ответами. Работа скрипта не сложна. Вначале получаем по-данному нам VMID имя ноды, на которой трудится в данный момент эта виртуальная машина. Делаем shutdown. Далее в вечном цикле опрашиваем статус и, когда он становится stopped, то смело прерываем цикл while, и выходим на финишную прямую, запуская виртуальную машину.

#!/bin/bash
# vasilisc.com
clear

if ! [ -x "$(command -v jq)" ]; then
        echo 'Error: jq is not installed.' >&2
        echo "apt-get install jq"
        exit 1
fi

if [ -z $1 ]; then
        echo "Use "$0" VMID"
        exit 1
fi

VMID=$1
NODE=`pvesh get /cluster/resources --type vm | jq --raw-output ".[] | select(.vmid == ${VMID}) | .node"`

# shutdown VM
pvesh create /nodes/${NODE}/qemu/${VMID}/status/shutdown

# get status
while true 
do
        STATUS=`pvesh get /nodes/${NODE}/qemu/${VMID}/status/current | jq --raw-output ".status"`
        echo "NODE="${NODE}" VMID="${VMID}" is "${STATUS}
        sleep 5

        if [ "${STATUS}" == "stopped" ]; then
        		break
        fi
done

# start
sleep 5
pvesh create /nodes/${NODE}/qemu/${VMID}/status/start
date

exit 0
Дата последней правки: 2023-12-27 11:36:04

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта