Серия «Кудахтеры: Proxmox GmbH»

22

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom Часть 12. Немного про Cpu и кластер

Для лиги лени: ничего нового, проходите мимо

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.
Часть 9. Скорости дисков
Часть 10. Внешние СХД, iSCSI
Часть 11. Система прав

Часть 12. Немного про CPU
Часть 12. CPU type
Часть 12. Hyper-threading и безопасность
Часть 12. Hyper-threading и скорость

Часть 12. CPU type

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom Часть 12. Немного про Cpu и кластер Другой мир, Windows, Linux и Windows, Linux, Proxmox, Esxi, Hyper-v, Microsoft, Длиннопост

В свойствах виртуальной машины, а может где-то еще, можно настроить CPU type. Причина появления этой настройки понятна, совместимость разных поколений процессоров.
Разные поколения процессоров имеют разные инструкции. Соответственно, чтобы приложение внутри виртуальной машины после миграции не обнаружило, что на новом физическом сервере более старый процессор не умеет выполнять какую-то инструкцию, на исходном сервере операционной системе (и приложению в ней) заранее сообщается, что там стоит «виртуально более старый процессор».
Для ESXi это называется Enhanced vMotion Compatibility (EVC). И отдельно можно поиграть в CPU Compatibility Masks.
Для Hyper-V это называется Processor Compatibility Mode (CompatibilityForMigrationEnabled)
В некоторых задачах (AES) это может дать х3 снижение производительности, в других почти незаметно.

Можно ли жить без этой настройки ? Можно, и желательно держать в кластере (в любом) одинаковые сервера – не только с одинаковыми CPU, но и с одинаковыми версиями BIOS, и с одинаковой прошивкой микрокодов для CPU в этом BIOS. Не потому, что это обязательно, а потому, что так меньше возможных проблем. И плюс исправления к CPU иногда выходят, не забывайте ставить.

Можно ли мигрировать VM «без этой настройки» ?
Выключенные однозначно да,  у всех.
Включенные в ESXi – нет.
Включенные в Hyper-V – нет, они с и включенной настройки иногда не мигрируют, хотя и по другим причинам.
Включенные в proxmox – я не пробовал.

Можно ли мигрировать между Intel и AMD ? В рамках домашних лабораторий и учебных стендов можете делать что угодно. В рабочей среде так делать не надо, даже когда режим совместимости заранее выставлен на минимальный минимум. Между Intel и AMD мигрировать в выключенном виде, так спокойнее.

Часть 12. Hyper-threading и безопасность

Когда-то давно, в 2018 году, для Intel нашли уязвимость L1 Terminal Fault (L1TF). Для устранения этой уязвимости, от момента обнаружения до момента выхода исправления, предлагалось, в том числе,:

The L1TF vulnerability introduces risk that the confidentiality of VBS secrets could be compromised via a side-channel attack when Hyper-Threading (HT) is enabled, weakening the security boundary provided by VBS. Even with this increased risk, VBS still provides valuable security benefits and mitigates a range of attacks with HT enabled. Hence, we recommend that VBS continue to be used on HT-enabled systems. Customers who want to eliminate the potential risk of the L1TF vulnerability on the confidentiality of VBS should consider disabling HT to mitigate this additional risk.
Microsoft Guidance to mitigate L1TF variant

После выхода и применения исправлений предлагалось включить HT обратно

Important: Disabling Intel Hyperthreading in firmware/BIOS (or by using VMkernel.Boot.Hyperthreading) after applying vSphere updates and patches is not recommended and precludes potential vSphere scheduler enhancements and mitigations that will allow the use of both logical processors. Mitigation should be done by enabling the ESXi Side Channel Aware Scheduler (see below).
VMware response to ‘L1 Terminal Fault - VMM’ (L1TF - VMM) Speculative-Execution vulnerability in Intel processors for vSphere: CVE-2018-3646

Для проксмокса были те же рекомендации, и предупреждение, цитата

L1TF CPU bug present and SMT on, data leak possible. See CVE-2018-3646 and https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html for details
Problem/message L1TF CPU bug and data leak

На «сейчас», после обновлений «всего», я такой рекомендации, «выключать», не видел. По крайней мере, не видел на более-менее новых процессорах и версиях 8 и 9.

Часть 12. Hyper-threading и скорость


Hyper-threading is an Intel technology that exposes two hardware contexts (threads) from a single physical core. These threads are referred to as logical CPUs. It is a common misconception that hyper-threading doubles the number of CPUs or cores. This is simply not the case. Hyper-threading improves the overall host throughput from 10-30% by keeping the processor pipeline busier and allowing the hypervisor more opportunities to schedule CPU clock cycles and so you should definitely take advantage of hyper-threading by enabling it in the BIOS of the VM host machine.
SQL Server Best Practices, Part II: Virtualized Environments

Есть несколько бытовых мифов про влияние Hyper-threading на скорость VM

Миф первый. HT замедляет работу, потому что это не настоящее ядро.
Этот миф растет из общего непонимания, что такое «ядро», и как с ним работает операционная система. HT это вообще не ядро, это «нить» или «поток исполнения»

Cores are physical processing units.
Threads are virtual sequences of instructions given to a CPU.
Multithreading allows for better utilization of available system resources by dividing tasks into separate threads and running them in parallel.
Hyperthreading further increases performance by allowing processors to execute two threads concurrently.
What Are CPU Cores vs Threads?

Тут я совсем не уверен в том, как это работает с точки зрения именно планировщика по потокам. В общем виде работает это следующим образом:
В случае нормальной работы планировщика (process scheduler \CPU scheduler ), он распределит задачи сначала по 1 потоку на физическое ядро, то есть не «на задача будет выделено физическое ядро», а «задача будет назначена на первый входящий тред физического ядра».
Поэтому в общем случае у вас не будет какой-то мега нагрузки на CPU.
Но, если вы изначально рассчитывали на включение HT и удвоение производительности, то, конечно, забудьте.

Миф второй. У меня огромнейшая нагрузка, поэтому задача, поставленная не на физическое ядро, будет работать медленно.

Поскольку речь не идет про назначение на ядра, нужно понимать, что кроме задач «на CPU», то есть математики, есть задачи ожидания из «дальней» памяти, от дисков, от сети, от пользователя, итд. Все это время само «физическое» ядро будет ждать поступления команды, и нет никаких причин для не выполнения в это время задачи из второго потока.

Скорее всего, нет у вас такой нагрузки. Но, если вы считаете, что точно есть, ну что ж, выключайте. В некоторых случаях, если вам так будет спокойнее, и вы не готовы что-то численно измерять, то можете выключить. Или сказать что выключили, иногда «сказать, что выключили и ускорили, ничего не делая» ускоряет работу системы в 1.5 раза.

Миф третий. Надо просто дать побольше ядер.
Выдать можно. Планировщик хоста будет пытаться сбалансировать треды исполнения, потому что он ничего не знает про то, какие задачи исполняются внутри.
При этом, для некоторых, довольно специфичных задач, например в случае, если у вас есть DBA, ваш DBA знает что такое NUMA, ваш DBA не боится им пользоваться, и внутри VM стоит Microsoft SQL Server 2022 или Microsoft SQL Server 2025, то выделить VM «чуть больше» чем физических ядер, и покрутить настройки трансляции NUMA может быть полезным. Про SQL soft numa и релиз ноты вообще читать полезно, как и что-то типа SQL Server Best Practices, Part II: Virtualized Environments
В остальных сценариях не надо так делать. Например, у PostgreSQL может быть грусть и тоска

Реальная сложность для меня, это отсутствие в Linux параметра CPU ready в нужном мне виде. И это не Steal time, про это ниже.
В ESXi CPU ready есть, и виден через esxtop, и в некоторых сценариях необходимо уменьшить, именно уменьшить число vCPU - Lowering the number of vCPUs reduces the scheduling wait time
Читать по теме:

CPU Ready Time Issues in ESXi Environments Running SQL Server VMs
Determining if multiple virtual CPUs are causing performance issues
How CPU management works on VMware ESXi 6.7

Для Windows server 2025 были введены новые метрики - CPU jitter counters, CPU Wake Up Time Per Dispatch, CPU Contention Time Per Dispatch, детальнее смотрите в статье CPU oversubscription and new CPU jitter counters in Windows Server 2025.

Для libvirt  есть virt-top . Для поиска источника нагрузки на диски есть iotop и htop, оба кстати не установлены из коробки.
В теме Steal time monitoring есть отсылка на проект vmtop, но как его проверить на пригодность, и как он будет жить, не из коробки и с его зависимостями – мне не очевидно. Последний коммит в проект – 16 апреля 2024.

Из этой характеристики вырастает проблема с аналогом VMware DRS (Distributed Resource Scheduler) или Hyper-V Load Balancing, точнее SCVMM dynamic optimization, особенно если на это намазан толстый слой .. для ESXi  слой ESXi host group  и VM-Host affinity rule , для Hyper-V и SCVMM – слой VM Affinity  \ Anti-affinity и Fault domain.

То есть, функционал (некий! (TM)) в Proxmox есть, Proxmox introduces Cluster Resource Scheduler for Proxmox Virtual Environment 7.3, есть отдельно ProxLB

Отдельно надо сказать про мониторинг. Я не знаю, это в Zabbix так сделано, или в Linux, или не знаю где еще, но при включенном HT, при не понятно каких условиях, нагрузка CPU выглядит как «не выше 50%».

Часть 12. И про кластер

Самое неприятное в статье Cluster Manager, это то, что там все работает от root.
Второе, не самое приятное – Corosync.
Потому что под iSCSI отдельные интерфейсы дай, под Corosync – дай (Corosync network planning), плюс лимит в хостов 20, и новостями типа with over 50 nodes in production. Ну что такое 50 нод, это ж немного. Четыре корзины по 12 лезвий.

Часть 12.Подводя итог

Если открыть статью Bibliography, то окажется, что книга Wasim Ahmed. Mastering Proxmox - Third Edition. Packt Publishing - это 2017 год, The Debian Administrator's Handbook – 2021.
Литературы мало, на русском почти нет совсем (кроме разрозненных статей). Порог входа не то чтобы высокий, но выше, чем у Hyper-V. Части привычного функционала еще нет, или он реализуется посторонними проектами. Метрокластер не понятно, как на таком строить.
Кластерная файловая система под вопросами. 
Крутить локальные виртуалки – пойдет, и даже iSCSI будет работать. Провайдеры, опять же, всякие в наличии. Но это уже совсем другая история

Литература
QEMU / KVM CPU model configuration
Enhanced vMotion Compatibility (EVC) Explained
Как работает и как используется Enhanced vMotion Compatibility (EVC) в кластерах VMware vSphere
Impact of Enhanced vMotion Compatibility on Application Performance
Processor Compatibility Mode in Hyper-V
Processor compatibility for Hyper-V virtual machines
Performance Impact of Hyper-V CPU Compatibility Mode
Proxmox wiki Manual: cpu-models.conf
Proxmox wiki IO Scheduler
Proxmox wiki High Availability
Proxmox wiki Cluster Manager
Proxmox PVE Bibliography
Старая (2010) статья Multi-Core Scaling In A KVM Virtualized Environment
What is a vCPU and How Do You Calculate vCPU to CPU?
Hyper-V NUMA affinity and hyperthreading
VMware response to ‘L1 Terminal Fault - VMM’ (L1TF - VMM) Speculative-Execution vulnerability in Intel processors for vSphere: CVE-2018-3646 (55806)
Mitigation Instructions for CVE-2022-21123, CVE-2022-21125, and CVE-2022-21166 (VMSA-2022-0016) (88632)
Guidance for mitigating L1 Terminal Fault in Azure Stack
Microsoft Guidance to mitigate L1TF variant
Which process scheduler is my linux system using?
Completely Fair Scheduler and its tuning
Linux schedulers – overview
The Linux Scheduler a Decade of Wasted Cores
New EEVDF Linux Scheduler Patches Make It Functionally "Complete"
What Are CPU Cores vs Threads?
CPU oversubscription and new CPU jitter counters in Windows Server 2025

Показать полностью 1
13

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав

Для лиги лени: ничего нового, проходите мимо

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.
Часть 9. Скорости дисков
Часть 10. Внешние СХД, iSCSI

Часть 11. Система прав

Сначала еще раз немного теории.
Про разницу аутентификации (ты чьих будешь, чей холоп ?) и авторизации (у вас есть право) много раз написано. Кроме них есть и единый источник истины (Single Source of Truth, SSOT). Истины для системы управления жизненным циклом пользователеля, User lifecycle management (ULM), то есть для плановых замен паролей и сертификатов, проверка того, что учетная запись еще включена и имеет те же самые права, что и ранее, и прочее.
Есть два подхода – локальное хранение учетных записей, и удаленное хранение учетных записей.
С локальным хранением все понятно, с удаленным хранением тоже - Identity and access management (IAM or IdAM) or Identity management (IdM), ISO/IEC 24760-1 a framework for identity management, и прочие слова.
Вокруг этого начинаются протоколы, фреймворки, методологии, ISO\ГОСТ, и конечные реализации, в том числе реализации системы прав через ролевую модель, RBAC \ ABAC \ PBAC, вот это все.
Отдельно существуют системы хранения секретов – покойный RatticDB, модные современные HashiCorp Vault, Bitwarden Vault, их клоны и так далее.

В чем проблема? Для малой организации на 2 сервера и 20 сотрудников никакой проблемы с раздачей прав нет. Альтернативно одаренные администраторы сразу дают всем права «на все», хотя бывает и хуже. Как вам, например, заведение на Linux серверах учетных записей root1, root2, root3 и передача паролей от них? Потому что менять руками сложно, а ssh \ bash \ Ansible слова слишком страшные.
Реализаций центральной служб каталогов несколько, многие (как  Novell Netware Directory Services (NDS) \ NetIQ eDirectory) уже ушли в небытие. Замена AD на SAMBA не является предметом данной статьи.

Предметом специальных BDSM практик является использование Realmd\ SSSD, или такое отвратительное явление, как хранение сертификатов в домене. Оба извращения не являются предметом данной статьи.

Что есть в Proxmox .
Конечно, в Proxmox есть встроенная авторизация, в web и SSH, и возможность использовать внешние сервисы.

По умолчанию в Proxmox (из коробки) включены:
Linux PAM standard authentication
Proxmox VE authentication server

Можно добавить Microsoft Active Directory (AD), LDAP и OpenID. Можно добавить 2FA.

В чем разница Linux PAM standard authentication и Proxmox VE authentication server?
Отвечает reddit:

long story short: PAM users are normal gnu/linux user, as in username/password that you can use to log in via ssh.

PVEAS otoh are Proxmox users, they cannot be used to log in via ssh, they are stored in the clustered/distributed storage along with proxmox configuration and they are the same on all the nodes of a proxmox clusters

Как это работает в GUI на уровне DC  
Завожу пользователя user_pam как Linux PAM на уровне DC, но в поле заведения пользователя нет пароля.
Есть выбор группы, но нет предопределенных групп.
При попытке смены пароля для пользователя user_pam получаю ошибку:
change password failed: user 'user_pam' does not exist (500)
В /etc/passwd – нет такого юзера.
В /etc/pve/user.cfg есть оба созданных
По команде «pveum user list» выводится таблица того, что насоздавал. В том числе user_pam@pam.
По команде pveum passwd user_pve@pve можно сменить пароль для юзера в PVE
По команде pveum passwd user_pam@pam сменить пароль тоже нельзя – получаю ошибку
change password failed: user 'user_pam' does not exist

Но в таблице (pveum user list) он есть.

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав Linux, Linux и Windows, Proxmox, Windows, Microsoft, IT, Длиннопост

Когда я заводил юзера user_pve в realm Proxmox VE, система сразу предложила не только создать юзера, но и назначить ему права из заранее созданных наборов ролей – от Administrator до No access. 
Но это окно почему-то возникает только один раз, и это магия.

В остальных случаях оказывается, что интерфейс писали люди со своими представлениями, и права выставляются на вкладке Permission, это не только именование раздела.
И изнутри свойств объекта user эти права можно только посмотреть. Как и из Permission, или add, или remove

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав Linux, Linux и Windows, Proxmox, Windows, Microsoft, IT, Длиннопост

Остальные права выставляются как права на объект в дереве обьектов

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав Linux, Linux и Windows, Proxmox, Windows, Microsoft, IT, Длиннопост

В сочетании с ролями «что с ними делать». Наличие двух ролей Administrator и PVEAdmin только делает жизнь веселее

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 11. Система прав Linux, Linux и Windows, Proxmox, Windows, Microsoft, IT, Длиннопост

Управление входом в GUI отличается тем же своеобразием.
В CLI я вижу пользователя как root@pam 
Но войти в GUI, как root@pam я не могу, вне зависимости от выбора realm.
То есть, система не может сама опознать, что я ввел @realm, и realm надо выбирать вручную в GUI, и входить без указания @realm.

Управление ролями в GUI тоже отличается неожиданным подходом. К роли можно выбрать привилегии, но в выпадающем списке нет чекбоксов, но работает OnClick и OnClickAgain , то есть выбор по клику. Это было очень неожиданно.

Чуть странная, с первого взгляда, но понятная ролевая модель. То что у Microsoft называется AGDLP, тут соответственно это User <> Group <> Role <> Permissions

Отредактировать права из GUI нельзя, можно только удалить и создать. УДОБНО!

Права на «просто логин» можно дать через роль No Access, ок, понятно.
Права на консоль можно дать через привилегию Sys.Console, только она не работает «из коробки». Привилегию я выдал, причем на /», причем наследование тоже какое-то не очевидное. Но это привилегия не на запуск консоли, а на право на запуск консоли, и консоль снова запрашивает логин-пароль, но user_pve прав на вход в консоль не имеет. Решение «делать через sudoerr» описано, но проблеме со всей системой прав уже семь лет.

Наблюдается расхождение. Пользователь может быть заведен в Linux, и иметь права на SSH, и на su, но не иметь прав на pveum.

Очень, очень странно.

Примечание. В Hyper-V , несмотря на развесистую систему прав, нет делегирования права на только Hyper-V или отдельную оснастку. Можно знатно поиграть в PowerShell Web Access (PSWA),  PswaAuthorizationRule  и security descriptor definition language (SDDL), но это надо знать, во что играть.

Заключение.

Система понятна, много описано, много описано на практических примерах и форуме. Жить можно, но root отключить нельзя.
По многим причинам, в том числе я еще не описывал все приключения с кластеризацией.

Литература
Difference between RBAC vs. ABAC vs. ACL vs. PBAC vs. DAC
Red Hat Chapter 2. Using Active Directory as an Identity Provider for SSSD
Red Hat Chapter 3. Using realmd to Connect to an Active Directory Domain
Realmd and SSSD Active Directory Authentication
Proxmox User Management
Proxmox Proxmox VE Administration Guide - 14. User Management
Proxmox forum group permissions
Proxmox forum "change password failed: user 'johnsmith' does not exist (500)"
Proxmox forum Add user/group account with ssh access and root privileges
Proxmox forum SSH Login with VE Authentication Server
Proxmox Bugzilla Bug 1856 - System Updates with non-root User using Web-GUI
Proxmox CLI pveum(1)
Reddit ELI5: PAM vs PVE Authentication Server
Microsoft PowerShell Web Access in action

Показать полностью 4
10

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI

Для лиги лени: ничего нового, проходите мимо.

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.
Часть 9. Скорости дисков

Часть 10. Внешние системы хранения данных

Что есть в 2025 году из протоколов подключения систем хранения?
FCP, Fibre Channel Protocol. Старый, постепенно отмирающий, но менять надежность и привычность FCP на DCB сложно. Не столько сложно технически, сколько организационно. Для внедрения нужно будет бить сетевиков палкой, чтобы не пытались рассказывать про LAG вне контекста Mellanox 6 (или 8, не помню).
iSCSI \  iSCSI Extensions for RDMA (iSER). C iSCSI работает вообще все, вопрос с какой скоростью и с какими настройками. iSER при этом под вопросом самого своего существования.
SMB Multichannel.  Живее всех живых.
NVMe over Fabrics в ее вариантах – over FC, over Ethernet, over IB.

Поскольку речь про Proxmox, то SMB Multichannel, крайне удобная и рабочая конструкция для S2D, Storage Spaces Direct, тут рассматриваться не будет.
Подключение по FC сейчас, ввиду политики Broadcom,  вещь неоднозначная.

Остается iSCSI.

Открываем OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Red Hat и читаем до просветления главу Establishing iSCSI Connections и Recommended Configurations for 6.x and V700R001 Series Storage Systems for Taking Over Data from Other Huawei Storage Systems When the Host Uses the OS Native Multipathing Software.

Или, если у вас другой вендор системы хранения, читаем его документацию. Вообще, конечно, очень странно устроен Linux в части device-mapper-multipath. Точнее, у Hyawei пишется, что настройки нужно делать в alua, и не содержит указаний на настройки rr_min_io, хотя path_selector и выставлен в "round-robin 0". В главе про ESXi для AFA (all flash array) указано про rr=1, а тут нет. Но это настройки больше про скорость, а так и 1000 IOPS сойдет (но может быть не так просто).

Теперь к практике. Сделаю iSCSI target на Windows server, эта функция там из коробки лет 20, и добавлю к Proxmox.

Сначала спланирую сеть, как обычно – с извращениями.
Vlan 11, Windows server 172.16.211.151/24; Proxmox 172.16.211.162/24
Vlan 12, Windows server 10.0.12.151/24; Proxmox 10.0.12.162/24
LACP для iSCSI не рекомендован много кем, в том числе из-за сложностей с Multiple Connections per Session.
Добавляю новый свитч:
New-VMSwitch -Name Privet01 -SwitchType Private
Добавляю по 2 сетевые в обе VM -
Add-VMNetworkAdapter -VMName Proxmox -SwitchName Privet01 -Name V11
Add-VMNetworkAdapter -VMName Proxmox -SwitchName Privet01 -Name V12
Set-VMNetworkAdapterVlan -VMName Proxmox -Access -VlanId 11 -VMNetworkAdapterName V11
Set-VMNetworkAdapterVlan -VMName Proxmox -Access -VlanId 12 -VMNetworkAdapterName V12
и аналогично для второй VM

В этой конфигурации есть проблема. По умолчанию для VMNetworkAdapter включен VMQ. В некоторых сценариях и с некоторыми сетевыми картами эта функция работает очень плохо, вызывая какие-то разрывы, там, где не было ни единого разрыва, причем влияя на весь сетевой стек.

Я бы рекомендовал всем, кто использует Hyper-V и VMQ, проводить тестирование работы до запуска в продуктив.

В этой конфигурации есть еще одна проблема. После создания нового виртуального коммутатора и добавления двух сетевых карт в VM Windows server, первая сетевая карта в VM перестала получать адрес по DHCP, и основной адаптер стал (может, и был, я не проверил)
Microsoft Hyper-V Network Adapter #2
Первый раз такое вижу. Ситуация усугубляется тем, что старый интерфейс управления сетями в Windows server 2025 спрятали, а новый убогий.
Удалил вновь созданный виртуальный коммутатор, хотя он был SwitchType Private, все пересоздал, перезагрузил, сделал статичный IP внутри VM – вроде, работает.
Вопрос «что это было» не раскрыт.

Настройка VM Windows Server
Самое неудобное – это найти по MAC адресу, какая сетевая карта куда включилась.
Get-NetAdapter
вы думали
Set-NetIPAddress -InterfaceIndex 10 -IPAddress 172.16.211.151 -PrefixLength 24 ?

Ничего подобного.
New-NetIPAddress -InterfaceIndex 10 -IPAddress 172.16.211.151 -PrefixLength 24
New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.0.12.151 -PrefixLength 24

И, конечно,
Install-WindowsFeature -Name FS-iSCSITarget-Server –IncludeManagementTools

Настройка Proxmox
ip a, только для того чтобы увидеть MAC адреса интерфейсов
nano /etc/network/interfaces

auto vmbr1.11

iface vmbr1.11 inet static
address 172.16.211.162/24

auto vmbr1
iface vmbr1 inet manual
bridge-ports eth2
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 11

не забываем про ifreload -a
И даже пинг не работает на таком свиче.  Что-то прописать забыл. Очень неудобная история с системой интерфейсов в Proxmox. С одной стороны со схемой тут я переусложнил, с другой – в целом система настройки Linux bridge – vlan interface не самая удобная. Слишком много сущностей приходится прописывать.
Примечание. Не забыл. Прописал лишний раз – у меня же отдельный интерфейс отдан в VM, ему не надо настраивать vlan, как будто он в транк включен. Поэтому все проще, не забыть разрешить any any в windows firewall (в рабочих сетях так делать, конечно, не надо), и :

iface eth2 inet manual
auto vmbr2

iface vmbr2 inet manual
address 172.16.211.162/24
bridge-ports eth2
bridge-stp off
bridge-fd 0

аналогично настроить iface eth3, и заработало .
желательно сразу посмотреть ID инициатора -
cat /etc/iscsi/initiatorname.iscsi | grep InitiatorName=

Отдаем iSCSI target с Windows server

Тут ничего нового уже много лет. Server manager – files services – iSCSI – далее- далее – прописать (для стенда сойдет) IP адреса и готово. Конечно, с CHAP. Получаем iSCSI target с Windows server

Два НО.
Первое НО. Нужно заранее прочитать про  Set-IscsiTargetServerSetting и сделать
Set-IscsiTargetServerSetting -IP 192.168 (что там у меня)  -Enable $False
и проверить
netstat -an | findstr "3260"
Менять ли приоритеты для IPv6 или их отключать – ваше личное дело. Напоминаю, что чекбокс «отключить ipv6» не работает уже лет 10. Нужно делать как написано в Guidance for configuring IPv6 in Windows for advanced users
или сделать
Get-NetIPAddress | Select IPAddress
Set-IscsiTargetServerSetting для ipv6
и перепроверить по старой школе
netstat -an | findstr "3260"
Или по новой школе
Get-NetTCPConnection | where {$_.LocalPort -eq 3260}

Второе НО.
Для тестов не забыть сделать:
New-NetFirewallRule -DisplayName "001  permit any 172.16.211.162" -Direction Inbound -Action Allow -RemoteAddress 172.16.211.162
New-NetFirewallRule -DisplayName "001  permit any 10.0.12.162" -Direction Inbound -Action Allow -RemoteAddress 10.0.12.162

С IPv6 поступать опционально, внимательно прочитав Guidance for configuring IPv6 in Windows for advanced users

Подключаем iSCSI target с Windows server на Proxmox (Initiator) - отладка

В GUI подключение iSCSI находится в datacenter-storage, а не в  управлении хостом.
Редактируем /etc/iscsi/iscsid.conf согласно статье Proxmox Multipath и рекомендациям вендора СХД. Или не редактируем!
открываем GUI и .. и видим фигу, потому что полей для авторизации \ CHAP нет, а без них никакого target.
Отключаю CHAP, и все равно ничего не видно. Как обычно, в GUI никаких деталей нет, поэтому проверять придется руками.
Начнем по встроенной инструкции по кнопке HELP в GUI -
pvesm status
pvesm scan iscsi 172.16.211.151:3260:3260
и получу iscsiadm: No portals found

Пойду почитаю Подключение iSCSI диска в Proxmox,
iscsiadm --mode discovery --type sendtargets --portal 172.16.211.151

и получу тот же - iscsiadm: No portals found
nc -z 172.16.211.151 3260
выдает ничего. Пинг есть.

Поиграем в отладку!
nc -v 172.16.211.151 3260 со стороны инициатора (proxmox) работает с выводом результата
[172.16.211.151] 3260 (iscsi-target) open
netstat -an | findstr "211" со стороны target (Windows) работает с выводом результата
TCP  172.16.211.151:3260  172.16.211.162:37638  ESTABLISHED

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

Осталось протереть глаза, и оказалось, что я, вводя разрешенные IP в target, ввел не 172.16.211.162, а 172.16.11.162
ввел нужные данные, и
pvesm scan iscsi 172.16.211.151:3260 
выдал все что надо.
Иначе бы пришлось лезть в tcpdump с обеих сторон. Для Windows, после ухода на пенсию (deprecated) Microsoft Network Monitor и Microsoft Message Analyzer, пока что есть wireshark.

Верну обратно chap, user = user, password = password1234, добавлю через GUI, посмотрю что вышло в
/etc/pve/storage.cfg
Вышло как по руководству,

iscsi: mynas
portal 10.10.10.1
target iqn.2006-01.openfiler.com:tsn.dcb5aaaddd
content none

И затем в GUI делаем Datacenter – Storage – add – LVM –

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

То, что это делается на уровне DC, а не на уровне хоста, раздражает конечно. Как и vmotion диска на уровне VM – hardware.

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

При этом, даже когда я включил CHAP, но или ранее был сделан логин, или еще по каким-то причинам сессия не переподключилась, то можно сделать LVM том , но при попытке перенести на него тестовую VM – получить:
iscsiadm: initiator reported error (8 - connection timed out)
iscsiadm: Could not login to [iface: default, target: iqn.1991-05.com.microsoft:win25-target01-target, portal: 192.168.2.150,3260].
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)
iscsiadm: Could not log into all portals

После таких включений на стендах всегда надо перегружать initiator, да и target не повредит.

Подключаем iSCSI target с Windows server на Proxmox (Initiator) с CHAP

Для начала удалю все, что сделал до этого – пустой LVM и подключение iSCSI. Тоже неудобно, конечно – есть у тебя том, зачем на нем еще сущности типа LVM применять.
Удалить iSCSI подключение из управления DC нельзя, будет ошибка
delete storage failed: can't remove storage - storage is used as base of another storage (500)

При этом все сущности хранения лежат в одной куче – и iSCSI, и LVM, и все на уровне DC, а не ноды. Поэтому тут тоже надо сразу делать соглашение по именованию.

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

Удалю сначала LVM, тогда дает удалить и iSCSI.

Без ввода CHAP в GUI (его там нет) подключение к порталу проходит . Но при попытке создать LVM не возникает список томов для создания LVM.
Придется на ручном приводе (в норме, конечно, через Ansible)

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

nano (или vi) /etc/iscsi/iscsid.conf

Конфигурация содержит блоки:
1 # To enable CHAP authentication set node.session.auth.authmethod
2 # To set a CHAP username and password for initiator
3 # To set a CHAP username and password for target(s)
4 # To enable CHAP authentication for a discovery session to the target, set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
5 # To set a discovery session CHAP username and password for the initiator
6 # To set a discovery session CHAP username and password for target(s)

Мне нужны
node.session.auth.authmethod = CHAP
node.session.auth.username = user
node.session.auth.password = password1234

и потом по вкусу
systemctl restart iscsid
iscsiadm -m node --portal "172.16.211.151" --login
после чего должны получить:

iscsiadm: default: 1 session requested, but 1 already present.
iscsiadm: Could not log into all portals

посмотрим, что там:
iscsiadm -m discovery -p 172.16.211.151 -t st
о, все работает, нужные порталы есть, не нужных порталов нет!

Если вы все сделали правильно, то в GUI появится возможность выбора base volume

Переход на Proxmox (Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть 10. Внешние системы хранения данных - iSCSI Proxmox, Linux, Windows, IT, Microsoft, Длиннопост

И при попытке создать LVM вы получите ошибку –

create storage failed: command '/sbin/pvs --separator : --noheadings --units k --unbuffered --nosuffix --options pv_name,pv_size,vg_name,pv_uuid /dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' failed: exit code 5 (500)

Хотя должна была быть другая ошибка -
create storage failed: vgcreate vg01 /dev/disk/by-id/scsi-360003ff44dc75adc839073953a451b73 error: Cannot use device /dev/sdc with duplicates. (500)

Отключу один IP на windows target и проверю:

iscsiadm -m session

service open-iscsi status
systemctl restart iscsid.service
systemctl restart open-iscsi.service
/etc/init.d/open-iscsi restart
Ничего не помогает, сессия со стороны Linux до 10.0.12.151, была и осталась.  Со стороны Windows target TCP сессий при этом нет.
И так ничего не получается.
И ладно, да и пошло все, семь бед – один reboot.
после ребута все хорошо, один путь, но при создании группы получаю ошибку, что группа уже создана!
create storage failed: device '/dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' is already used by volume group 'VGiscsi01' (500)

Удалю ее (на уровне хоста в disks – LVM) и пересоздам.
ВЖУХ И ВСЕ СОЗДАЛОСЬ.

Снова удалю, верну обратно два пути на target, перезагружу proxmox (видимо, самый надежный метод),
посмотрим, что там:

iscsiadm -m discovery -p 172.16.211.151 -t st , отлично, два портала на месте.
Создам еще раз LVM через GUI, и отлично, ошибка создания воспроизвелась,  
create storage failed: command '/sbin/pvs --separator : --noheadings --units k --unbuffered --nosuffix --options pv_name,pv_size,vg_name,pv_uuid /dev/disk/by-id/scsi-360003ff44dc75adcbb96b955813029da' failed: exit code 5 (500)
И группа iscsiVG02 создалась! Хотя и не должна была!
Надо будет воспроизвести и баг репорт написать.

Подключаем iSCSI target с Windows server на Proxmox (Initiator) с CHAP и Multipath
Читаем ISCSI Multipath, видим что текст устарел, идем на Multipath. В втором окне не забываем открыть Подключение iSCSI диска в Proxmox – там как раз про multipath есть параграф.
В старом тексте есть абзац

# apt-get install multipath-tools

В новом тексте
apt install multipath-tools
Но почему-то в середине текста.

Окей, multipath-tools поставил,
nano /etc/iscsi/iscsid.conf поправил, lsblk посмотрел, wwid сравнил
/lib/udev/scsi_id -g -u -d /dev/sdc
/lib/udev/scsi_id -g -u -d /dev/sdd
остальные настройки прописал, только для 7.3-6. сервис был
systemctl restart multipath-tools.service
а в 9 стал
systemctl restart multipathd.service
или я опять что-то путаю.
Доделаю. multipath -r; multipath –ll; multipath -v3

Следующий раздел меня, конечно, удручает:
Multipath setup in a Proxmox VE cluster If you have a Proxmox VE cluster, you have to perform the setup steps above on each cluster node. Any changes to the multipath configuration must be performed on each cluster node. Multipath configuration is not replicated between cluster nodes.

Впрочем, на ESXi с прописыванием esxcli storage nmp satp list и esxcli storage nmp satp rule, на каждом хосте, все то же самое.

Далее далее, новая VG создалась. ВЖУХ и трансфер прошел.
На физическом сервере можно было померять скорость доступа и нагрузку на интерфейсы, но в nested среде особого смысла в этом нет.

Может быть, потом.

Литература

Microsoft Set-IscsiTargetServerSetting
Microsoft  Simplified SMB Multichannel and Multi-NIC Cluster Networks
Microsoft Guidance for configuring IPv6 in Windows for advanced users
Microsoft  New-NetFirewallRule
Huawei OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Windows
Huawei OceanStor Dorado and OceanStor 6.x and V700R001 Host Connectivity Guide for Red Hat
Huawei Recommended Configurations for 6.x and V700R001 Series Storage Systems for Taking Over Data from Other Huawei Storage Systems When the Host Huawei Uses the OS Native Multipathing Software.

NVMe over Fabrics: Fibre Channel vs. RDMA
Synology What is SMB3 Multichannel and how is it different from Link Aggregation?
Обзор NVMe over Fabric, NVMe-oF
Configuring Highly Available NVMe-oF Attached Storage in Proxmox VE
High Performance Shared Storage for Proxmox VE

RH 4.4. Multipaths Device Configuration Attributes
RH Chapter 5. Modifying the DM Multipath configuration file

ISCSI: LACP vs. MPIO
802.3ad LACP for ISCSI
Proxmox Network Configuration

Proxmox Storage: iSCSI
Proxmox Multipath
Proxmox forum iSCSI Huawei Oceanstore Dorado 3000 LVM and Multipath
Proxmox forum How to Configure and Manage iSCSI Storage in Proxmox for Your Virtual Machines?
Proxmox forum How to setup multipathing on Proxmox VE?
Proxmox forum iSCSI with CHAP
Proxmox forum Proxmox, iSCSI and CHAP
Proxmox forum Proxmox 7.1, iSCSI, chap, HPE MSA and problems
Proxmox forum How to move VM to another storage

Подключение iSCSI диска в Proxmox

Показать полностью 6
13

Переход на Proxmox (Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть девятая. Скорости дисков

Для лиги лени: неудачная часть. Пусть все видят, как я ничего не умею.

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS
Часть 4. Наконец переходим к Proxmox
Часть 5, не запланированная. Обновляем Proxmox с 8.4 до 9.0. Неудачно.
Часть 6. Возвращаемся к запуску Ansible
Часть 7. Разница концепций
Разница концепций. Часть 7.1 Обновления компонентов и система информирования.
Разница концепций. Часть 7.2 Сети
Разница концепций. Часть 7.3 предисловие к теме «Дисковое пространство».
Разница концепций. Часть 7.4 «Локальное дисковое пространство».
Часть 8. Разница концепций
Разница концепций. Часть 8.1 Расположение дисков VM
Разница концепций. Часть 8.2 Добавление дисков к хосту
Разница концепций. Часть 8.3 Настройка нескольких дисков
Разница концепций. Часть 8.4 Управление диском виртуальной машины.

Часть 9. Скорости дисков

Отказ от ответственности. Эта часть тестов предназначена для описания общей идеологии тестирования. Результаты и методология могут быть неправильными и показывать некорректный, или неприменимый в вашем случае, результат.
Базовые скорости, от которых я буду отталкиваться, сформированы как результат не очень показательных тестов из статей:
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 1 - общая
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 2 - виртуализация
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 3 – цифры и предварительные итоги
Тестирование локальных дисков и систем хранения данных: подводные камни. Часть 4 – что там изнутри виртуализации
Новый ноутбук: скорость, плюсы-минусы, DiskSPD, Hyper-V и продолжение про методику тестирование скорости
Новый ноутбук 2: скорость, плюсы-минусы, DiskSPD, Hyper-V и далее

Итак, тесты.
Тест скорости локальных дисков сформирован исходя из того, что у меня на ноутбуке 64 Гб памяти, 6 ядер и 12 потоков. И это AMD, который показывает на AMD варианте HT хороший прирост скорости вплоть до использования всех 12 потоков при дисковых операциях.
Поэтому тесты планировались  следующие: (потом все поменялось)
Для Windows:
diskSPD для 8 и 12 потоков на одном 150 Гб файле, с файловой системой NTFS, размер кластера 4к.
diskSPD для 8 и 12 потоков на одном 150 Гб файле, с файловой системой NTFS, размер кластера 8к.
Тесты на 5 минут: тест 1 - 100% чтение, тест 2 - 100% записи. IO блок 4k
Итого 8 тестов.

Для Windows server внутри Hyper-V:
Виртуальной машине будет выделено 8 ядер и 24 Гб памяти. Очередь 16.
diskSPD для 8  потоков на одном 150 Гб файле, с файловой системой NTFS, размер кластера внутри VM 4к, параметры vhdx диска LogicalSectorSize 4KB PhysicalSectorSizeByte 4K
diskSPD для 8  потоков на одном 200 Гб файле, с файловой системой NTFS, размер кластера 4к внутри VM, параметры vhdx диска LogicalSectorSize 4KB PhysicalSectorSizeByte 4K, NTFS диска с файлом VM с размером кластера 8k.

Полученные данные надо было бы сводить в таблицу, но тогда будет картинка, а это неудобно, поэтому:
тестовый прогон, когда я ошибся с параметром очереди:
В IOPS per thread указан разброс, с округлением вниз, до целых тысяч.

Короткие тесты хоста (d10 = 10 секунд на тест), в данном случае моего ноутбука.
Новый стенд я так и не собрал, а на основных тестовых стендах крутятся совсем другие задачи.
Расшифровка параметров: diskspd  Command line and parameters
-t8 -w0 -b4k -W10 -o2 -d10 -Suw -D –L
-t8  -t<count>  Number of threads per target.
-w0  -w<percentage>  Percentage of write requests to issue (default = 0, 100% read).
-b4k  -b Block size in bytes or KiB, MiB, or GiB (default = 64K).
-W<seconds>  Warmup time – duration of the test before measurements start
-o2 -o<count>  Number of outstanding I/O requests per-target per-thread.
-d10 -d<seconds>  Duration of measurement period in seconds, not including cool-down or warm-up time (default = 10 seconds).
-Suw  -S[bhmruw] This flag modifies the caching and write-through modes for the test target.
-Su Disable software caching, for unbuffered I/O.
-Sw Enable write-through I/O. This opens the target with the FILE_FLAG_WRITE_THROUGH flag. This can be combined with either buffered (-Sw or -Sbw) or unbuffered I/O (-Suw).
-D<milliseconds> Capture IOPs higher-order statistics in intervals of <milliseconds>
-L  Measure latency statistics.
-c<size> В пример не попало.

Короткие тесты хоста NTFS 4k
-t8 -w0 -b4k -W10 -o2 -d10 -Suw -D -L = 42-44 k IOPS per thread = 347 k IOPS total
-t12 -w0 -b4k -W10 -o2 -d10 -Suw -D -L = 36-36 k IOPS per thread = 453 k IOPS total
-t8 -w100 -b4k -W10 -o2 -d10 -Suw -D -L = 33-34 k IOPS per thread = 272 k IOPS total
-t12 -w100 -b4k -W10 -o2 -d10 -Suw -D -L  = 27-28 = 340 k IOPS total

Короткие тесты хоста NTFS 8k
Очень странный результат, я ожидал, что будет падение в разы.
По моему, я померял скорость кеша NVME . 
-t8 -w0 -b4k -W10 -o2 -d10 -Suw -D -L = 44-44k 44 k IOPS per thread = 356k IOPS total
-t12 -w0 -b4k -W10 -o2 -d10 -Suw -D –L = 36-38 k IOPS per thread = 459 k IOPS total
-t8 -w100 -b4k -W10 -o2 -d10 -Suw -D –L = 39-39 k IOPS per thread = 315 k IOPS total
-t12 -w100 -b4k -W10 -o2 -d10 -Suw -D –L = 31-33  = 397 k IOPS total
В последнем тесте записано 16.275.570.688 байт = почти 16 Гб, столько оперативной памяти вроде там быть не должно.

Результаты рабочего теста хоста. 5 минут на тест (как оказалось, мало). NTFS 4k
-t8 -w0 -b4k -W10 -o16 -d300 -Suw -D -L = 29-30 = 239
-t12 -w0 -b4k -W10 -o16 -d300 -Suw -D –L = 25-28 = 325
-t8 -w100 -b4k -W10 -o16 -d300 -Suw -D –L = 14-15 = 120 . Вот и падение на запись появилось, куда ниже данных короткого теста.
-t12 -w100 -b4k -W10 -o16 -d300 -Suw -D -L = 9-10 = 119

Результаты рабочего теста хоста. 5 минут на тест (как оказалось, мало). NTFS 8k
-t8 -w0 -b4k -W10 -o16 -d300 -Suw -D –L = 38-39 = 313
-t12 -w0 -b4k -W10 -o16 -d300 -Suw -D –L = 29-32 = 371
-t8 -w100 -b4k -W10 -o16 -d300 -Suw -D –L = 12-12 = 102. Вот и падение на записи блоком 4к на диск с разметкой 8к. Было 120, стало 102. Точнее, было 15 на тред, стало 12 на тред. И это с включенным кешем на запись на уровне диска, который не понятно, учитывается при ключе -Suw или нет. И когда этот чекбокс применяется, до перезагрузки или после
-t12 -w100 -b4k -W10 -o16 -d300 -Suw -D -L – 7-7 = 94
окей, базовые цифры понятны.

Теперь то же самое, но с отключенным буфером записи на уровне дисков.
-t8 -w100 -b4k -W10 -o16 -d300 -Suw -D -L
NTFS4k = 14..14 =  117
NTFS8k = 12..12 = 100
окей, падение есть, но все же меньше 20%. По моему, я все равно буфер меряю.

Результаты теста VM Windows Server 2025 Evaluation с 8 ядрами и 24 Гб памяти
настройки VHDX: LogicalSectorSize  : 4096 ; PhysicalSectorSize  : 4096

NTFS 4k host, NTFS 4k внутри vhdx
-t6 -w0 -b4k -W10 -o16 -d300 -Suw -D -L = 4-93 = 390
-t8 -w0 -b4k -W10 -o16 -d300 -Suw -D -L = 9-75 = 475
-t6 -w100 -b4k -W10 -o16 -d300 -Suw -D -L = 9-10 = 61
-t8 -w100 -b4k -W10 -o16 -d10 -Suw -D –L = 10-14 = 90

Просадка идет по 2 потокам из 8, так что 6 физических ядер справляются полностью, но вот Hyper-V транслирует задачи на логические потоки AMD, видимо «так себе». Так что надо будет смотреть внимательнее, но у меня ни одного сервера на AMD нет. И в дальнейшем надо ограничивать виртуальные машины по числу физических ядер на виртуалку, если нужен максимум без просадок.
-t8 -w100 -b4k -W10 -o16 -d300 -Suw -D -L = 2.4 – 2.6 = 20
-t12 -w0 -b4k -W10 -o16 -d300 -Suw -D –L = 4-76 = 491
тесты на 12к тоже прошли, но они показывают только продолжение деления потоков.

NTFS 8k host, NTFS 4k внутри vhdx
-t6 -w0 -b4k -W10 -o16 -d300 -Suw -D -L = 4-94 = 404. При том, что три потока по 74.
-t8 -w0 -b4k -W10 -o16 -d10 -Suw -D –L = 9-63 = 416
-t8 -w100 -b4k -W10 -o16 -d10 -Suw -D -L = 1.8 = 14. Вот это падение. Причем тест длиной в 10 секунд.
-t8 -w0 -b4k -W10 -o16 -d300 -Suw -D –L= 9-78 = 482
-t8 -w100 -b4k -W10 -o16 -d300 -Suw -D –L = 2.5 = 20 . Падение .. какое-то.

Что из этого можно понять? Ничего, кроме того, что с тестами что-то не так.
Физика -t8 -w0 = 29-30 = 239
VM -t8 -w0  = 9-75 = 475.
Так быть не должно. И, очень может быть, что источник проблемы – кеширование дисков VM средствами ОС. Есть у Windows такая нехорошая привычка, втихаря кешировать файлы данных, пока оперативной памяти хоста хватает, и еще немного после. Видно это явление через Rammap, но отслеживать мне это явление крайне , крайне лень.
Обойдусь указанием на тот факт, что за 5 минут тестов «на запись» - динамические диски VM выросли всего до 13 Гб и 12 Гб. Значит, нужен тест не на 5 минут внутри VM, а часа на два. И на чтение такой же, чтобы система точно не успела откешировать.

Что ж. Поставлю тесты по 7200 секунд и пусть считает хоть всю ночь.
Все равно надо подобрать параметры, потому что на 8 виртуальных ядрах даже на 4 потоках получается какой-то ужасный разброс, типа 3 потока по 80 тысяч на чтение, и один поток на 7 (семь) тысяч на чтение, падение в 10 раз. Это не disk write caching, а или
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DynCache\Parameters]
или что-то отсюда же.

Начинаем тестирование по новой!
Итак, 6 vCPU Hyper-V в случае AMD, очень похоже что для Windows означают 6 потоков. Первые три потока распределяются на три физических ядра, следующие потоки начинают отправляться на исполнение на HT поток, но. Но если для физического хоста дисковые операции в diskspd идут почти без просадки, то для такого же diskspd изнутри VM это уже не так. Как итог, VM под Windows с 6 vCPU при трех дисковых потоках выполняет три потока без рассинхронизации, 4 потока идут уже с значительной просадкой одного потока, 5 и 6  потоков идут с просадкой в 10 (десять) раз.
таким образом, для VM на 10 vCPU должны исполняться до 5 потоков без существенной рассинхронизации.
Проверка.
-t2 -w0 = 161;165 = 327
-t3 -w0 = 76;75;76 = 227
-t4 -w0 = 26;26;26;26 = 107
-t5 -w0 = 32;32;32;32;1.2 = 131
При 5 потоках начался рассинхрон, причем разница не в 10, а в 30 раз, когда потоки получаются по 30 тысяч, и по 1.2 тысячи.
Значит, для 10 vCPU , максимальный имеющий смысл длительный тест – 4 потока, и 5 потоков подойдет для «мне только посмотреть».
При этом, практика на Intel серверах показывает, что для ряда задач ситуация совершенно другая.
Проводите измерения, пожалуйста, самостоятельно.

Внимание, все дальнейшие тесты выполнены с ВЫКЛЮЧЕННЫМ кешем на запись в свойствах диска хоста.
В гостевой системе Win server 2025 кеш диска на запись штатно не отключаем.
VM = 10 vCPU
Общие параметры теста -t2 -w0 -b4k -W10 -o16 -d5400 -Suw -D –L
-t2 -w0 NTFS4k = 190; 186 =  376
-t2 -w0 NTFS8k = 193;190 = 384
-t3 -w0 NTFS4k = 82;81;81 = 245
-t3 -w0 NTFS8k = 79;78;78 = 237
-t4 -w0 NTFS4k = 27;27;27;27 = 111
-t4 -w0 NTFS8k = 27;27;27;27 = 111
-t5 -w0 NTFS4k = 31;31;31;31,1 = 128
-t5 -w0 NTFS8k = 24;24;24;24,0.8 = 99

-t5 -w100 NTFS4k = 11,11,11,11,11 = 56
-t5 -w100 NTFS8k = 9,9,9,9,9 = 48

Итого, для 10 vCPU –
Для 4 потоков на чтение еще соблюдается баланс между потоками. На 5 потоках уже нет баланса на чтение.
Для 5 потоков на запись – какой-то баланс еще есть.

Побочное открытие. Поскольку файл с данными для diskspd лежит на тонком томе, и не вырос, то получается, что случайное чтение идет не с реальных данных какого-то паттерна, а с не записанных данных. То есть вопрос, а что система читает, ответ драйвера «0» в большей части случаев, поскольку фактический размер тестовых файлов 10-12 гб?

Прочие инструменты тестирования
Кроме ранее упомянутых тестов SQLsim и HammerDB
Есть статья (перевод: Рекомендации по тестам производительности для Azure NetApp Files) с рекомендованными инструментами:
Sql Storage Benchmark (SSB) и FIO.
Для FIO сделаны рекомендации
fio --name=8krandomreads --rw=randread --direct=1 --ioengine=libaio --bs=8k --numjobs=4 --iodepth=128 --size=4G --runtime=600 --group_reporting
с комментарием, цитата:

Эти сценарии охватывают как кэширование, так и обход кэширования для случайных рабочих нагрузок ввода-вывода с помощью параметров FIO (в частности, randrepeat=0 для предотвращения кэширования в хранилище и directio, чтобы предотвратить кэширование на клиенте).

При этом, что не менее интересно, изнутри VM с Windiws  – diskSPD видит систему как:
cpu count:  10
core count:  5
Как при этом работает CPU scheduler в ОС гипервизора и ОС гостевой системы – я не понимаю. Возможно, надо делать 6 ядер для гостевой ОС, и в Hyper-V указывать threads per core =1 , а не оставлять по умолчанию.

Какие можно сделать промежуточные выводы?

30 секундные, 1-5 минутные тесты показывают кеширование. Реальная производительность после 1-2 часов тестирования будет отличаться. И это я еще не рассматриваю проблему домашних SSD дисков с работой в «пустом» режиме, с 50% заполнением и с 75% заполнением, вот там могут начинаться совсем другие истории по скорости работы.

Для точки отсчета можно принять следующие данные:
Для 4 потоков чтения с хоста можно иметь стабильные 50 тысяч IOPS на чтение на поток, всего 200 тысяч. /
Все данные ниже, относительно IOPS, указаны в тысячах IOPS.
Host = -t3 -w0 = 52, 52, 82, = 186
Host = -t3 -w100 = 28,28,44 = 100 (NTFS 4k)
Host = -t3 -w100 = 22,22,34 = 78 (NTFS 8k)
VM = -t3 -w0 = 76;75;76 = 227 (все цифры в тысячах IOPS).
Балансировщик IO \ CPU в Windows 11 для NVME работает не очень предсказуемо, но достаточно балансируемо. Можно покрутить minroot, но это избыточно для данного текста.
diskspd дает повторяемые результаты, что уже и неплохо.

Linux VM , 10 vCPU, 24 Gb RAM
ОС (заодно и обновил) - Debian12
Было: 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22)
Стало:  6.1.0-38-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.147-1 (2025-08-02)
Разомнемся:
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75
read: IOPS=95.3k, BW=372MiB/s (390MB/s)(6141MiB/16494msec)

Сделаю файл настроек, чтобы было чуть нагляднее.
nano fiotest_001.test с содержанием, цитата:

[global]
name=fiotest123
ioengine=libaio
direct=1
iodepth=16
bs=4k
group_reporting
runtime=300
startdelay=10
rw=randread
size=32Gb
numjobs=3
filename=delme_after.test
[test1234]

Как оказалось, group_reporting работает крайне, крайне странно.

Ещё спроси а где тут вожжи, ещё поехали скажи
echo '11=====' ; date ; echo '22====='; fio fiotest_001.test ; echo '33==========='

Пометки? Или параметр group_reporting вовсе не лишний ?? Потому что английским по белому сказано, цитата:

After the test is completed (or cancelled with Ctrl+C), the Fio will generate a detailed report showing more details. If --group_reporting attribute was used, it will show the summary for all the threads together, but if it wasn't used, the details will be shown for each thread separately and it may be confusing.

Что мешало сделать авторам вывод [total] без использования [group_reporting], не понятно. Переписывать тест я, конечно, не буду.

Но, к цифрам:
read: IOPS=126k, что меньше, чем с хоста, но больше, чем с непонятно как отработавшего теста внутри VM Windows server 2025.
Детальнее:
iops  : min=26524, max=68224, avg=43534.54, stdev=8559
iops  : min=22610, max=68030, avg=43995.81, stdev=8268
iops  : min=26540, max=63692, avg=44087.64, stdev=7910

Данные куда понятнее, чем diskspd, видно и среднее, и максимум, и разброс. Хороший такой разброс, надо сказать.

Поправлю файл конфига, допишу:
[test1234]
numjobs=5

И получу
iops  : min=18646, max=78609, avg=33717.05, stdev=6821
iops  : min=13126, max=58088, avg=34077.43, stdev=6590
iops  : min=14158, max=54144, avg=34087.76, stdev=6473
iops  : min=15500, max=56756, avg=33983.17, stdev=6233
iops  : min=14676, max=52144, avg=34009.63, stdev=6541

Допишу
[test1234]
numjobs=5
group_reporting

(Минута нытья) как же все непривычно в выводе, детализация богатая, но не читаемая. Зато время до конца теста показывается. И сумма IOPS не совпадает и никак не бьется с настройкой group_reporting и без нее.
с ней
read: IOPS=124k, BW=483MiB/s (507MB/s)(142GiB/300002msec)
iops  : min=59479, max=242247, avg=123919.97, stdev=5378

Но 5 потоков по 30-35 в сумме дают 170 k IOPS, а не 124. Такое впечатление, что настройка
[global]
numjobs=3
[test1234]
numjobs=5
Проводит пять тестов (в отчете - Starting 5 processes), но считает статистику за три первых потока (Jobs: 3 (f=3) )

Не тесты, а какая-то неведомая лажа.
Я буду жаловаться в спортлото!  


Для Proxmox 9 (Debian 13) внутри Hyper-V, CPU nested.
Настройки те же, 10vCPU \ 24 RAM
numjobs=3
iops  : min=26250, max=86042, avg=44499.43, stdev=18314
iops  : min=34930, max=62044, avg=54114.53, stdev=7103
iops  : min=28046, max=71702, avg=50969.20, stdev=11388
numjobs=5
iops  : min=11804, max=33632, avg=28052.91, stdev=3660
iops  : min=11694, max=33590, avg=27945.52, stdev=3794
iops  : min=17816, max=43656, avg=27950.35, stdev=3753
iops  : min=10628, max=43976, avg=27898.52, stdev=3993
iops  : min=16428, max=34810, avg=27951.97, stdev=3732
numjobs=5 плюс group_reporting
read: IOPS=81.9k, BW=320MiB/s (при конфликте [global] и [test1234])
read: IOPS=98.7k, BW=386MiB/s (при одинаковой настройке [global] и [test1234])
Один и тот же тест.

Расчет group_reporting для двух потоков
group_reporting считает что-то свое, в зависимости от настроек numjobs в [global] – 2/1 или 2/2, и того где указан group_reporting – в [global] или в [test]
iops  : min= 5434, max=41258, avg=30155.54, stdev=6075
iops  : min= 5442, max=40952, avg=30271.04, stdev=6121
iops  : min=90444, max=184954, avg=131080.09, stdev=10288 (group_reporting )
iops  : min= 8630, max=85296, avg=59160.71, stdev=7513 (group_reporting  - global)
или
iops  : min=24398, max=44548, avg=33152.11, stdev=3566
iops  : min=25010, max=43772, avg=33056.37, stdev=3417
iops  : min=49320, max=163531, avg=78313.81, stdev=11188 (group_reporting )

Заключение

Надо везде мерять fio, если будет сравнение Windows \Linux , и сразу готовить какой-то авто парсер результатов.
Тестирование короче хотя бы 15-30 минут на тест , и с размерами тестового файла меньше оперативной памяти позволяет только проверить работу скрипта. Может, покажет какие-то цифры скорости работы кеширования.
Параметр group_reporting для fio рассчитывается как-то странно.

Планировщик задач в Windows server, Debian 12 и Debian 13 работает по разному.
Debian 12 VM и Debian 13 (proxmox) CPU nested дают разброс вида
Deb12 iops  : min=26524, max=68224, avg=43534.54, stdev=8559
Deb13 iops  : min=26250, max=86042, avg=44499.43, stdev=18314

Даже средние показатели могут сильно расходиться.
Один плюс – сами тесты делались в основном ночью, потратил только час на сведение всего этого в одну большую, не читаемую, кучу.

Литература
Ru Рекомендации по тестам производительности для Azure NetApp Files
Ru Общие сведения о методологии тестирования производительности в Azure NetApp Files
Performance benchmarking with Fio on Nutanix
fio - Flexible I/O tester rev. 3.38
ZFS: fio random read performance not scaling with iodepth
Тестирование производительности дисков с помощью fio
Hyper-V storage: Caching layers and implications for data consistency
diskspd  Command line and parameters

Показать полностью
47

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть первая из многих.

Для лиги лени: общеизвестное.

В связи с событиями 2023 года, точнее закрытием сделки по покупке VMware в ноябре 2023 года и переходу на новую (дорогую и избыточную) модель лицензирования, мой текущий работодатель посчитал доходы-расходы, и решил – едем на что-то еще.
Выбор был не так широк.
Во первых, очень хотелось сохранить модель «маленького гиперскейлера» - то есть, держать диски на серверах.

Для тех, кто не очень понимает, в чем проблема.

Если у вас один сервер, то вы можете застраховаться от отказа одного, ну двух дисков, отказа одного блока питания, отказа одного порта или одного SFP модуля сетевой карты (если их всего два), одного порта FC (если их всего два), или и единичной ошибки памяти, которую исправит ECC. И то, нет гарантий что исправит, потому что некоторые базы очень грустят даже при корректируемой одиночной ошибке.
Любой сбой по процессору, RAID контроллеру (если он отдельной картой), материнской платы, единичной сетевой платы или отказ всей стойки по питанию, и все, получаем отказ в обслуживании.

Решений несколько.
Решение первое. Держать данные на отдельной системе хранения данных (СХД), причем на нормально резервированной – два контроллера, по 2-4 порта на каждом контроллере, а еще лучше две СХД, собранные в территориально разнесенный кластер.
Но это достаточно дорого в разовой покупке, и требует кое-каких прочих движений, начиная от поиска на рынке вменяемых сетевых инженеров. Для РФ это нерешаемая задача, у нас (вне РФ) еще так-сяк, хотя тоже с вопросами, дешевые индусики это клиника.
По физическому месту и емкости проблем нет – даже младшие системы хранения данных позволяют поставить 24 – 36 SSD NVME диска на систему с 2 (двумя) контроллерами, и дальше вопросы останутся только к вашей сети. 100G карты и порты на коммутаторе 100G стали дешевые, можно смело ставить.
HPE Mellanox StoreFabric SN2100M 100GbE 8QSFP28 Switch стоит меньше 2000$.
36 дисков по 30 терабайт – это петабайт, причем петабайт без учета встроенной, и нормально работающей дедупликации и компрессии.

Решение второе. Хранить данные на локальных дисках тех же серверов, где выполняется виртуализация.
Это Storage space direct, vSAN,  и, с оговорками, Nutanix и Linstor.
К первым двум нет вопросов по настройке, производительности, спискам совместимого оборудования, программе обучения и кадрам.
К Nutanix есть вопросы по наличию кадров на открытом рынке. Не знаю как в РФ, а в мире эта система вспыхнула, работает, но специалисты не так часты.
К Linstor есть вопросы по совместной работе на нагруженной системе, но про это позже.

Решение третье, это обеспечение отказоустойчивости средствами самого приложения. Для баз данных это отлично делает Oracle RAC, Microsoft SQL, Tibero. Так себе, но сойдет – PostgreSQL,MySQL и все решения вокруг них и их форков. Veritas Infoscale Availabilty и Red Hat Cluster Suite не смотрел.

Решение четвертое – это програмно определяемые системы хранения, как Ceph и подобные.
Проблем с ними полно, но основных две:
Невозможность держать одновременно нагрузку виртуализации и нагрузку хранения на сколько-то нагруженной системе.
Плохая производительность – на том же железе Microsoft и Broadcom «из коробки» дадут в 2-3 раза больше скорости (IOPS), и быстрее запустятся, и без проблем с настройками.
Да, есть лимиты - Storage Spaces Direct сейчас это максимум 4 петабайта на кластер, и 400 терабайт на хост, vSAN Max – 360 терабайт на хост и 8 петабайт на кластер.

5-10 лет назад, если у вас была задача постройки «медленного, но объемного хранилища петабайт на 10-20», то дешевого выбора можно сказать и не было. Сейчас скорости и объемы выросли, цены на SSD упали, поэтому вернулся вопрос что выгоднее – купить систему хранения данных и один раз заплатить за покупку, гарантию, пуско-наладку и сопровождение, или держать штат дорогих и редких специалистов. При оценке совокупной стоимости владения за три года все не так очевидно.
Неочевидная в русскоязычном (да и не только, кроилово не имеет национальности) проблема в том, что последние лет .. 25, идет пропаганда «Linux и любые решения вокруг него дешевле и лучше». Ну ..
BundesTux – Германия, 2001 – 2002. Порекламировали и все.
LiMux – переезд администрации Мюнхена на Linux в 2004 году. Переезд обошелся в 43 миллиона евро, в 2017 переехали обратно на Windows.
Open-Source-Software in öffentlichen Einrichtungen – постоянно идущее движение «давайте переедем».
GendBuntu тоже как-то живет.
В России движение «давайте Linux» началось, в том числе, с подачи представительство IBM в России и его Центра компетенции Linux в 2004 году. Цитата:

Своего апогея идея использования в школах свободного ПО достигла осенью 2007 г., когда Федеральным агентством по образованию был проведен открытый конкурс по выбору подрядчика на разработку и пилотное внедрение пакета свободного программного обеспечения для школ (Школьного Линукса), победителем которого стала группа компаний Армада.

Теория теорией, а практика практикой. Рыночек порешал, и СПО живет там, где живет.
Ничего удивительного –
1) На западе сменилось поколение времен молодого Столлмана,
2) Бесплатная разработка чего-то сложного оказалась не нужна работникам,
3) если «вроде как бесплатный продукт + кадры + железо плюс поддержка» обходятся дороже, чем «платный продукт + кадры + железо + поддержка», то зачем он нужен, такой «бесплатный»?

Отсюда возникает проблема «не говорить про слона в комнате».
С такими вводными коллектив и я и начали проработку идеи «в Бристоль опенсорс, друзья»

Документация.

С базовыми вещами проблем нет, документация в открытом доступе на http://pve.proxmox.com/wiki/

Recommended Hardware: в наличии в очень усеченном виде. Но, есть большой плюс, прямо там и написано:
For Ceph or ZFS additional memory is required, approximately 1 GB memory for every TB used storage.

Проблемы начинаются чуть дальше.
В ESXi ты можешь без проблем включить пересылку логов на внешний syslog в две кнопки. 
В Hyper-v ты можешь сделать хоть пересылку логов, хоть указать размещение логов на другом диске.

В Proxmox ? Цитата:
For pveproxy, taking a look at the source, the log file is hard-coded in line 106 to be written to /var/log/pveproxy/access.log
тред
тред на реддите.

Деление диска.
Аналогично, в ESXi у тебя есть резерв в 138 гигов, и дальше делай с диском что хочешь.
В Proxmox? Не описано, и с разделами на выходе какая-то фигня. Посмотреть я, конечно, могу, но хотелось бы очевидные вещи видеть в документации, да и в мастере установки не помешает.

Сети.

Тот же уровень проблем. Нет, сами сети описаны, но управление ими или недостаточно или избыточно. Например, раздел Linux Bond описывает сценарии:
Round-robin
Active-backup
XOR
Broadcast
IEEE 802.3ad Dynamic link aggregation
Adaptive transmit load balancing
Adaptive load balancing

Режим Round-robin. Ок, случайная балансировка , LB и FT в наличии. Никаких указаний на настройку коммутатора, что хорошо.
Active-backup. Сомнительно, но окей.
XOR. Тоже ок.
LACP. Чем плох – тем, что требует настройки со стороны коммутатора и сложен в отладке при плавающих проблемах.
Adaptive transmit load balancing  и Adaptive load balancing. Все перечисленные там действия вызывают вопрос «зачем».
Рекомендованным является LACP, что довольно странно для 2025 года, когда в Hyper-V и ESXi давно используется простой и понятный Switch Embedded Teaming (SET) или active-active конфигурация.  То есть Linux Bridge как виртуальное устройство поддерживает режимы балансировки, но почему-то тут вот так.
Почему-то не описан аналог режима active-passive для ESXi, когда первая сетевая карта активна в первом коммутаторе, вторая во втором, но в Proxmox аналог сущности Vmkernel еще надо поискать, чтобы такая настройка заработала

Есть SDN - Software-Defined Network, но он какой-то избыточный, чтоли.

Литература.

Storage Spaces Direct hardware requirements in Windows Server
vSAN Max
Исследование российского рынка СПО
Changing the default size of the ESX-OSData volume in ESXi 7.0
Расширение корневого раздела (LVM) в Proxmox
Network Configuration
Software-Defined Network 1.
Software-Defined Network 2
Linux Bridge
Performance Best Practices for VMware vSphere 8.0
Перенос (миграция) виртуальных машин с VMware ESXi на Proxmox
Run Hyper-V in a Virtual Machine with Nested Virtualization

В следующих частях:

Смежные сервисы
Диски локальные и не локальные.

PS.
Рассматривался  переход на какой-то вариант Openstack и Open Nebula. Оба признаны избыточно сложными  на данном этапе. Не в смысле «сложно развернуть», с этим проблем нет. В эксплуатации опыта не так много.

Показать полностью
10

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть вторая из многих

Для лиги лени: общеизвестная фигня

Часть 1: тут

Про теорию вы уже читали, теперь к практике.

Если вы учитесь в средней школе, то для Proxmox вам достаточно одного, отдельного, загрузочного диска в домашнем ПК. Можно даже без этого, сделать двойной загрузчик и все.

Если вы работаете, то вам понадобятся:

WinSCP или SCP. Чтобы заливать всякое пофайлово. Можно и без него, но с ним проще.
Git. Чтобы хранить в нем код.
Nexus. Только для того, чтобы держать там repo proxy. Но не совсем.
Ansible. Чтобы исполнять код.
Причем, все это нужно настроить на как минимум вход по сертификату, а желательно привязать и к AD, и к любой системе сбора и анализа логов. И не забывать обновляться – в Linux, даже в самом по себе, и в окружающем софте теперь находят уязвимости чаще, чем в Microsoft.

C Git все было просто - bitnami/git , но уже вовсе и не так просто – но вы же читали Upcoming changes to the Bitnami catalog (effective August 28th, 2025).

С Ansible уже не все так просто. Можно начинать и без него, но хотя бы shell script вам понадобится. Почему? Потому что в Proxmox до сих пор нет встроенного резервного копирования собственной конфигурации. В ESXi есть. В vCenter есть и резервное копирование конфигурации, и отдельно профили хостов.
В Hyper-V как бы есть (но). Тут нет.  Скрипты для резервного копирования конфигурации Proxmox есть, но зачем их использовать, если можно развернуть с ноля.

Из знания теории вам точно понадобятся:
понимание  что такое и как работает VLAN.
Как работает TCP, iSCSI,DNS и FCP.
Что такое SCSI MPIO, что такое round-robin в MPIO.
Сети и дисковая подсистема, это очень больные места у новичков.
Конечно, нужны базовые знания по Linux – начиная от того, что такое ext4 и чем это отличается от LVM, ZFS и BTRFS . И что из этого вам нужно, а что нет.
Бонусом желательно понимать, что такое MS AD и Kerberos. Потому что авторизация на основе SSH сертификатов, открытого и закрытого ключа, это хорошо, и это база из баз, но Kerberos лучше. Когда освоите MS AD / Kerberos, сможете перейти на keycloak.

Окей, поехали.

Для начала, если вы, как я, генерировали SSH пару через Puttygen, то не забудьте что под Windows ключ нужно копировать вручную, или выдергивать со сменой формата из public, и отдельно отредактировать /etc/ssh/sshd_config.
Ну, если вдруг забыли. Я забыл.

Потом, если вам скучно, как мне, то сделайте
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75

Заодно посмотриту, как hyper-v работает с дисками изнутри Linux. У меня вышло 270:90, результат ни о чем, при параметре size=8G, меньше размера оперативной памяти.

Git в Docker. Тут все просто, открываем Install using the apt repository и делаем хорошо.
Открываем Install GitLab in a Docker container и делаем. До просветления. В том числе до Configure the external URL for GitLab. И так вплоть до
docker exec -it gitlab /bin/bash
cat /etc/gitlab/initial_root_password

За чаем можно и нужно почитать про Sonatype Nexus Repository. Скучное, но полезное чтение.
Еще более скучное, чем Sonatype Nexus Repository System Requirements.
Или можно не читать,
mkdir -p /srv/nexus-data
chown -R 200 /srv/nexus-data

Про chown вообще не очевидно было, в документации и почти во всех примерах не нашел пункта про chown, а без него грусть, тоска, и невозможность создать файл, что видно хоть через
docker compose logs
хоть через
docker logs (ContainerName), если вы делаете через docker up

Причем docker exec -it nexus3 /bin/bash
не помогает понять, что там не так.

Потом переходим к чтению документации по Ansible, Installing Ansible on specific operating systems.
Или без чтения,
apt-get install ansible
и что в репозиторий насовали, то насовали.

Литература
Introduction to Ansible Builder
Running Ansible Server in Docker Container
Chapter 9. Configuring RAID logical volumes  by using logical volume manager (LVM)
DockerCheatSheet
docker-nginx-nexus-repository
Docker Compose Quickstart
Установка Sonatype Nexus OSS v3 в контейнере Docker
Установка и настройка Nexus Sonatype используя подход infrastructure as code
Install Sonatype Nexus using Docker Compose | Setup Nexus Repository Manager for Node.js Project
Mounting volume from host to docker image of nexus
Deploy Sonatype Nexus Repository OSS v3 with Docker & Traefik v2
Установка приватного Docker репозитория

PS. У меня вышло так: (с хардкодом, не по примеру из руководства)
gitl/docker-compose.yml

services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
restart: always
hostname: 'gitlab.example.com'

environment:
GITLAB_OMNIBUS_CONFIG: 
# Add any other gitlab.rb configuration here, each on its own line
external_url 'https://gitlab.example.com'

ports:
- '80:80'
- '443:443'
- '22:22'

volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'

shm_size: '256m'

nexus/docker-compose.yml

services:
nexus-repository:
image: sonatype/nexus3
container_name: nexus3
restart: always
hostname: 'nexus3.local.tw'

ports:
- '8081:8081'

volumes:
- '/srv/nexus-data:/nexus-data'

Показать полностью
11

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть третья из многих

Для лиги лени: общеизвестная фигня

Часть 1. Общая

Часть 2. Gitlab и Nexus

Часть 3. Ansible и Ansible AWS

В предыдущей серии я сделал
apt-get install ansible
и сказал «будь что будет». Конечно, можно было бы положить Ansible в docker image, но мне лень.

Самое сложное на этом этапе, даже если вы имеете дело не с корпоративной системой, а с домашней, это «не плюнуть, а взять и сделать».

Потому что документация «как заставить Ansible ходить в Git \ gitlab\ github» - максимально убогая, и ориентирована на то, что у вас есть Gitlab CI.
Вот это инструкция вроде ничего (Установка Ansible AWX), для тех кто не любит CLI.

Но сначала надо прочитать и сделать:Установка Ansible

Я сделал через
apt-get install ansible
и потом
mkdir -p /srv/ansible
nano /srv/ansible/hosts.ini

Туда прописал две строки из примера выше, и на этом пока остановлюсь.
ansible --version
уже работает, и ладно.

Если дальше вы пойдете по инструкции Установка Ansible AWX и сделаете
make docker-compose-build
(считая, что apt install make вы сделали)
то вы получите
failed to build: failed to convert agent config {default [] false}: invalid empty ssh agent socket: make sure SSH_AUTH_SOCK is set
Что очень, очень странно, потому что
env | grep SSH
говорит что с SSH все нормально -
SSH_AUTH_SOCK=/tmp/(ичотам)

Проблема странная (Environment variable SSH_AUTH_SOCK isn't set), потому что все ж настроено.

Как ни странно, надо сделать
apt install openssl
как и написано английскими буквами в /tools/docker-compose/README.MD

И сборка запустится. Sshpass я не ставил

После сборки у вас будет:

[+] Running 3/3

Container tools_postgres_1  Started
Container tools_redis_1  Started
Container tools_awx_1  Started 

docker images ls

REPOSITORY 
ghcr.io/ansible/awx_devel 
quay.io/sclorg/postgresql-15-c9s 
mirror.gcr.io/library/redis 

Дальше по инструкции я сделал
docker exec tools_awx_1 make clean-ui ui-devel
и получил на воротник:
Error response from daemon: container … is not running

Потому что надо смотреть на
docker ps –a

И увидеть, что
ansible/awx_devel / tools_awx_1

Не стартовал.

Где-то тут мне стало лень разбираться, и я отложил историю «доделать» на потом.
Буду без WEB GUI жить, как в колхозе

Литература

Installing Ansible on specific operating systems
Configuring Ansible
ansible-pull
Основы Ansible для сетевых инженеров
Build enterprise-grade IaC pipelines with GitLab DevSecOps
перевод на каком то рекламном говне: Создаем инфраструктуру как код с GitLab и Ansible
Set up a continuous integration pipeline with Ansible Automation Platform & GitLab
Automate Ansible With GitLab
Managing ansible with gitlab
IaC with GitLab CI/CD: Git centric operational model
youtube Infrastructure as Code/Gitlab CICD Demo плюс Ansible Tower
Red Hat Ansible Tower
Зачем нужен Ansible Tower?

Ansible AWX, Semaphore и Rundeck.
От установки AWX до запуска первого плейбука — настройка централизованного управления Ansible
ansible/ awx
Установка Ansible
Установка Ansible AWX
AWX Basic Install
Настройка VLAN для интерфейса управления в Proxmox

Показать полностью
16

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть четвертая из многих

Для лиги лени: общеизвестное и душное.

Часть 1. Общая
Часть 2. Gitlab и Nexus
Часть 3. Ansible и Ansible AWS

Часть 4. Наконец переходим к Proxmox

Поздравляю всех с выходом Proxmox 9.0. Даже статья вышла – ждите сервис пака Upgrade from 8 to 9, читайте Known Issues & Breaking Changes и Known Upgrade Issues.

Первый взгляд: чем отличается Proxmox от Broadcom ESXi и Microsoft Hyper-V?

Первый взгляд: требуемое место для установки.
Broadcom ESXi до недавнего времени отлично (с оговорками) работал с 32 Гб хоть USB флешки, хоть SD карточки, в псевдорейде, и без. При этом, хотя с версии 6.5 флешка умирала за 3-6 месяцев, спасибо криворуким разработчикам, но сам гипервизор, и виртуальные машины на нем, продолжали работать до планового выключения или миграции (обычно). Иногда с проблемами.
RAID для установки? Не нужен. Если умерла флешка, то берется новая, на нее за 10 минут ставиться ESXi той же версии. За еще 5 минут применяется или бекап конфигурации (родной, теплый, встроенный бекап, не забывайте делать), или profile с vCenter, или, если вы озаботились, то прогоняете хоть powershell (powercli) скрипт, хоть что угодно, и система снова в строю.
Можно и PXE boot делать, можно и FC \ iSCSI boot. Со всеми минусами сочетания FC и кривых рук. Известная история, как отформатировать раздел с виртуальными машинами, привлекая внимание санитаров.

С Microsoft Hyper-V другая история. Хотя там и был отдельный дистрибутив с Hyper-V only, но я не видел, чтобы его в таком виде как-то массово использовали. Так что готовьте 60-100 гигабайт на загрузку плюс данные плюс логи.
RAID для установки? Нуууу .. it depends on. Проблема выбора не очевидна, но.
Аппаратный рейд отнимает PCIe слот, снижает производительность NVME SSD дисков (ссылка 1, ссылка 2), и очень хочется заменить его на PCIe SAS или SATA переходник или как-то еще уйти от этого.
Внутри Microsoft Windows давно существует два подхода к RAID – это софтовый рейд от MS, и storage space \ storage space direct (этот требует лицензии DC).
Софтовый рейд работает, но для настройки зеркалирования «и загрузчика и раздела восстановления» нужно идти в diskpart и делать там всякое, причем diskpart еще и не автоматизируется (штатно, конечно можно написать свой обработчик). Сделать можно, и это работает, но в эксплуатации решение «вроде все ок, но как-то так себе». Разовая, но все равно ручная работа.
PXE и прочие варианты загрузки, конечно, тоже есть. Бекап – есть. Нужно ли при этом иметь RAID ? Не знаю. 20 лет назад, во времена 2003 \ 2008 Windows и дисков по 74 Гб, было проще сделать RAID. Сейчас мне проще настроить встроенный бекап, сделать один раз, и экспортировать задание со скриптом. Хотя это все равно колхозное решение.

Установленный для тестов и этой статьи в виртуальную машину Proxmox 8.4 занял 5 Гб, до установки обновлений, агентов, прочей обвязки.

RAID для установки? Нуууу .. it depends on. Проблема в чем. Встроенного бекапа конфигурации нет. Есть какие-то скрипты непонятной годности, их еще и читать надо. Конечно, есть LVM, но его настройка описана «как-то так». Можно заранее сделать mdadm boot on RAID1, но это все равно ручная работа и по перезагрузке, и по восстановлению. И BIOS надо настроить.

Эти все моменты «как бы есть, но как бы и не понятно», стали одним из поводов к написанию заметок, и поводом посидеть, подумать еще раз, погонять сценарии отказа в виртуальной среде. На физике было решено максимально просто: диски новые, сейчас делаем первую итерацию, для наших задач это не так важно, потом переделаем.
FEEL THE POWER OF AGILE! (нет)

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть четвертая из многих Windows, IT, Linux, Опыт, Гайд, Импортозамещение, Microsoft, Длиннопост

(Переделывать, конечно, никто не собирался).

Первый взгляд: Остаток используемого места.

Если у вас не отдельные диски «только под загрузку», и не планируется vSAN или Storage space direct, и нет системы хранения данных, то возникает вопрос «что делать с остальным местом на дисках».
Broadcom ESXi решает эту задачу в лоб – отделяет себе 138 Гб, а дальше делайте что хотите, только под vSAN такое не используйте.

Microsoft Hyper-V решает эту задачу не менее прямолинейно – делайте что хотите, но место под ОС будьте добры предоставить.

С PVE Proxmox Virtual Environment все .. не так очевидно.
Для тестов был сделан диск на 75 Гб, тонкий (динамический)

Если при установке сделать LVM, и потом посмотреть, что там вышло, то получим:
lsblk

NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda  8:0  0  70G  0 disk
├─sda2  8:2  0  512M  0 part /boot/efi
└─sda3  8:3  0 69.5G  0 part
├─pve-swap  252:0  0  8G  0 lvm  [SWAP]
├─pve-root  252:1  0 27.4G  0 lvm  /
├─pve-data_tmeta 252:2  0  1G  0 lvm
│ └─pve-data  252:4  0 23.5G  0 lvm
└─pve-data_tdata 252:3  0 23.5G  0 lvm
└─pve-data  252:4  0 23.5G  0 lvm

lvdisplay покажет:
--- Logical volume ---
LV Name  data
VG Name  pve
LV Size  <23.50 GiB

--- Logical volume ---
LV Path  /dev/pve/swap
LV Name  swap
VG Name  pve
LV Size  8.00 GiB

--- Logical volume ---
LV Path  /dev/pve/root
LV Name  root
VG Name  pve
LV Size  27.37 GiB

Понятно, что не понятно.

Если смотреть из GUI, то на LVM свободно 9 Гб, а на томе Data свободно все 23.
Как пишут, есть нюанс:
временные файлы при копировании создаются в корневом разделе в /var/tmp/
Но, у меня /dev/mapper/pve-root  создался размером 27G, занято всего 3.0G, так что переживу.

Давайте посмотрим, что с этим можно сделать, положу туда стопку ISO !
В GUI это все видно как:
/dev/mapper/pve-root  виден как Storage 'local' on node 'proxmox1'

И второй виден как Storage 'local-lvm' on node 'proxmox1'
при этом монтируется это все ничуть не очевидно, например
ISO images в GUI это /var/lib/vz/template/iso
CT templates в GUI это  /var/lib/vz/template/cache

CT templates позволяет закачивать только .tar.xz файлы, точнее закачивать то можно хоть ISO, но закачивать надо с именем .tar.xz , ну что за хрень.
Удалить файлы пачкой из GUI нельзя, создать папок под свои представления о прекрасном нельзя, что такое то. ГДЕ СВОБОДА?
В целом GUI не очень понятный, надо сидеть пытаться понять логику авторов.

Если я иду в node/disks, то вижу диски. Ок, понятно.
Если я иду в node/disk/lvm, то вижу, что создана LVM группа PVE, из трех томов, и свободно 9 Гб. Ну, окей.
Если я иду в node/disk/ lvm-thin, то вижу пустой pool, и .. и что мне с этим знанием делать?

Интересное наблюдение. Удаление файлов, хоть из GUI, хоть из CLI, не освобождает место на диске с точки зрения гипервизора. То есть изнутри VM место есть, но дальше, при попытке его сжать, он как был раздут до 29333222111, так и останется, вне зависимости от ключей для Optimize-VHD
Решение гуглится за минуту,
apt install zerofree
но «из коробки» ничего этого нет. Горько мне, горько.

Переход на Proxmox (Proxmox GmbH, Vienna, Austria) с Hyper-V by Microsoft и VMware by Broadcom. Часть четвертая из многих Windows, IT, Linux, Опыт, Гайд, Импортозамещение, Microsoft, Длиннопост

Первичные исправления и обновления.

Для того, чтобы это австрийское изделие заработало в продуктиве, нужно:
Настроить на Nexus – proxy repo
Поменять VLAN и дефолтный IP. У меня оно взяло IP из первичных настроек DHCP, которого я не ожидал.
Настроить DNS
Настроить нужные pero на proxmox
Настроить NTP
И, наконец, обновиться.
Сменить настройку в CLI по умолчанию, куда прописался старый IP.
Сделать нормальную авторизацию, то есть дома – по сертификату с паролем, а в продуктиве, конечно, AD/Kerberos
Убрать надпись при входе

Вроде ничего не забыл, про пересылку логов событий, установки антивирусов и прочих Тайнос Агентос пусть безопасность думает, про Zabbix пусть мониторинг телеграфирует или графанирует.
Сначала сделаю руками. Конечно, надо сразу делать через Ansible.

Настроить на Nexus – proxy repo
Это самое простое.
Settings – Repo – create proxy - Distribution to fetch e.g. bionic : bookworm для 8.4, trixie для 9.
Save – done
Зачем? Чтобы ваши гипервизоры не ходили в интернеты. Но, если вам ОК, то пусть ходят.

Не забудьте выписать URL.
Очень смешно получается, если прописать не bookworm, а bionic, и прописать этот репозиторий в PVE. Обязательно попробуйте.

Поменять VLAN и дефолтный IP.
У меня оно взяло IP из первичных настроек DHCP, которых я не ожидал
Здесь, если делать руками, все максимально просто.
Открываем документацию, раздел Network Configuration, раздел Default Configuration using a Bridge, и делаем.
Для продуктива, конечно, открываем пример
Use VLAN 5 with bond0 for the Proxmox VE management IP with traditional Linux bridge ,
думаем, читаем, делаем.
nano /etc/network/interfaces
и даже делаем
If you made manual changes directly to the /etc/network/interfaces file, you can apply them by running
ifreload -a

Но при этом в GUI, во вкладке localnetwork, все равно откуда-то подтягивается старый адрес для vmbr0, причем в поле COMMENT, если зайти в сети хоста.
Я поленился его искать в описаниях, и исправил из GUI, и это был alias, куда я вообще смотрел.

Настроить DNS
Тут тоже ничего нового, nano /etc/resolv.conf

Настроить нужные pero на proxmox
nano /etc/apt/sources.list
nano /etc/apt/sources.list.d/ceph.list
nano /etc/apt/sources.list.d/pve-enterprise.list
Надеюсь, вы поняли, что надо туда прописать, после настройки Nexus

Настроить NTP
Нет ничего проще, открыли документацию, Time Synchronization, настроили.
nano /etc/chrony/chrony.conf , и посмотрели: chronyc tracking
В изолированной среде, разумеется, за временем придется идти или к NTP proxy, или к контроллерам домена.

И, наконец, обновиться.
Было: pveversion
pve-manager/8.4.0/ (running kernel: 6.8.12-9-pve)
стало
pve-manager/8.4.9/ (running kernel: 6.8.12-9-pve)

Вот что неприятно, так это то, что в
http://download.proxmox.com/debian/pve/dists/bookworm/InRelease
дату обновлений видно, а что там обновлено и исправлено – найти так сразу нельзя.
В changelog смотреть – развлечение тоже то еще.

Сменить настройку в CLI по умолчанию, куда прописался старый IP.
Это, понятно, /etc/hosts

Сделать нормальную авторизацию, то есть дома – по сертификату с паролем, а в продуктиве, конечно, AD/Kerberos
Тут тоже капитанство,
nano ~/.ssh/authorized_keys и готово
Во всех остальных случаях надо читать документацию, Syncing LDAP-Based Realms

Убрать надпись при входе
Тут тоже никакой магии. Прочитать это или это, и сделать. Или, все то же самое, но через pve-nag-buster, или, если вы совсем ленивы, то читаете тред на реддит, и делаете. Вплоть до рецепта remove_nag.yml
615-я строка, кому интересно, res.data.status.toLowerCase() \!== 'active'

Литература
Changing the default size of the ESX-OSData volume in ESXi 7.0
Change ESXi 7 System Storage Installation Size
boot on RAID1
Расширение корневого раздела (LVM) в Proxmox
Proxmox - Распределение дискового пространства
Переключение на бесплатные репозиторий в Proxmox VE

В следующей серии:
Actions step-by-step, Proxmox VE API

надеюсь, теги Proxmox и Ansible наконец добавятся

Показать полностью 2
Отличная работа, все прочитано!