Как автоматизировать создание виртуальных машин? рассказываем подробно

Введение

Примечание к переводу

Python и CPython используются в этом тексте как синонимы, но при любом упоминании Python имеется ввиду CPython (версия python, реализованная на C). К другим реализациям относится PyPy (python, реализованный в ограниченном подмножестве Python), Jython (реализация на Виртуальной машине Java) и т.д.

  1. Инициализация — этот этап включает в себя настройку различных структур данных, необходимых python-процессу. Вероятнее всего это произойдёт, когда программа будет выполняться в non-interactive режиме через оболочку интерпретатора.
  2. Компиляция — включает в себя такие действия, как: парсинг исходного кода для построения синтаксических деревьев, создание абстрактных синтаксических деревьев, создание таблицы символов и генерацию объектов кода.
  3. Интерпретация — этап фактического выполнения сгенерированных объектов кода в некотором окружении.

В данной книге используется версия Python 3

Создание виртуальной машины

Для создания виртуальной машины можно воспользоваться графической утилитой Virtual Machine Manager. Найти её можно в меню Приложения — Системные — Менеджер виртуальных машин.

В меню Файл выберите Создать виртуальную машину. В открывшемся оке выберите метод, с помощью которого будет производиться установка операционной системы. В примере, установка производится из образа iso. Нажмите Вперед.

Для выбора образа нажмите Обзор и в открывшемся окне нажмите Выбрать файл. Найдите образ iso и откройте его, нажав на кнопку Открыть.

Выберите тип операционной системы — Linux. Версию — RHEL7. Нажмите Вперед.

Установите необходимое количество оперативной памяти и процессоров, которые будут доступны данной виртуальной машине. Минимально необходимые значения для РЕД ОС указаны на скриншоте ниже.

Выберите количество постоянной памяти, которое будет доступно виртуальной машине. Минимально рекомендуемым для РЕД ОС является 15 Гб.

Впишите название виртуальной машины в поле Название. Установите галку в пункте Проверить конфигурацию перед установкой. Выберите нужную вам сеть. Нажмите Готово.

Перед началом работы

  • Проверьте поддерживаемые операционные системы для консоли, которые подробно описаны в требованиях к системе.
  • Убедитесь, что удовлетворены все требования к системе. См. сведения о требованиях к системе.
  • Убедитесь, что у вас есть как минимум разрешения локального администратора для компьютера, на котором установлена консоль.
  • Версия консоли VMM должна соответствовать версии System Center на сервере VMM. Например, для подключения к серверу VMM под управлением System Center 2016 консоль VMM также должна иметь версию 2016.
  • На одном компьютере можно установить только одну версию.

Подключение к серверу управления VMM

  1. На рабочем столе удаленного компьютера щелкните значок консоли VMM, если консоль не открыта.
  2. Укажите имя сервера и порт (по умолчанию 8100), который прослушивает сервер VMM. Например: vmmserver01:8100.
  3. Для подключения к VMM можно использовать учетную запись, под которой вы вошли на удаленный компьютер, или указать другую учетную запись. Если вы хотите всегда подключаться к одному и тому же серверу VMM, щелкните элемент Подключаться автоматически с этими параметрами.
  4. Нажмите кнопку Подключиться. Если используемые учетные данные относятся к нескольким ролям пользователя VMM, открывается окно Выбор роли пользователя.

KVM: добавление сетевой карты для виртуальной машины

Попрь­у­ем доба­вить допол­ни­тель­ный сете­вой интер­фейс для ВМ. Сна­ча­ла про­ве­рим, какие сете­вые интер­фей­сы созда­ны на хосте:

У меня на KVM сер­ве­ре созда­на одна вир­ту­аль­ная маши­на, с одним сете­вым интер­фей­сом. К br0 нам нуж­но при­кре­пить еще один вир­ту­аль­ный сете­вой интер­фейс. Выпол­ни­те команды:

Про­верь­те, что у ВМ появил­ся допол­ни­тель­ный сете­вой интерфейс:

YAML

<interface type=’bridge’>
<mac address=’52:54:00:7e:c1:9f’/>
<source bridge=’br0’/>
<model type=’virtio’/>
<address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x03′ function=’0x0’/>
</interface>
<interface type=’bridge’>
<mac address=’52:54:00:2f:23:79’/>
<source bridge=’br0’/>
<model type=’rtl8139’/>
<address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x0a’ function=’0x0’/>
</interface>

1
2
3
4
5
6
7
8
9
10
11
12

<interfacetype=’bridge’>

<macaddress=’52:54:00:7e:c1:9f’/>

<sourcebridge=’br0’/>

<modeltype=’virtio’/>

<addresstype=’pci’domain=’0x0000’bus=’0x00’slot=’0x03’function=’0x0’/>

</interface>

<interfacetype=’bridge’>

<macaddress=’52:54:00:2f:23:79’/>

<sourcebridge=’br0’/>

<modeltype=’rtl8139’/>

<addresstype=’pci’domain=’0x0000’bus=’0x00’slot=’0x0a’function=’0x0’/>

</interface>

Так­же вы може­те изме­нить сете­вые настрой­ки вир­ту­аль­ной маши­ны напря­мую через XML файл: # virsh edit test-centos

После пер­во­го сете­во­го интер­фей­са добавь­те сле­ду­ю­щие строки:

YAML

<interface type=’bridge’>
<source bridge=’br0’/>
</interface>

1
2
3

<interfacetype=’bridge’>

<sourcebridge=’br0’/>

</interface>

Сохра­ни­те файл и запу­сти­те ВМ. Осталь­ную кон­фи­гу­ра­цию, KVM доба­вит сам (mac address и тд).

Установка и настройка виртуального сервера

В консольном варианте установки, настройки и управлением системой, незаменимым инструментом является утилита virsh (надстройка над библиотекой libvirt). У неё большое количество опций и параметров, подробное описание можно получить так:

или вызвать стандартный «help»:

Я всегда придерживаюсь следующих правил при работе с виртуальными серверами:

  1. Храню iso образы ОС в каталоге /var/lib/libvirt/boot
  2. Храню образы виртуальных машин в каталоге /var/lib/libvirt/images
  3. Явно задаю каждой новой виртуальной машине свой статичный IP адрес через DHCP сервер гипервизора.

Приступим к установке первой виртуалки (64-битной серверной убунте 16.04 LTS):

Скачав образ запускаем установку:

Переводя все эти параметры на «человеческий язык», то получается, что мы создаём виртуальную машину с ОС Ubuntu 16.04, 1024 МБ ОЗУ, 1 процессором, стандартной сетевой картой (виртуальная машина будет ходить в интернет как-будто из-за NAT), 20 ГБ HDD.

Стоит обратить внимание на параметр —os-variant, он указывает гипервизору под какую именно ОС следует адаптировать настройки.Список доступных вариантов ОС можно получить, выполнив команду:

Если такой утилиты нет в вашей системе, то устанавливаем:

После запуска установки, в консоли появится вот такая надпись:

Это нормальная ситуация, продолжать установку мы будем через VNC.Смотрим на каком порту он был поднят у нашей виртуалки (в соседнем терминале, например):

Порт 5900, на локальном адресе 127.0.0.1. Чтобы подключиться к VNC, необходимо использовать Port Forwarding через ssh. Перед тем как это сделать, убедитесь, что tcp forwarding разрешён у демона ssh. Для этого идём в настройки sshd:

Если ничего не нашлось или вы видите:

То правим конфиг на

и перезагружаем sshd.

Настройка сети виртуальной машины

  1. Создаем виртуальную машину. В данной статье не будем описывать процесс создания виртуальной машины в интернете много инструкций. Проще всего использовать Virtual Machine Manager. Примечание: при создании виртуальной машины указываем, что сетевой адаптер подключен к созданному нами раннее мосту br0.
  2. Подключаемся к консоли виртуальной машине через Virtual Machine Manager. Настраиваем сеть и устанавливаем виртуальной машине ip адрес 192.168.123.176:
    iface eth0 inet static
            address 192.168.123.176
            netmask 255.255.255.0
            network 192.168.123.0
            broadcast 192.168.123.255
            gateway 192.168.123.1
            dns-nameservers 8.8.8.8
    
    root@ourserver# ifdown eth0
    root@ourserver# ifup eth0
    
    1. Редактируем: /etc/network/interfaces
    2. Перезапускаем сетевой интерфейс для применения изменений
  3. Примечание:
    На этом этапе могут возникнуть ошибки в том случае если подключенный к виртуальной машине образ уже работал раньше на другой виртуальной машине. В случае возникновения ошибок необходимо:
    1. Очистить файл /etc/udev/rules.d/70-persistent-net.rules
    2. Перезагрузиться

Взгляд с высоты в 30 000 футов

Рисунок 2.1: Поток во время выполнения исходного кода.Эта статье предполагает использование операционной системы на основе Unix, поэтому некоторые особенности могут отличаться на Windows.
C./Programs/python.cPy_Main./Modules/main.cPy_Initializepylifecycle.ctypedef

Листинг 2.1: Структура данных состояния интерпретатора

Поле *next представляет собой ссылку на другой экземпляр интерпретатора, поскольку несколько интерпретаторов Python могут существовать в рамках одного процесса.
Поле *tstate_head указывает на главный поток выполнения (если программа многопоточная, то интерпретатор является общим для всех потоков, созданных программой). Подробнее мы обсудим это в ближайшее время.

modules, modules_by_index, sysdict, builtins и importlib — говорят сами за себя. Все они определены как экземпляры PyObject, который является корневым типом для всех объектов в виртуальной машине Python. Объекты пайтона будут рассмотрены более подробно в следующих главах.
В полях относящихся к codec* содержится информация, которая помогает с загрузкой кодировок

Это очень важно для декодирования байтов.

Листинг 2.2: Часть структуры данных состояния потокаrun_filePyRun_SimpleFileExFlagsPyParser_ParseFileObjectPyParser_ASTFromNodeObjectЕсли вы уже просмотрели исходный код, то наверняка столкнулись с Py_INCREF и Py_DECREF. Это функции управления памятью, которые мы позже обсудим подробно. CPython управляет жизненным циклом объекта с помощью подсчета ссылок: всякий раз, когда создается новая ссылка на объект, значение увеличивается через Py_INCREF. Аналогично, когда ссылка выходит из области видимости, то счётчик уменьшается с помощью функции Py_DECREF.
run_modPyAST_CompileObjectpeepholePyEval_EvalCodeceval.c_PyEval_EvalFrameEx

./Include/opcodes.hLOAD_FASTBINARY_MULTIPLYRETURN VALUE

  • Откуда получены значения, которые загружаются инструкцией LOAD_FAST?
  • Откуда берутся аргументы, которые используются, как часть инструкций?
  • Как управляются вложенные вызовы функций и методов?
  • Как цикл интерпретатора обрабатывает исключения?

Py_InitializePy_FinalizeEx

Использование KVM в Ubuntu

Вы справились с задачей установить KVM в Ubuntu, но вы еще не можете  использовать эту среду виртуализации но ее нужно еще настроить. Далее, мы рассмотрим как выполняется настройка KVM в Ubuntu. Что удобно, в новых версиях сеть уже настроена и вам не нужно создавать новый сетевой мост. Вы можете убедится в этом выполнив команду:

Интерфейсы virbr0 и virbr-nic созданы KVM по умолчанию и они полностью реализуют все необходимые возможности сети. Ещё вы можете посмотреть доступные мосты с помощью команды:

Создание виртуальных машин KVM

Настройка KVM Ubuntu завершена и теперь мы можем перейти к ее использованию. Сначала давайте просмотрим список уже существующих виртуальных машин:

Он пуст. Создать виртуальную машину можно через терминал или в графическом интерфейсе. Для создания через терминал используйте команду virt-install. Сначала перейдем в папку libvirt:

Для установки CentOS команда будет выглядеть вот так:

Разберем подробнее что означают параметры этой команды:

  • virt-type — тип виртуализации, в нашем случае kvm;
  • name — имя новой машины;
  • ram — количество памяти в мегабайтах;
  • vcpus — количество ядер процессора;
  • os-variant — тип операционной системы;
  • cdrom — установочный образ системы;
  • network-bridge — сетевой мост, который мы настроили ранее;
  • graphics — способ получения доступа к графическому интерфейсу;
  • diskpath — адрес нового жесткого диска для этой виртуальной машины;

После завершения установки виртуальной машины вы можете узнать параметры подключения по VNC с помощью команды:

Теперь вы можете ввести полученные данные в вашем клиенте VNC и подключится к виртуальной машине даже удаленно. Для Debian команда будет немного отличаться, но все выглядит похожим образом:

Переходим в папку для образов:

Можно скачать установочный образ из интернета если это необходимо:

Затем создадим виртуальную машину:

Теперь снова посмотрим список доступных машин:

Для запуска виртуальной машины можно использовать команду:

Для остановки:

Для перевода в режим сна:

Для перезагрузки:

Сброс:

Для полного удаления виртуальной машины:

Создание виртуальных машин в GUI

Если у вас есть доступ к графическому интерфейсу то нет никакой необходимости использовать терминал, вы можете применить полноценный графический интерфейс менеджера виртуальных машин Virtual Manager. Программу можно запустить из главного меню:

Для создания новой машины кликните по иконке со значком монитора. Дальше вам будет необходимо выбрать образ ISO вашей системы. Также можно использовать реальный CD/DVD привод:

На следующем экране выберите количество памяти, которая будет доступна для виртуальной машины, а также количество ядер процессора:

На этом экране вам нужно выбрать размер жесткого диска, который будет доступен в вашей машине:

На последнем шаге мастера вам предстоит проверить правильность настроек машины, а также ввести ее имя. Также нужно указать сетевой мост, через который машина будет подключаться к сети:

Затем автоматически запустится установка:

После этого машина будет готова к использованию и появится в списке. Вы можете запустить ее с помощью зеленого треугольника на панели инструментов менеджера.

Недостатки ВМ

Из минусов виртуальных машин обычно выделяют два наиболее значимых. Во-первых, стабильность. Большое количество виртуальных машин, запущенных на одном устройстве, могут привести к снижению стабильности и скорости работы основной операционной системы. Хост-компьютер должен соответствовать высоким системным требованиям, что может дорого стоить и ограничивать пользователей в выборе форм-фактора устройства.

Во-вторых, производительность. Даже на мощных ПК виртуальные машины работают ощутимо медленнее, чем хост-система. Нет полноценного контакта ПО с аппаратным обеспечением. Поэтому заставить работать приложения в ВМ так же быстро, как на стандартной ОС, не получится.

Облачные ВМ и тарифы на бессерверные вычисления: основные различия

Большинство облачных провайдеров берет деньги за время работы виртуальной машины с минимально предоплачиваемым временем в 60 секунд. Стоимость зависит от функционала ВМ (например, процессорной мощности, объема оперативной памяти, доступности или объема диска), а также предварительно резервируемого потребления ресурсов для этих ВМ. Правильный выбор типа или конфигурации ресурсов ВМ очень сильно зависит от приложения.

Функция, которая определяет ежемесячную стоимость виртуальной машины AWS Lambda зависит от трех параметров:

  • число выполненных запросов (назовем их n) в данном интервале;

  • объем памяти, выделенный виртуальной машиной;

  • оценочное время выполнения запросов (d) в миллисекундах.

Таким образом, общая стоимость Cλ для заданного числа запросов n может быть вычислена по следующей формуле:

где:

  • Cλ – функция затрат для данного числа запросов;

  • cλ – фиксированная стоимость запроса;

  • di – длительность выполнения функции, мс;

  • C’λ – функция затрат для данного числа запросов;

  • N – общее число запросов за данный период.

С другой стороны, функция затрат для виртуальной машины EC2 зависит, в свою очередь, от времени ее работы, а также максимального числа запросов, которое она способна обработать (rmax).

где:

  • CEC2 – функция затрат для данного периода T для виртуальной машины EC2;

  • rt – число запросов, которые необходимо обработать в секунду;

  • rmax – максимальное число запросов, которое виртуальная машина способна выполнить в секунду;

  • CEC2 – затраты за единицу времени (то есть одну секунду) для конкретной облачной ВМ;

  • T – временной период, за который проводится анализ затрат.

Требования к использованию виртуальных машин

Не существует минимальных требований для создания виртуальных машин. Даже если у нашего процессора нет собственных инструкций по виртуализации, мы все равно сможем создавать эти виртуальные машины, хотя и с некоторыми ограничениями (например, только для 32-битных систем).

Лучшее, что нужно сделать, чтобы создать виртуальную машину, это, во-первых, иметь процессор среднего или высокого класса (Intel i5 или выше) с инструкциями по виртуализации. Также рекомендуется иметь достаточно оперативной памяти, чтобы виртуальная машина могла работать без проблем, и, кроме того, чтобы наша хост-операционная система не исчерпывала память. 8 Гб оперативной памяти может быть достаточно для нормальной работы виртуальных машин (даже Windows 10, использующих 4 ГБ памяти) и для хост-системы, чтобы иметь достаточно памяти для продолжения работы. Нам нужно жесткий диск для хранить виртуальные жесткие диски, которые мы создаем для этих виртуальных машин. Если у нас есть SSD, производительность будет намного выше, чем при использовании обычного жесткого диска.

Клавиатура, мышь, монитор, звуковая карта и другие периферийные устройства также необходимы для бесперебойной работы с этими виртуальными машинами.

Что такое виртуальная машина

A виртуальная машина Вообще говоря, это виртуальная среда, в которой мы можем установить другие операционные системы для использования поверх нашей основной операционной системы. Эти виртуализированные среды эмулируют аппаратное обеспечение, опирающееся на реальное оборудование нашего ПК, и это виртуальное оборудование ведет себя как физический компьютер, с той разницей, что все это работает внутри нашего ПК. Операционная система виртуальной машины — это просто еще одна программа, которая работает на нашем компьютере.

Поэтому, когда мы говорим о виртуальных машинах, мы должны очень четко понимать следующие две концепции:

  • Хост-машина или хост: наш компьютер и основная операционная система.
  • Гостевая машина или гость: виртуальная машина как таковая, работающая поверх хоста.

Гипервизор, двигатель ВМ

Самое важное в виртуальной машине — это гипервизор. Он отвечает за управление виртуальным оборудованием и доступ к физическим ресурсам нашего ПК, таким как CPU / ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР, память, графика, звуковая карта и т

д. Жесткий диск виртуальных машин обычно представляет собой очень большой файл, который хранится на нашем реальном жестком диске.

Хотя у нас может быть только одна операционная система, работающая одновременно на ПК, виртуальные машины не имеют этих ограничений. Мы можем создавать, запускать и использовать одновременно все виртуальные машины, которые нам нужны, как Windows, так и Linux и macOS, если у нас есть оборудование (Оперативная память, особенно) в наличии.

Управление виртуальными машинами

Управление осуществляется в Управление → Виртуальные машины.

Нажмите Миграция для переноса виртуальной машины на другой узел кластера. Подробнее см. в статье Миграция виртуальных машин.

Нажмите Пароль для смены пароля виртуальной машины. Опция доступна только для виртуальных машин с операционными системами Linux, диски которых расположены в любом хранилище кроме RBD. Для смены пароля используется метод mount.linux. Метод использует пакет guestfish.

Алгоритм работы метода:

  1. VMmanager останавливает виртуальную машину и монтирует виртуальный диск:

    guestmount -a <образ_диска> -i <путь к точке монтирования> 
  2. VMmanager выполняет  chroot:

    mount -t proc proc <путь к точке монтирования>/proc
    mount -o bind /dev <путь к точке монтирования>/dev mount -o bind /sys <путь к точке монтирования>/sys chroot <путь к точке монтирования> 
  3. VMmanager меняет пароль:

    usermod -p 'новый-пароль' root 
  4. VMmanager выполняет unmount.

Нажмите Диски для управления подключением и отключением виртуальных дисков и ISO-образов.

Нажмите Интерфейсы для управления сетевыми интерфейсами виртуальной машины.

Нажмите IP-адреса для управления IP-адресами виртуальной машины. Для уже созданной виртуальной машины дополнительные IP-адреса необходимо сперва добавить в панели управления, а затем назначить вручную на интерфейс. При установке Windows на виртуальную машину дополнительные IP-адреса не добавляются в систему.

Нажмите Фильтр для управления списком фильтров TCP-портов.

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

Нажмите VNC для получения удалённого доступа к терминалу виртуальной машины. Подробнее о VNC см. в статье VNC.

Размер дисков находящихся в LVM-хранилище, должен быть кратен значению PE Size физического тома

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: