Автоматизируем управление виртуальными машинами на Windows Azure


Подготовка управляющей машины
Управляющей машиной в нашем случае является специализированный физический или виртуальный сервер, который производит управление облачной инфраструктурой на Windows Azure.
Чтобы подготовить такой сервер необходимо установить на него как минимум ОС Windows Server 2008 R2, также может быть использован Windows 7, а также необходимо произвести ряд дополнительных действий:
1. Загрузить средства командной строки: http://www.windowsazure.com/ru-ru/downloads/#cmd-line-tools
2. Установить средства командной строки.
3. Получение прав доступа к сервису Windows Azure

Код

Get-AzurePublishSettingsFile

4. Сохранить файл настроек соединения.
5. Применить полученные настройки соединения.
Код

Import-AzurePublishSettingsFile <путь к файлу настроек соединения>

Алгоритм создания ВМ
Возможны два варианта разворачивания виртуальной машины на Windows Azure:

1. Развертывание виртуальной машины на основании подготовленного виртуального диска.
Данный вариант подходит для случая, когда существует подготовленная и настроенная виртуальная машина, которую нужно перенести в облачную инфраструктуру.

Преимущества данного варианта:
 быстрое разворачивание, без предварительной подготовки.

Недостатки данного варианта:
 затрачивается время на загрузку ВМ на облачный хостинг (по расчетам для диска размером 30 Гб, и с каналом связи до 100 Мб/с, в среднем 40-80 минут). Это время можно уменьшить, если Управляющая Машина расположена на Windows Azure в том же географическом пространстве, где планируется разворачивать облачную инфраструктуру (по расчетам для диска размером 30 Гб, в среднем 10-15 минут).

2. Развертывание виртуальной машины из шаблона.
Данный вариант подходит для случая, когда на Windows Azure подготовлен шаблон виртуальной машины, из которого планируется разворачивать множество однотипных виртуальных машин.

Преимущества данного варианта:
 отсутствует необходимость хранения на Управляющей Машине дисков с подготовленными виртуальными машинами, высокая скорость развертывания до 5 минут.

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

Развертывание виртуальной машины на основании подготовленного виртуального диска
Код

# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Указываем географическое местоположение для виртуальной машины 
  $location = 'East Asia' 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  # Выбор шаблона мощностных характеристиквиртуальной машины
  # ExtraSmall, Small, Medium, Large, ExtraLarge

  $Instance = "ExtraSmall"

  # Указываем объем диска данных для виртуальной машины 

  $StorageSizeInGb = "10"

  # Получаем Primary ключ для данного хранилища
  $key = Get-AzureStorageKey $storageAccountName | %{ $_.Primary}

  # Задаем контекст подключения
  $context = New-AzureStorageContext –StorageAccountName $storageAccountName -StorageAccountKey $key –Endpoint "core.windows.net"

  # Создаем специальный контенер (каталог) в который будут помещены все диски данной виртуальной машины
  New-AzureStorageContainer –Name $vmname1 –Permission Off –Context $context

  # Источник, откуда будем брать готовый диск с настроенной виртуальной машиной
  $Source = 'C:\VHD\Template.vhd'

  # Назначаем путь, куда будем подгружать диск с виртуальной машиной
  $DiskC = 'http://' + $storageAccountName + '.blob.core.windows.net/'+ $serviceName +'/system.vhd'

  # Производим загрузку диска на Windows Azure
  Add-AzureVhd -LocalFilePath $Source -Destination $DiskC 

  # Задаем на хостинге Windows Azure диск, который может быть использован при создании виртуальной машины
  Add-AzureDisk -OS Windows -MediaLocation $DiskC -DiskName $serviceName

  # Задаем путь, где будет храниться дополнительный диск для данный, который будем подключать к нашей виртуальной машине.

  $Storage = 'http://' + $storageAccountName + '.blob.core.windows.net/'+$serviceName+'/storage.vhd'

  # Задаем имя для данного диска
  $DiskName = "Storage" + $StorageSizeInGb

  # Подготовим конфигурацию будущей виртуальной машины
  $VM = New-AzureVMConfig -Name $vmname1 -DiskName $serviceName -InstanceSize $Instance | Add-AzureDataDisk -CreateNew -DiskSizeInGb $StorageSizeInGb -DiskLabel 'Storage' -MediaLocation $Storage -LUN 0 | Add-AzureEndpoint -Name 'Remote Desktop' -LocalPort 3389 –PublicPort 3389  -Protocol tcp | Add-AzureEndpoint -Name 'web' -LocalPort 80 –PublicPort 80 -Protocol tcp | Add-AzureEndpoint -Name 'web2' -LocalPort 8080 –PublicPort 8080  -Protocol tcp

  # Запускаем процесс создания виртуальной машины
  New-AzureVM -ServiceName $serviceName -Location $location -VMs $VM

Развертывание виртуальной машины из шаблона
Данный шаблон должен быть предварительно размещен на хостинге. Скрипт для размещение представлен ниже:
Код

# Указываем название шаблона 
  $ImageName = 'Template01'

  # Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Источник, откуда будем брать готовый шаблон
  $Source = 'C:\VHD\Template.vhd'

  # Назначаем путь, куда будем подгружать шаблон
  $TemplatePath = 'http://' + $storageAccountName + '.blob.core.windows.net/Templates/' +$ImageName + '.vhd'

  # Производим загрузку шаблона на Windows Azure
  Add-AzureVhd -LocalFilePath $Source -Destination $TemplatePath 

  # Задаем на хостинге Windows Azure шаблон, который может быть использован при создании виртуальной машины
  Add-AzureVMImage -MediaLocation $DiskC -ImageName $ImageName

Скрипт развазворачивания виртуальной машины из шаблона

Код
# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Указываем географическое местоположение для виртуальной машины 
  $location = 'East Asia' 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  # Выбор шаблона мощностных характеристиквиртуальной машины
  # ExtraSmall, Small, Medium, Large, ExtraLarge
  $Instance = "ExtraSmall"

  # Указываем объем диска данных для виртуальной машины 
  $StorageSizeInGb = "10"

  # Получаем Primary ключ для данного хранилища
  $key = Get-AzureStorageKey $storageAccountName | %{ $_.Primary}

  # Задаем контекст подключения
  $context = New-AzureStorageContext –StorageAccountName $storageAccountName -StorageAccountKey $key –Endpoint "core.windows.net"

  # Создаем специальный контенер (каталог) в который будут помещены все диски данной виртуальной машины
  New-AzureStorageContainer –Name $vmname1 –Permission Off –Context $context

  # Назначаем путь, куда будет располагаться системный диск с виртуальной машиной
  $DiskC = 'http://' + $storageAccountName + '.blob.core.windows.net/'+ $serviceName +'/system.vhd'

  # Задаем путь, где будет храниться дополнительный диск для данный, который будем подключать к нашей виртуальной машине.
  $Storage = 'http://' + $storageAccountName + '.blob.core.windows.net/'+$serviceName+'/storage.vhd'

  # Задаем имя для данного диска
  $DiskName = "Storage" + $StorageSizeInGb

  # Указываем название шаблона 
  $ImageName = 'Template01'

  # Подготовим конфигурацию будущей виртуальной машины
  $VM = New-AzureVMConfig -Name $vmname1 -ImageName $ImageName –MediaLocation $DiskC -InstanceSize $Instance | Add-AzureDataDisk -CreateNew -DiskSizeInGb $StorageSizeInGb -DiskLabel 'Storage' -MediaLocation $Storage -LUN 0 | Add-AzureEndpoint -Name 'Remote Desktop' -LocalPort 3389 –PublicPort 3389  -Protocol tcp | Add-AzureEndpoint -Name 'web' -LocalPort 80 –PublicPort 80 -Protocol tcp | Add-AzureEndpoint -Name 'web2' -LocalPort 8080 –PublicPort 8080  -Protocol tcp

  # Запускаем процесс создания виртуальной машины
  New-AzureVM -ServiceName $serviceName -Location $location -VMs $VM

Управление эластичностью

1. Изменение вычислительных характеристик виртуальной машины
Код

# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Указываем географическое местоположение для виртуальной машины 
  $location = 'East Asia' 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  # Выбор шаблона мощностных характеристиквиртуальной машины
  # ExtraSmall, Small, Medium, Large, ExtraLarge
  $Instance = "Large"

  Get-AzureVM -ServiceName $serviceName -Name $vmname1 | Set-AzureVMSize –InstanceSize $instanceSize | Update-AzureVM

2. Подключение нового диска данных для виртуальной машины
К сожалению, на Windows Azure отсутствует возможность изменения размеров дисков с данными. Есть возможность только добавить и удалить диск.
Код

# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  # Задаем параметры диска
  $StorageSizeInGb = "20"
  $LUN = "0"
  $DiskName = "Storage" + $StorageSizeInGb

  # Расположение нового диска
  $NewStorage = 'http://' + $storageAccountName + '.blob.core.windows.net/'+$serviceName+'/Storage'+$StorageSizeInGb+'.vhd'

  # Подключаем диск к виртуальной машине
  Get-AzureVM -ServiceName $serviceName -Name $vmname1 | Add-AzureDataDisk -CreateNew -DiskLabel $DiskName -MediaLocation $NewStorage -DiskSizeInGB $StorageSizeInGb -LUN $LUN | Update-AzureVM

3. Удаление диска данных
Код

# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  # Задаем параметры диска
  $StorageSizeInGb = "20"
  $LUN = "0"

  # Получаем имя диска указанной ВМ по LUN
  $DiskName = (Get-AzureVM $serviceName –name $vmname1 | Get-AzureDataDisk -LUN $LUN).DiskName

  # Отключаем диск от виртуальной машины
  Get-AzureVM $serviceName –name $vmname1 | Remove-AzureDataDisk -LUN 0 | Update-AzureVM

  # Необходима задержка, чтобы закончились все переходные процессы, иначе получим ошибку при удалении диска и носителя, прикрепленного к нему
  $server = $serviceName + '.cloudapp.net'
  ping $server

  # Удаляем диск с прикрепленным к нему носителем
  Remove-AzureDisk -DiskName $DiskName –DeleteVHD

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

# Указываем название подписки 
  $subscriptionName = 'Бесплатное пробное использование'  

  # Указываем название хранилища 
  $storageAccountName = 'Storage'

  # Настраиваем подключение к подписке
  Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccount $storageAccountName  -PassThru

  # Выбираем подписку, в случае если их несколько 
  Select-AzureSubscription -SubscriptionName $subscriptionName 

  # Задаем название сервиса
  $serviceName = 'companyname' 

  # Задаем название виртуальной машины
  $vmname1 = 'companyname'

  #Задаем наименование системного удаляемой ВМ
  $SystemDiskName = 'companyname'

  # Удаление виртуальной машины (предварительно необходимо удалить прикрепленные диски)
  Remove-AzureVM -ServiceName $serviceName -Name $vmname1

  # Необходима задержка, чтобы закончились все переходные процессы
  $server = $serviceName + '.cloudapp.net'
  ping $server

  # Удаляем системный диск виртуальной машины
  Remove-AzureDisk -DiskName $SystemDiskName –DeleteVHD

  # Необходима задержка, чтобы закончились все переходные процессы
  $server = $serviceName + '.cloudapp.net'
  ping $server

  # Удаление контейнера (дирректории), в котором были расположены виртуальные носители, прикрепленные к данной ВМ
  Remove-AzureStorageContainer –Name $serviceName -force

  Remove-AzureService -ServiceName $serviceName -force

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *