Сегодня речь пойдет о том, как быстро и достаточно просто на одном физическом сервере развернуть несколько виртуальных серверов с разными операционными системами. Любому системному администратору это позволит централизованно управлять всей IT-инфраструктурой компании и экономить огромное количество ресурсов.
Использование виртуализации помогает максимально абстрагироваться от физического серверного оборудования, защитить критичные сервисы и легко восстановить их работу даже в случае очень серьезных сбоев.
Без всякого сомнения, большинству системных администраторов знакомы приемы работы с виртуальной средой и для них эта статья не станет каким-либо открытием. Несмотря на это, есть компании, которые не используют гибкость и скорость работы виртуальных решений из-за недостатка точной информации о них. Мы надеемся, что наша статья поможет на примере понять, что гораздо проще один раз начать использовать виртуализацию, чем испытывать неудобства и недостатки физической инфраструктуры.
К счастью, попробовать как работает виртуализация достаточно просто. Мы покажем, как создать сервер в виртуальной среде, например, для переноса CRM-системы, используемой в компании. Практически любой физический сервер можно превратить в виртуальный, но вначале необходимо освоить базовые приемы работы. Об этом и пойдет речь ниже.
Start and stop KVM VM from command line
steno
New Member
Like vmctl stop/start, but for KVM VMs.
Proxmox Staff Member
Like vmctl stop/start, but for KVM VMs.
and you will see the options:
steno
New Member
For problem with Windows 2003 server, i’m not a windows guy but on local policy you must allow shutdown without logon.
mlanner
Active Member
. but it doesn’t seem to shutdown my VMs.
. it works just fine, though.
But I’d rather not need to kill my machines that way. Any ideas/suggestions?
Proxmox Staff Member
. but it doesn’t seem to shutdown my VMs.
. it works just fine, though.
But I’d rather not need to kill my machines that way. Any ideas/suggestions?
mlanner
Active Member
Proxmox Staff Member
mlanner
Active Member
Thanks Tom. Works beautifully.
Out of curiosity, would:
dietmar
Proxmox Staff Member
Best regards, Dietmar
mlanner
Active Member
Thanks. I tried your suggestion and it works fine.
mlanner
Active Member
dietmar
Proxmox Staff Member
# service pve-manager stop
This stops all VMs and all Containers (we have start/stop ordering now).
Best regards, Dietmar
Ovidiu
Active Member
I know this is a very old thread but as I can’t find a better one, here comes my question:
I manually executed duply from the command line as root and it successfully stopped all VMs but failed to start them. When I re-connected to my screen session, the command service pve-manager start was just displayed on the display without any apparent result. Any ideas? My next try will be to insert «/etc/init.d/pve-manager start» into post and see if that makes any difference.
# service pve-manager stop
This stops all VMs and all Containers (we have start/stop ordering now).
Начало работы
Хочется обратить внимание на то, что Proxmox готов к созданию новых машин сразу после установки. Тем не менее, рекомендуем выполнить предварительные настройки, чтобы в дальнейшем системой было легко управлять. Практика показывает, что гипервизор и виртуальные машины стоит разнести по разным физическим носителям. О том, как это сделать и пойдет речь ниже.
Настроить дисковые накопители
Следующим этапом следует настроить хранилище, которое можно будет использовать для сохранения данных виртуальных машин и резервных копий.
ВНИМАНИЕ! Приведенный ниже пример дисковой разметки можно использовать только для тестовых целей. Для эксплуатации в реальных условиях мы настоятельно рекомендуем использовать программный или аппаратный RAID-массив, чтобы исключить потерю данных при выходе дисков из строя. О том, как правильно приготовить дисковый массив к работе и как действовать в случае аварийной ситуации мы расскажем в одной из следующих статей.
Предположим, что физический сервер имеет два диска — /dev/sda, на который установлен гипервизор и пустой диск /dev/sdb, который планируется использовать для хранения данных виртуальных машин. Чтобы система смогла увидеть новое хранилище, можно воспользоваться самым простым и эффективным методом — подключить его как обычную директорию. Но перед этим следует выполнить некоторые подготовительные действия. В качестве примера посмотрим, как подключить новый диск /dev/sdb, любого размера, отформатировав его в файловую систему ext4.
1. Размечаем диск, создавая новый раздел:
2. Нажимаем клавишу o или g (разметить диск в MBR или GPT).
3. Далее нажимаем клавишу n (создать новый раздел).
4. И наконец w (для сохранения изменений).
5. Создаем файловую систему ext4:
6. Создаем директорию, куда будем монтировать раздел:
7. Открываем конфигурационный файл на редактирование:
8. Добавляем туда новую строку:
9. После внесения изменений сохраняем их сочетанием клавиш Ctrl + X, отвечая «Y» на вопрос редактора.
10. Для проверки, что все работает, отправляем сервер в перезагрузку:
11. После перезагрузки проверяем смонтированные разделы:
Вывод команды должен показать, что /dev/sdb1 смонтирован в директорию /mnt/storage. Это значит, что наш накопитель готов к работе.
Добавить новое хранилище в Proxmox
Авторизуемся в панели управления и заходим в разделы «Датацентр» ➝ «Хранилище» ➝ «Добавить» ➝ «Директория».
В открывшемся окне заполняем следующие поля:
После этого нажимаем кнопку «Добавить». На этом настройка завершена.
Создать виртуальную машину
Для создания виртуальной машины выполняем следующую последовательность действий:
1. Определяемся с версией операционной системы. 2. Заранее закачиваем ISO-образ. 3. Выбираем в меню «Хранилище» только что созданное хранилище. 4. Нажимаем «Содержимое» ➝ «Загрузить». 5. Выбираем из списка ISO-образ и подтверждаем выбор нажатием кнопки «Загрузить».
После завершения операции образ будет отображен в списке доступных.
Создаем нашу первую виртуальную машину:
1. Нажимаем «Создать VM».
2. Заполняем поочередно параметры: «Имя» ➝ «ISO-Image» ➝ Размер и тип жесткого диска ➝ Количество процессоров ➝ Объем оперативной памяти ➝ Сетевой адаптер.
3. Выбрав все желаемые параметры нажимаем «Завершить». Созданная машина будет отображена в меню панели управления.
4. Выбираем ее и нажимаем «Запуск».
5. Переходим в пункт «Консоль» и выполняем установку операционной системы точно таким же образом, как и на обычный физический сервер.
Если необходимо создать еще одну машину — повторяем вышеуказанные операции. После того как все они будут готовы, с ними можно работать одновременно, открывая несколько окон консоли.
Настроить автозапуск
По умолчанию Proxmox автоматически не запускает машины, но это легко решается буквально двумя щелчками мыши:
1. Щелкаем по названию нужной машины.
2. Выбираем вкладку «Опции» ➝ «Запуск при загрузке».
3. Ставим галочку напротив одноименной надписи.
Теперь, в случае перезагрузки физического сервера, VM будет запущена автоматически.
Для продвинутых администраторов имеется еще и возможность указать дополнительные параметры запуска в разделе «Start/Shutdown order». Можно явным образом указать в каком порядке следует запускать машины. Также можно указать время, которое должно пройти до старта следующей VM и время задержки выключения (если операционная система не успеет завершить работу, гипервизор принудительно ее выключит через определенное количество секунд).
У вас Гипервизор Proxmox и вы создали образ диска для гостевой виртуальной машины больше чем нужно. Со временем машина стала разрастаться, но вы вовремя это заметили и удалили данные внутри нее. Теперь задачка стоит как “сжать контейнер qcow2 виртуального диска”. Не проблема.
Дисклеймер:всегда делайте резервные копии, мало ли что!
Со временем файлы гоcтевых *.qcow2 дисков могут начать занимать больше места чем фактические данные, которые они хранят. Это происходит потому, что гостевые системы при удалении файлов обычно просто помечают их нулями, но не удаляют их по факту (по причинам производительности). Поэтому в содержащим данные qcow2 файле не видно разницы между распределенным и используемым и распределенным и неиспользуемым пространством.
Для того чтобы сжать *.qcow2 файл есть два выхода: включить поддержку TRIM или пометить нулями все свободное пространство гостевой системы, а затем переконвертировать образ диска с помощью qemu-img.
Рекомендуемый план действий:
Добиваетесь, чтобы нужный диск был корректно подключен в Proxmox
Запускаете на гостевой машине TRIM вместе с оптимизацией пространства
PROFIT!
Рекомендуемое решение через использование TRIM
Решать проблему рекомендуется передачей команд TRIM (которые используются при работе с SSD) из VM в хранилище гипервизора. Преимущества такого подхода в том, что он работает в автоматическом режиме, не требует перезаписи всех свободных разделов всех дисков и настраивается только единожды.
Конфигурация PVE
Хранилище гипервизора должно быть thin-provisioned, то есть это должен быть qcow2 диск или thin-lvm или zfs …
Диск должен быть подключен на гостевую систему через Virtio-SCSI контроллер
На гостевых scsi* дисковых контейнерах должна быть включена опция discard
Нужны подробности? Посмотрите: Qemu trim/discard and virtio scsi
Еще раз. Чтобы все сработало, ваш диск должен быть подключен к гипервизору по шине SCSI к контроллеру Virtio SCSI и для него должна быть включена опция Discard:
Конфигурирование гостевых ОС Linux
Для того чтобы запустить TRIM и освободить все неиспользуемое пространство в современных ОС Linux используется распространенная команда:
fstrim -av
Большинство современных дистрибутивов Linux изначально имеют преднастроенный таймер cron, который выполняет TRIM примерно раз в неделю.
Конфигурирование гостевых ОС Windows
Для систем которые поддерживаю TRIM (Win7/2008R2 и позднее) ничего настраивать не нужно. Windows сама периодически запускает TRIM
Проверить, включен ли TRIM в ОС Windows
fsutil behavior query DisableDeleteNotify
Она должна возвратить 0 если TRIM включен:
fsutil behavior set DisableDeleteNotify 0
Ручной запуск TRIM на ОС Windows
Запустить TRIM и очистку Windows вручную возможно через Powershell командой:
Где вместо БУКВА_ВАШЕГО_ДИСКА надо подставить соответственно букву диска который вы хотите оптимизировать.
Решение вручную
Этот путь больше не рекомендуется и может использоваться для устаревших систем типа Windows XP и более ранних и старых дистрибутивов Linux которые не поддерживают fstrim.
За ручным вариантом решения прочитайте официальную документацию Proxmox: https://pve.proxmox.com/wiki/Shrink_Qcow2_Disk_Files
Возможные проблемы и их решение
Виртуальный диск гостевой системы Proxmox всегда можно отключить и подключить заново с нужными параметрами. Для этого придется погасить виртуальную машину.
Ваш виртуальный диск был изначально подключен не по шине SCSI
В этом случае после включения гостевая ОС Windows может не загрузиться, так как не найдет драйверов SCSI.
Ссылки
The Proxmox VM migrator: migrates VMs between different Proxmox VE clusters.
Migrating a virtual machine (VM) on a PVE-cluster from one node to another is implemented in the Proxmox Virtual Environment (PVE). But migrating a VM from one PVE-cluster to another is not.
proxmove helps you move VMs between PVE-clusters with minimal hassle. And if you use ZFS, with minimal downtime too.
$
But, to get it to work, you’ll need to configure ~/.proxmoverc first. See Configuration.
If source and destination filesystems use ZFS, the move is done in two stages, by copying an initial snapshot while the source VM is still up. Combine with --wait-before-stop for additional control.
Use --debug; it doesn’t flood your screen, but provides useful clues about what it’s doing.
If your network bridge is different on the DEST_CLUSTER, use --skip-start; that way proxmove «completes» successfully when done with the move. (You’ll still need to change the bridge before starting the VM obviously.)
If proxmove detects that a move was in progress, it will interactively attempt a resume. For ZFS to ZFS syncs, it will do another initial resync before shutting down the source VM.
Full invocation specification (--help):
usage: proxmove [-c FILENAME] [-n] [--bwlimit MBPS] [--no-verify-ssl] [--skip-disks] [--skip-start] [--wait-before-stop] [--ssh-ciphers CIPHERS] [--debug] [--ignore-exists] [-h] [--version] source destination nodeid storage vm [vm ...]
Migrate VMs from one Proxmox cluster to another.
positional arguments: source alias of source cluster destination alias of destination cluster nodeid node on destination cluster storage storage on destination node vm one or more VMs (guests) to move
optional arguments: -c FILENAME, --config FILENAME use alternate configuration inifile -n, --dry-run stop before doing any writes --bwlimit MBPS limit bandwidth in Mbit/s --no-verify-ssl skip ssl verification on the api hosts --skip-disks do the move, but skip copying of the disks; implies --skip-start --skip-start do the move, but do not start the new instance --wait-before-stop prepare the move, but ask for user confirmation before shutting down the old instance (useful if you have to move networks/IPs) --ssh-ciphers CIPHERS comma separated list of ssh -c ciphers to prefer, (aes128-gcm@openssh.com is supposed to be fast if you have aes on your cpu); set to "-" to use ssh defaults
debug arguments: --debug enables extra debug logging --ignore-exists continue when target VM already exists; allows moving to same cluster
other actions: -h, --help show this help message and exit --version show program's version number and exit
Cluster aliases and storage locations should be defined in
~/.proxmoverc (or see -c option). See the example proxmoverc.sample.
It requires [pve:CLUSTER_ALIAS] sections for the proxmox "api" URL and
[storage:CLUSTER_ALIAS:STORAGE_NAME] sections with "ssh", "path" and
"temp" settings.
Example run
First you need to configure ~/.proxmoverc; see below.
When configured, you can do something like this:
<div dir="auto" data-snippet-clipboard-copy-content="$ proxmove apple-cluster banana-cluster node2 node2-ssd the-vm-to-move 12:12:27: Attempt moving apple-cluster => banana-cluster (node ‘node2’): the-vm-to-move 12:12:27: — source VM the-vm-to-move@node1 12:12:27: — storage ‘ide2’: None,media=cdrom (host=, guest=) 12:12:27: — storage ‘virtio0’: sharedsan:565/vm-565-disk-1.qcow2,format=qcow2,iops_rd=4000,iops_wr=500,size=50G (host=37.7GiB, guest=50.0GiB) 12:12:27: Creating new VM ‘the-vm-to-move’ on ‘banana-cluster’, node ‘node2’ 12:12:27: — created new VM ‘the-vm-to-move—CREATING’ as UPID:node2:00005977:1F4D78F4:57C55C0B:qmcreate:126:user@pve:; waiting for it to show up 12:12:34: — created new VM ‘the-vm-to-move—CREATING’: the-vm-to-move—CREATING@node2 12:12:34: Stopping VM the-vm-to-move@node1 12:12:42: — stopped VM the-vm-to-move@node1 12:12:42: Ejected (cdrom?) volume ‘ide2’ (none) added to the-vm-to-move—CREATING@node2 12:12:42: Begin copy of ‘virtio0’ (sharedsan:565/vm-565-disk-1.qcow2,format=qcow2,iops_rd=4000,iops_wr=500,size=50G) to local-ssd 12:12:42: scp(1) copy from ‘/pool0/san/images/565/vm-565-disk-1.qcow2’ (on sharedsan) to ‘root@node2.banana-cluster.com:/node2-ssd/temp/temp-proxmove/vm-126-virtio0’ Warning: Permanently added ‘node2.banana-cluster.com’ (ECDSA) to the list of known hosts. vm-565-disk-1.qcow2 100% 50GB 90.5MB/s 09:26 Connection to san.apple-cluster.com closed. 12:22:08: Temp data ‘/node2-ssd/temp/temp-proxmove/vm-126-virtio0’ on local-ssd 12:22:08: Writing data from temp ‘/node2-ssd/temp/temp-proxmove/vm-126-virtio0’ to ‘/dev/zvol/node2-ssd/vm-126-virtio0’ (on local-ssd) (100.00/100%) Connection to node2.banana-cluster.com closed. 12:24:25: Removing temp ‘/node2-ssd/temp/temp-proxmove/vm-126-virtio0’ (on local-ssd) 12:24:26: Starting VM the-vm-to-move@node2 12:24:27: — started VM the-vm-to-move@node2 12:24:27: Completed moving apple-cluster => banana-cluster (node ‘node2’): the-vm-to-move»>
$ proxmove apple-cluster banana-cluster node2 node2-ssd the-vm-to-move12:12:27: Attempt moving apple-cluster<e1400248> => banana-cluster<6669ad2c> (node 'node2'): the-vm-to-move12:12:27: - storage 'ide2': None,media=cdrom (host=<unknown>, guest=<unknown>)12:12:27: Creating new VM 'the-vm-to-move' on 'banana-cluster', node 'node2'Warning: Permanently added 'node2.banana-cluster.com' (ECDSA) to the list of known hosts.vm-565-disk-1.qcow2 100% 50GB 90.5MB/s 09:26Connection to san.apple-cluster.com closed.12:22:08: Temp data '/node2-ssd/temp/temp-proxmove/vm-126-virtio0' on local-ssd12:22:08: Writing data from temp '/node2-ssd/temp/temp-proxmove/vm-126-virtio0' to '/dev/zvol/node2-ssd/vm-126-virtio0' (on local-ssd)Connection to node2.banana-cluster.com closed.12:24:25: Removing temp '/node2-ssd/temp/temp-proxmove/vm-126-virtio0' (on local-ssd)12:24:27: Completed moving apple-cluster<e1400248> => banana-cluster<6669ad2c> (node 'node2'): the-vm-to-move
Before, the-vm-to-move was running on apple-cluster on node1.
Afterwards, the-vm-to-move is running on banana-cluster on node2. The the-vm-to-move on the apple-cluster has been stopped and renamed to the-vm-to-move--MIGRATED.
Configuration
Set up the ~/.proxmoverc config file. First you need to define which clusters you have. For example apple-cluster and banana-cluster.
Example cluster named "apple-cluster" with 3 storage devices, one (to inspect and create pools).=https://user@pve:PASSWORD@apple-cluster.com:443 Example cluster named "banana-cluster" with 2 storage devices; both storage devices exist on the respective nodes only.=https://user@pve:PASSWORD@banana-cluster.com:443
Next, it needs configuration for the storage devices. They are expected to be reachable over SSH; both from the caller and from each other (using SSH-agent forwarding).
=root@san.apple-cluster.com
=/pool0/san/images
=/pool0/san/private local disk on node1 only=root@node1.apple-cluster.com
=/srv/images
=/srv/temp
If you use ZFS storage on banana-cluster, the storage config could look like this. Disk volumes exist on the ZFS filesystem node1-ssd/images and node2-ssd/images on the nodes node1 and node2 respectively.
Note that the temp= path is always a regular path.
proxmoxer.core.ResourceException: 500 Internal Server Error ("only root can set 'vmgenid' config"): b'{"data":null}'
License
Установка Proxmox VE
Данная процедура чаще всего не вызывает никаких вопросов. Скачиваем актуальную версию образа с официального сайта и записываем его на любой внешний носитель с помощью утилиты Win32DiskImager (в Linux используется команда dd), после чего загружаем сервер непосредственно с этого носителя. Наши клиенты, арендующие у нас выделенные серверы, могут воспользоваться двумя еще более простыми путями – просто смонтировав нужный образ непосредственно из KVM-консоли, либо используя наш PXE-сервер.
Программа установки имеет графический интерфейс и задаст всего лишь несколько вопросов.
1. Выбираем диск, на который будет выполнена установка. В разделе «Options» можно также задать дополнительные параметры разметки.
2. Указываем региональные настройки.
3. Указываем пароль, который будет использоваться для авторизации суперпользователя root и E-mail адрес администратора.
4. Указываем сетевые настройки. FQDN обозначает полностью определенное имя домена, например, node01.yourcompany.com.
5. После завершения установки, сервер можно отправить в перезагрузку с помощью кнопки Reboot.
Веб-интерфейс управления станет доступен по адресу:
Как это устроено
Когда речь идет о виртуализации, многим начинающим специалистам сложно разобраться в терминологии, поэтому поясним несколько базовых понятий:
Для того чтобы сервер мог работать полноценным хостом виртуализации, его процессор должен поддерживать одну из двух технологий – либо Intel VT, либо AMD-V. Обе технологии выполняют важнейшую задачу — предоставление аппаратных ресурсов сервера виртуальным машинам.
Ключевой особенностью является то, что любые действия виртуальных машин исполняются напрямую на уровне оборудования. При этом они друг от друга изолированы, что достаточно легко позволяет управлять ими по отдельности. Сам же гипервизор играет роль контролирующего органа, распределяя ресурсы, роли и приоритеты между ними. Также гипервизор занимается эмуляцией той части аппаратного обеспечения, которая необходима для корректной работы операционной системы.
Расширенные возможности
Внедрение виртуализации дает возможность иметь в наличии несколько запущенных копий одного сервера. Критический сбой или ошибка, в процессе внесения изменений в такую копию, никак не повлияет на работу текущего сервиса или приложения. При этом также снимаются две основные проблемы – масштабирование и возможность держать «зоопарк» разных операционных систем на одном оборудовании. Это идеальная возможность совмещения самых разных сервисов без необходимости приобретения отдельного оборудования для каждого из них.
Виртуализация повышает отказоустойчивость сервисов и развернутых приложений. Даже если физический сервер вышел из строя и его необходимо заменить на другой, то вся виртуальная инфраструктура останется полностью работоспособной, при условии сохранности дисковых носителей. При этом физический сервер может быть вообще другого производителя. Это особенно актуально для компаний, которые используют серверы, производство которых прекращено и потребуется осуществить переход на другие модели.
Теперь перечислим самые популярные гипервизоры, существующие на текущий день:
Они все достаточно универсальны, однако, у каждого из них имеются определенные особенности, которые следует всегда учитывать на этапе выбора: стоимость развёртывания/обслуживания и технические характеристики. Стоимость коммерческих лицензий VMware и Hyper-V весьма высока, а в случае возникновения сбоев, решить проблему с этими системами собственными силами очень непросто.
KVM же напротив, полностью бесплатен и достаточно прост в работе, особенно в составе готового решения на базе Debian Linux под названием Proxmox Virtual Environment. Именно эту систему мы можем порекомендовать для первоначального знакомства с миром виртуальной инфраструктуры.
Виртуальные машины Qemu/KVM
Гостевая операционная система, работающая на эмулируемом компьютере, обращается к этим устройствам и работает так, как она работает на реальном оборудовании. Например, вы можете передать образ iso в качестве параметра Qemu, и операционная система, работающая на эмулируемом компьютере, увидит реальный CDROM, вставленный в привод компакт-дисков.
Qemu может эмулировать большое разнообразие аппаратных средств от ARM до Sparc, но Proxmox VE занимается только 32-и 64-битной эмуляцией клонов PC, поскольку она представляет собой подавляющее большинство серверного оборудования. Эмуляция клонов PC также является одной из самых быстрых из-за наличия процессорных расширений, которые значительно ускоряют Qemu, когда эмулируемая архитектура совпадает с архитектурой хоста. На заметку Иногда вы можете столкнуться с термином KVM (Kernel-based Virtual Machine). Это означает, что Qemu работает с поддержкой расширений процессора виртуализации, через модуль ядра Linux kvm. В контексте Proxmox VE термины Qemu и KVM могут использоваться взаимозаменяемо, так как Qemu в Proxmox VE всегда будет пытаться загрузить модуль kvm. Qemu внутри Proxmox VE работает как корневой процесс, так как это необходимо для доступа к блочным и PCI устройствам
Эмулированные устройства и паравиртуализированные устройства
Аппаратное обеспечение PC, эмулируемое Qemu, включает в себя материнскую плату, сетевые контроллеры, контроллеры SCSI, IDE и SATA, последовательные порты (полный список можно увидеть на man странице KVM(1)), все они эмулируются программно. Все эти устройства являются точным программным эквивалентом существующих аппаратных устройств, и если операционная система, работающая в гостевой системе, имеет соответствующие драйверы, она будет использовать устройства, как если бы она работала на реальном оборудовании. Это позволяет Qemu запускать немодифицированные операционные системы.
Это, однако, влияет на производительность, так как запуск в программном обеспечении того, что должно было выполняться в аппаратном обеспечении, требует дополнительной нагрузки на центральный процессор. Чтобы сгладить это, Qemu может представить гостевой операционной системе паравиртуализированные устройства, где гостевая ОС распознает, что она работает внутри Qemu и взаимодействует с гипервизором.
Настоятельно рекомендуется использовать устройства virtio при любой возможности, так как они обеспечивают значительное улучшение производительности. Использование virtio generic disk controller по сравнению с эмулируемым IDE-контроллером удвоит пропускную способность последовательной записи, как это было измерено с помощью bonnie++(8). Использование сетевого интерфейса virtio может обеспечить до трех раз большую пропускную способность эмулируемой сетевой карты Intel E1000, измеренную с помощью iperf(1). 1
1 Смотри этот бэнчмарк на KVM wiki
Параметры Виртуальных Машин
Общие параметры
Настройки ОС
Параметры системы
При создании виртуальной машины можно изменить некоторые основные компоненты системы новой виртуальной машины. Вы можете указать, какой тип дисплея вы хотите использовать. Кроме того, может быть изменен контроллер SCSI. Если вы планируете установить гостевой агент QEMU, или если выбранный образ ISO уже поставляется и устанавливается автоматически, вы можете поставить галочку в поле агент Qemu, что позволит Proxmox VE использовать его функции для отображения дополнительной информации и выполнения некоторых действий (например, завершение работы или создание моментальных снимков) более оптимально.
Proxmox VE позволяет загружать виртуальные машины с различными типами прошивок и машин, а именно SeaBIOS и OVMF. В большинстве случаев вы хотите переключиться с seabbios по умолчанию на OVMF только в том случае, если вы планируете использовать проброс устройств PCIe. Тип машины VMs определяет аппаратную компоновку виртуальной материнской платы виртуальной машины. Вы можете выбрать между стандартным Intel 440FX или чипсетом Q35, который также предоставляет виртуальную шину PCIe, и, таким образом, может быть предпочтительным, если вы планируете использовать проброс аппаратного обеспечения PCIe.
Жесткий диск
Если вы хотите, чтобы диспетчер резервного копирования Proxmox VE пропускал диск при резервном копировании виртуальной машины, вы можете установить параметр нет резервного копирования на этом диске.
Если вы хотите, чтобы механизм репликации хранилища Proxmox VE пропускал диск при запуске задания репликации, вы можете установить параметр Пропустить репликацию на этом диске. Начиная с версии Proxmox VE 5.0, репликация требует, чтобы образы дисков находились в хранилище типа zfspool, поэтому добавление образа диска в другие типы хранилищ, когда для виртуальной машины настроена репликация, требуется опция пропустить репликацию для этого образа диска.
Сокет процессора-это физический слот на материнской плате ПК, куда можно подключить процессор. Этот процессор может содержать одно или несколько ядер, которые являются независимыми процессорами. Есть ли у вас один сокет процессора с 4 ядрами или два сокета процессора с двумя ядрами, в основном не имеет значения с точки зрения производительности. Однако некоторые лицензии на программное обеспечение зависят от количества сокетов на машине, в этом случае имеет смысл установить количество сокетов на то, что позволяет лицензия.
Увеличение числа виртуальных процессоров (ядер и сокетов) обычно обеспечивает повышение производительности, хотя это сильно зависит от использования виртуальной машины. Многопоточные приложения, конечно, выиграют от большого количества виртуальных процессоров, так как для каждого добавляемого виртуального процессора Qemu создаст новый поток выполнения на хост-системе. Если вы не уверены в рабочей нагрузке вашей виртуальной машины, обычно безопасно установить общее число ядер равным 2. Примечание Совершенно безопасно, если общее число ядер всех ваших виртуальных машин больше, чем число ядер на сервере (например, 4 виртуальных машины с 4 ядрами у каждой на машине только с 8 ядрами). В этом случае хост-система будет балансировать потоки выполнения Qemu между ядрами вашего сервера, как если бы вы запускали стандартное многопоточное приложение. Однако Proxmox VE не позволит запускать виртуальные машины с большим количеством виртуальных процессорных ядер, чем физически доступно, так как это приведет только к снижению производительности из-за стоимости контекстных переключателей. Ограничение ресурсов
Qemu может эмулировать ряд различных типов процессоров от 486 до новейших процессоров Xeon. Каждое новое поколение процессоров добавляет новые функции, такие как аппаратный 3D-рендеринг, генерация случайных чисел, защита памяти и т. д. Обычно вы должны выбрать для своей виртуальной машины Тип процессора, который близко соответствует ЦП хост-системы, поскольку это означает, что функции ЦП хоста (также называемые флагами ЦП ) будут доступны в вашей виртуальной машине. Если требуется точное совпадение, можно установить тип процессора host, и в этом случае виртуальная машина будет иметь точно такие же флаги процессора, как и ваша хост-система.
Но у этого есть и обратная сторона. Если вы хотите выполнить динамическую миграцию виртуальных машин между различными хостами, ваша виртуальная машина может оказаться на новой системе с другим типом процессора. Если флаги процессора, переданные гостю, отсутствуют, процесс qemu остановится. Для исправления этого Qemu имеет также свой собственный процессор типа kvm64, который Proxmox VE использует по умолчанию. kvm64-это Pentium 4 подобный тип процессора, который имеет уменьшенный набор флагов процессора, но гарантированно работает везде.
Короче говоря, если вы заботитесь о динамической миграции и перемещении виртуальных машин между узлами, оставьте kvm64 по умолчанию. Если вы не заботитесь о динамической миграции или имеете однородный кластер, где все узлы имеют один и тот же процессор, Установите тип процессора на хост, так как теоретически это даст вашим гостям максимальную производительность.
Флаги процессора, связанные с Meltdown/Spectre
Для исправлений Spectre v1,v2,v4 ваш поставщик процессора или системы также должен предоставить так называемое “обновление микрокода” 5 для вашего процессора.
Чтобы проверить, уязвим ли хост Proxmox VE, выполните следующую команду от имени root: Также доступен скрипт сообщества для обнаружения, является ли хост все еще уязвимым. 6
4 Meltdown Attack https://meltdownattack.com/ 5 Вы можете использовать ‘intel-microcode’/’amd-microcode’ из Debian бесплатно, если ваш поставщик не предоставляет такого обновления. Обратите внимание, что не все затронутые процессоры могут быть обновлены для поддержки spec-ctrl. 6 spectre-meltdown-checker https://meltdown.ovh/
Необходим для того, чтобы исправить Spectre В4 (ПНЭ-2018-3639). Не входит по умолчанию ни в одну модель процессора Intel. Должен быть явно включен для всех моделей процессоров Intel. Требуется обновленный микрокод центрального процессора (intel-microcode >= 20180425).
7 PCID теперь является критической функцией производительности/безопасности на x86 https://groups.google.com/forum/m/#!topic/mechanical-sympathy/L9mHTbeQLNU
Рекомендуется указать, что хост не уязвим для Spectre V4 (CVE-2018-3639). Не входит по умолчанию ни в одну модель процессора AMD. Будущие аппаратные поколения CPU не будут уязвимы для CVE-2018-3639, и поэтому гостю следует сказать, чтобы он не включал свои средства защиты, выставляя amd-no-ssb. Это взаимоисключает Virtus-ssbd и amd-ssbd.
Если используется опция NUMA, рекомендуется установить число сокетов равным числу сокетов хост-системы.
Современные операционные системы ввели возможность горячего подключения и, в определенной степени, горячего отключения процессоров в работающих системах. Виртуализация позволяет нам избежать многих (физических) проблем, которые может вызвать реальное оборудование в таких сценариях. Тем не менее, это довольно новая и сложная функция, поэтому ее использование должно быть ограничено случаями, когда она абсолютно необходима. Большая часть функциональности может быть реализована с другими, хорошо протестированными и менее сложными функциями, см. Ограничения ресурсов.
В Proxmox VE максимальное количество подключаемых процессоров всегда равно количество ядер * количество сокетов. Чтобы запустить виртуальную машину с меньшим, чем это общее количество ядер процессоров, можно использовать параметр vpus, он указывает, сколько vcpu должно быть подключено при запуске виртуальной машины. В настоящее время эта функция поддерживается только на Linux, требуется ядро новее, чем 3.10, рекомендуется ядро новее, чем 4.7.
Примечание Горячее удаление CPU зависит от компьютера и требует поддержки гостевой ОС. Команда удаления не гарантирует, что удаление процессора действительно произойдет, обычно это запрос, направляется гостю с использованием механизма, зависимого от цели например, ACPI на x86/amd64.
Память
Для каждой виртуальной машины вы можете установить память фиксированного размера или попросить Proxmox VE динамически выделять память в зависимости от текущего использования оперативной памяти хоста.
Фиксированное Выделение Памяти
При установке памяти и минимальной памяти на одинаковый объем Proxmox VE просто выделит то, что вы укажете для вашей виртуальной машины.
Даже при использовании фиксированного объема памяти, устройство ballooning добавляется к виртуальной машине, потому что оно предоставляет полезную информацию, например, сколько памяти действительно использует гость. В общем, вы должны оставить ballooning включенным, но если вы хотите отключить его (например, для отладки), просто снимите флажок ballooning устройства или установите в конфигурации.
Автоматическое Выделение Памяти
При установке минимальной памяти ниже, чем память, Proxmox VE будет следить за тем, чтобы указанный вами минимальный объем всегда был доступен виртуальной машине, и если использование оперативной памяти на хосте ниже 80%, будет динамически добавлять память гостю до указанного максимального объема памяти.
Когда хосту не хватает оперативной памяти, виртуальная машина затем высвобождает некоторую память обратно на хост, заменяя запущенные процессы, если это необходимо, и запуская oom killer в крайнем случае. Передача памяти между хостом и гостем осуществляется через специальный драйвер ядра balloon, работающий внутри гостя, который захватывает или освобождает страницы памяти от хоста. 10
Все дистрибутивы Linux, выпущенные после 2010 года, имеют драйвер ядра balloon. Для операционных систем Windows драйвер balloon должен быть установлен вручную и может вызвать замедление гостя, поэтому мы не рекомендуем использовать его на критических системах.
При выделении оперативной памяти для ваших виртуальных машин, хорошее эмпирическое правило-всегда оставлять 1 ГБ оперативной памяти доступной для хоста.
10 Хорошее объяснение внутренней работы balloon драйвера можно найти здесь: https://rwmj.wordpress.com/2010/07/17/-virtio-balloon/
Сетевое устройство
Если вы используете драйвер VirtIO, вы можете дополнительно активировать опцию Multiqueue. Эта опция позволяет гостевой ОС обрабатывать сетевые пакеты с использованием нескольких виртуальных процессоров, обеспечивая увеличение общего количества передаваемых пакетов.
При использовании драйвера VirtIO с Proxmox VE каждая сетевая очередь NIC передается ядру хоста, где очередь обрабатывается потоком ядра, порожденным драйвером vhost. Если эта опция активирована, можно передать несколько сетевых очередей ядру хоста для каждой сетевой карты.
При использовании Multiqueue рекомендуется установить для него значение, равное общему числу ядер вашего гостя. Кроме того, необходимо задать в виртуальной машине количество многоцелевых каналов на каждой виртуальной машине с помощью команды ethtool:
где X-номер числа vCPU виртуальной машины.
Следует отметить, что установка параметра Multiqueue в значение, превышающее единицу, приведет к увеличению нагрузки ЦП на хост-и гостевые системы по мере увеличения трафика. Мы рекомендуем устанавливать этот параметр только тогда, когда виртуальная машина должна обрабатывать большое количество входящих подключений, например, когда виртуальная машина работает как маршрутизатор, обратный прокси-сервер или нагруженный HTTP-сервер, выполняющий длительный опрос.
Дисплей
Вы можете изменить объем памяти, предоставленной виртуальному графическому процессору, установив опцию memory. Это позволит включить более высокое разрешение внутри виртуальной машины, особенно с SPICE/QXL.
Выбор serialX в качестве типа дисплея отключает выход VGA и перенаправляет веб-консоль на выбранный последовательный порт. Настроенный параметр памяти дисплея в этом случае будет проигнорирован.
11 qemu: использование цирруса не рекомендуется https://www.kraxel.org/blog/2014/10/qemu-using-cirrus-considered-harmful/
Проброс USB
vendor/product-id выглядит следующим образом: 0123:abcd, где 0123-идентификатор поставщика, а abcd-идентификатор продукта, то есть два одинаковых usb-устройства имеют один и тот же идентификатор.
BIOS и UEFI
Чтобы правильно эмулировать компьютер, QEMU должен использовать firmware(прошивку). Который на обычных PC (известен как BIOS или (U)EFI), выполняется как один из первых шагов при загрузке виртуальной машины. Он отвечает за выполнение базовой аппаратной инициализации и за обеспечение интерфейса к микропрограммному обеспечению и аппаратному обеспечению для операционной системы. По умолчанию QEMU использует для этого SeaBIOS, который является реализацией BIOS x86 с открытым исходным кодом. SeaBIOS-хороший выбор для большинства стандартных установок.
Если вы хотите использовать OVMF, необходимо учитывать следующие факторы:
Для сохранения таких вещей, как порядок загрузки, необходим диск EFI. Этот диск будет включен в резервные копии и моментальные снимки, и может быть только один.
При использовании OVMF с виртуальным дисплеем (без VGA passthrough), вам нужно установить разрешение клиента в меню OVMF(в которое вы можете попасть нажав кнопку ESC во время загрузки), или вы должны выбрать SPICE в качестве типа дисплея.
Inter-VM разделяемая память
Вы можете добавить устройство общей памяти между виртуальными машинами (ivshmem), которое позволяет обмениваться памятью между хостом и гостем, а также между несколькими гостями.
Аудио-устройство
Автоматический запуск и выключение виртуальных машин
Дополнения SPICE
Примечание Раздел отсутствует а исходном руководстве, добавлен из Proxmox WiKi Дополнения SPICE-это дополнительные функции, которые могут улучшить возможности удаленного просмотра.
Чтобы включить их через графический интерфейс, перейдите на панель параметров виртуальной машины. Выполните следующую команду, чтобы включить их через CLI: На заметку Для использования этих функций Дисплей виртуальной машины должен быть настроен как SPICE (qxl). Общий Доступ К Папкам
Для гостей Windows установщик демона Spice WebDAV можно загрузить с официального сайта SPICE.
В большинстве дистрибутивов Linux есть пакет под названием spice-webdavd, которые могут быть установлены.
На заметку Общий доступ к папкам в настоящее время работает только в Linux-версии Virt-Viewer. Внимание Экспериментально! В настоящее время эта функция не работает стабильно. Потоковое видео
Решение проблем Общая папка не отображается
Убедитесь, что Служба WebDAV включена и запущена в гостевой системе. В Windows он называется Spice webdav proxy. В Linux имя spice-webdavd, но может отличаться в зависимости от дистрибутива.
Что нужно сделать после установки
Есть несколько важных вещей, которые следует выполнить после установки Proxmox. Расскажем о каждой из них подробнее.
Обновить систему до актуальной версии
Для этого зайдем в консоль нашего сервера и отключим платный репозиторий (доступен только тем, кто купил платную поддержку). Если этого не сделать — apt сообщит об ошибке при обновлении источников пакетов.
1. Открываем консоль и редактируем конфигурационный файл apt:
2. В этом файле будет всего одна строка. Ставим перед ней символ «#», чтобы отключить получение обновлений из платного репозитория:
3. Сочетанием клавиш Ctrl+X выполняем выход из редактора, отвечая «Y» на вопрос системы о сохранении файла.
4. Выполняем команду обновления источников пакетов:
5. Обновляем все пакеты:
Позаботиться о безопасности
Исходя из практического опыта, за неделю работы сервера с открытым ssh-портом 22 и внешним статическим IPv4 адресом, было более 5000 попыток подобрать пароль. И около 1500 адресов утилита успешно заблокировала. Для выполнения установки приводим небольшую инструкцию:
1. Открываем консоль сервера через веб-интерфейс или SSH.
2. Обновляем источники пакетов:
3. Устанавливаем Fail2Ban:
4. Открываем конфигурацию утилиты на редактирование:
6. Сочетанием клавиш Ctrl+X выполняем выход из редактора, отвечая «Y» на вопрос системы о сохранении файла.
7. Перезапускаем службу:
Ответ утилиты будет выглядеть примерно так:
Аналогичным способом можно закрыть от подобных атак Web-интерфейс, создав соответствующее правило. Пример такого правила для Fail2Ban можно найти в официальном руководстве.
Среда, 4 марта 2020 г.
Руководство администратора Proxmox VE R 6.0 Глава 10.
Перезагрузка в командной строке виртуальной машины Proxmox VE.
Хотелось бы создать решение, которое не было бы привязано к текущему расположению виртуальных машин на физических серверах в кластере виртуализации. Мы с коллегами активно используем Живую Миграцию, и сегодня VM1 работает на node2, а завтра её отправят в режиме онлайн на node3.
Данное требование сразу поставило крест на использовании низкоуровневой команды qm, которая требует отдачи ей приказа на той ноде кластера, где в данный момент трудится нужная виртуальная машина. Уже показывал мощь PveSh в примерах, так как он использует API Proxmox VE и позволяет реализовать задуманное.
Прежде чем начать перезагружать сервера, стоит напомнить, что для MS Windows Server неспроста даны ценные советы по их подготовке к работе в виртуализированной среде. При попытке их выключить через веб интерфейс или в консоли, у вас будет выведен запрос, и такое поведение нужно изменить.
К сожалению, нажимая виртуальную кнопку питания, вы выключаете виртуальный сервер, а не перезагружаете. То есть у нас не будет restart в том смысле, что будет shutdown + start. Для работы скрипта требуется лишь наличие jq, которая есть в стандартных репозиториях Debian и Ubuntu, и она облегчает работу с JSON ответами. Работа скрипта не сложна. Вначале получаем по данному нам VMID имя ноды, на которой трудится в данный момент эта виртуальная машина. Делаем shutdown. Далее в вечном цикле опрашиваем статус и, когда он становится stopped, то смело прерываем цикл while, и выходим на финишную прямую, запуская виртуальную машину.
Администрирование и не только
Не вполне стандартные задачи, с которыми мне приходится сталкиваться по работе и способы их решения.
Заключение
В этой статье были изложены основы того, как можно начать работать с Proxmox VE и мы надеемся, что она поможет начинающим специалистам сделать первый шаг и попробовать виртуализацию в действии.
Proxmox VE — это действительно очень мощный и удобный инструмент для любого системного администратора; главное не бояться экспериментировать и понять, как это действительно работает.