Пожалуй, каждый администратор систем Nutanix знает про командный интерфейс aCli (Acropolis Command Line Interface), который позволяет выполнять ряд задач по управлению кластером, а также предоставляет довольно неплохие возможности по автоматизации и ускорению некоторых рутинных процессов.
Несмотря на то, что основным инструментом администрирования является интерфейс Prism Element и Prism Central, в данной заметке хочется обратить внимание на некоторые интересные команды aCli, которые позволяют выполнять операции, зачастую недоступны через Web (но это не точно).
Получить доступ к aCli просто. Достаточно подключиться к любой CVM из кластера и ввести команду acli. Зеленое приглашение <acropolis> сообщит о том, что мы на месте. Интерфейс поддерживает автодополнение с помощью клавиши Tab и крайне облегчает процесс ввода команд.
Начнем с самого важного – справка
Справка в aCli вызывается достаточно просто – командой help
. И, если понимать, как ей пользоваться, можно разобраться во всех доступных командах интерфейса.
Введя команду, мы получим отправную точку в виде Namespaces:
Не трудно догадаться, что каждый из Namespaces отвечает за управление определенным элементом кластера.
Если ввести help namespace_name
, мы получим справку по доступному для данного Namespace списку команд.
Посмотрим доступный список команд для Namespace с названием vm:
Посмотреть, что делает любая из команд? – легко.
help namespace_name.command
Узнаем, какую операцию выполняет команда get из Namespace vm:
Таким образом мы можем посмотреть справку по всем командам из всех Namespaces.
Теперь, разобравшись со справкой, я перейду непосредственно к тому, ради чего все и начиналось – некоторым интересным командам.
1. Получить список всех снапшотов виртуальных машин в кластере;
snapshot.list
:
Одной командой мы получаем список всех снапшотов. С помощью команды snapshot.get span_name
можно получить детальную информацию о снимке, а snapshot.delete
позволяет его удалить.
2. Подать trunk на сетевой интерфейс виртуальной машины;
Данная необходимость (по крайней мере у меня) возникает не так часто, но иногда может и понадобиться.
Настраивается транкинг в рамках сетевого интерфейса виртуальной машины. Имеется возможность либо создать новый интерфейс с поддержкой vlan trunking, либо перевести существующий интерфейс из режима Access в режим Trunking.
Создать новый интерфейс можно командой vm.nic_create vm_name network=ntnx_network_name vlan_mode=kTrunked trunked_networks=vlan_list
( список через запятую)
Основные параметры в данном случае – vlan_mode
, которым мы сообщаем, что интерфейс будет работать в режиме trunk, а не access, а также trunked_networks
– в котором через запятую мы перечисляем номера vlan с которыми будет оперировать сетевой интерфейс виртуальной машины.
Посмотрим, как выглядит настроенный сетевой интерфейс с помощью vm.nic_get
:
Обратите внимание, что выбор сетевого адаптера виртуальной машины происходит по mac адресу.
В случае, если необходимо внести изменения в сетевой интерфейс, можно использовать vm.nic_update
:
3. Выбрать сетевой интерфейс E1000 вместо стандартного virtio;
Один раз мне пришлось столкнуться с подобной проблемой в очень старой версии гостевой операционной системы, которая упорно не хотела определять стандартный сетевой интерфейс virtio.
В интерфейсе Prism Element отсутствует возможность выбора типа сетевого интерфейса, однако, данная возможность присутствует в aCli.
Для решения данной задачи может помочь параметр model
, который необходимо указать в значении e1000
при создании сетевого интерфейса:
При запросе информации по сетевому интерфейсу виртуальной машины, можно увидеть новое поле model
:
В гостевой операционной системе у нас ожидаемо появился новый сетевой интерфейс:
4. Настройка VM-VM anti-affinity;
Достаточно частая задача при развертывании отказоустойчивых систем. Настройка anti-affinity позволяет ограничить одномоментное пребывание указанных в правиле виртуальных машин на одном и том же хосте, что позволит исключить одновременное пропадание виртуальных машин в случае выхода из строя гипервизора.
У меня имеется два DNS сервера, и мне хотелось бы избежать ситуации, при которой обе машины расположатся на одном сервере, и могут быть одномоментно потеряны:
Включение anti–affinity состоит из трех шагов:
Создание группы для VM, которые не должны находиться рядом, с помощью vm_group.create group_name
:
Добавление виртуальных машин в группу. vm_group.add_vms group_name vm_list=vms_name
(через запятую):
Третьим шагом мы включаем anti-affinity для всех виртуальных машин в группе. vm_group.antiaffinity_set group_name
:
После активации правила, ADS (Acropolis Dynamic Scheduler) исправит ситуацию:
Требуемый результат достигнут:
Интересный факт: Если в последующем выполнить ручную миграцию виртуальных машин на один хост уже после настройки правил, ADS также разнесет машины по разным хостам при следующем своем запуске.
Кстати, командой ads.update enable=false
, можно остановить работу планировщика (только непонятно зачем), а командой ads.update enable=true
запустить обратно.
5. Перевод хоста в режим обслуживания (Maintenance Mode);
Если необходимо вывести хост на обслуживание, например, в рамках работ по модернизации, или в процессе решения каких-либо проблем с оборудованием, нам также может помочь aCli.
Для перевода гипервизора в Maintenance Mode используется команда host.enter_maintenance_mode host_ip
:
В рамках данной операции, с гипервизора в автоматическом режиме будут мигрированы все виртуальные машины (кроме CVM, конечно), а также будет выставлен флаг Schedulable = False
, который будет препятствовать запуску других в VM на данном хосту.
В интерфейсе Prism можно будет увидеть статус перехода в режим обслуживания, а также виртуальные машины, которые были мигрированы:
Команда host.list
выведет текущий список хостов в кластере, а также их состояние:
В списке хостов мы можем увидеть столбец Schedulable и хост с меткой False. При попытке мигрировать машину на такой хост, система откажет, что логично:
Выводится хост из режима обслуживания командой host.exit_maintenance_mode host_ip
.
6. Бонус. Полезная команда по монтированию и отмонтированию образа CD у виртуальной машины;
Увидел в чате подобный вопрос и не смог удержаться, чтобы не зафиксировать 🙂
Подключим образ CD:
vm.disk_update vm_name clone_from_image=image_name disk_addr=ide.0
Легким движением руки образ CentOS монтируется в CD-ROM виртуальной машины.
Теперь отключаем:
vm.disk_update vm_name disk_addr=ide.0 empty=true
В качестве заключения:
aCli – крайне удобный интерфейс по управлению некоторыми элементами кластера, обладает хорошей справкой и навигацией, а в сочетании со скриптами позволяет ускорять и автоматизировать некоторые рутинные процессы.
Если нужно решить какую-то задачу, при этом в интерфейсе Prism Element нет ничего похожего, вполне возможно, что решение есть в aCli.