Красивая структура компонентов в облаке Microsoft Azure

от автора

Microsoft Azure — одна из самых крупных облачных платформ в мире. Даже несмотря на отсутствие у меня симпатий к сделавшей её корпорации, должен признать, что платформа обладает рядом удобств по сравнению с конкурентами. Но нет бочки мёда без ложки дёгтя, и этой ложкой в Microsoft Azure являются имена компонентов системы. Если в AWS переименовать компонент — дело двух кликов, то в Azure имена намертво привязываются к компонентам, и изменить их без танцев с бубном порой невозможно. Поэтому очень важно при работе с Azure изначально создать правильную структуру.

image

Итак, давайте попробуем в Microsoft Azure создать виртуальную машину с именем server-01 и настройками по умолчанию. Следующий рисунок наглядно отображает ту кашу, которую имеем в итоге.

image

Если вас здесь всё устраивает, то дальше можете не читать. Ну а если вам, как и мне, нравится тотальный порядок в администрируемом хозяйстве, то рискну предложить схему красивого именования компонентов Microsoft Azure, которой сам пользуюсь на протяжении последних нескольких лет.

Данная схема позволяет привести всю систему к следующему унифицированному виду:
{Группа компонентов}__{Элемент}
{Компонент}-{Номер}__{Элемент}-{номер}

Итак, приступим…

Добавляем группу ресурсов

Resource groups >> +Add
Resource group name: servers

Создаём виртуальную сеть и подсеть

По умолчанию Microsoft Azure расширяет подсеть на всю виртуальную сеть. Это не очень удобно, так как при необходимости будет очень сложно добавить новые подсети (к примеру, подсеть VPN). Поэтому я обычно под виртуальную сеть отдаю два последних октета (маска 16), а для подсети — один последний октет (маска 24).

Virtual networks >> +Add
Name: servers__network
Address space: 10.0.0.0/16
Subnet:
Name: default
Address range: 10.0.0.0/24

Network interfaces: +Add
Name: server-01__ip-private-01
Virtual network: servers__network
Subnet: default
Private IP address: Static/10.0.0.101

Первые несколько адресов подсети (10.0.0.01…03) Azure использует под свои нужды, поэтому я сдвинул рабочие адреса в диапазон выше 100. Таким образом, номер сервера будет соответствовать последней цифре IP-адреса: server-01 = 10.0.0.101, server-02 = 10.0.0.102, server-43 = 10.0.0.143 и т.п.

Внешний адрес и группа безопасности

Если планируется, что виртуальная машина будет смотреть наружу, то создаём публичный адрес и группу безопасности.

Public IP addresses: +Add
Name: server-01__ip-public-01
IP address assignment: Static

Public IP addresses >> выбираем server-01__ip-public-01 >> Associate:
Resource type >> Network interface: server-01__ip-private-01

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

Network security groups >> +Add

Вариант группы безопасности для отдельного хоста:
Name: server-01__security-group
Network interfaces >> +Associate: server-01__ip-private-01

Группа безопасности для подсети:
Name: servers__network-security-group
Subnets >> +Associate:
Virtual network: servers__network
Subnet: default

Диск

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

Создаём фиктивную виртуальную машину

Virtual machines >> +Add
Basics:
Name: server-01-raw
VM disk type: Premium SSD
Username: your-name
SSH public key: your-public-key
Settings:
Availability set: None
Network: servers__network
Subnet: default
Public IP address: None
Select public inbound ports: No public inbound ports
Monitoring: Disabled

После создания фиктивной машины можно удалить все компоненты (включая саму машину), помеченные суффиксом raw за исключением диска.

Снимаем снапшот диска

Disks >> выбираем disk server-01-raw_OsDisk_... >> +Create snapshot
Name: server-01-raw-snapshot

На основе снапшота создаём новый рабочий диск:

Disks >> +Add
Name: server-01__disk-01
Source type: Snapshot
Source snapshot: server-01-raw-snapshot

Разворачиваем рабочую машину на основе нового диска

Disks >> выбираем server-01__disk-01 >> + Create VM
Basics:
Name: server-01
Settings:
Availability set: None
Network: servers__network
Subnet: default
Public IP address: None
Select public inbound ports: No public inbound ports
Monitoring: Disabled

Сетевые интерфейсы

Ещё одно упущение Microsoft — при создании виртуальной машины из диска в GUI нет возможности прикрепить к ней созданный ранее сетевой интерфейс. Поэтому останавливаем машину, удаляем сетевой интерфейс и прикрепляем к ней тот, что мы создали выше.

Virtual machines >> выбрать VM server-01 >> Stop
Virtual machines >> выбрать VM server-01 >> Networking:
Attach network interface >> server-01__ip-private-01
Detach network interface >> server-01982

Удаление мусора

Последний штрих — удаление мусора, который остался от сделанных нами манипуляций.
Удаляем:
сетевой интерфейс server-01982,
группу безопасности server-01-nsg,
диск от фиктивной машины: server-01-raw_OsDisk…
снапшот server-01-raw-snapshot

Вот что в итоге получилось:

image

CLI

Вы, наверное, уже заметили, что навести красоту в Azure является довольно хлопотным занятием. Но всё существенно упрощается, если воспользоваться командной строкой (CLI). Microsoft Azure предоставляет CLI как для её родного PowerShell, так и для консоли Линукс. Последний вариант и будет описан ниже.

Логинимся:

az login -u AzureUserName

Получаем список доступных локаций

az account list-locations

Получаем список размеров виртуальных машин:

az vm list-sizes --location locationName

Задаём список параметров сети и виртуальной машины (во все последующие команды эти данные будут передаваться через переменные):

location="westindia" resource_group="servers" virt_network="servers__network" virt_network_range="10.0.0.0/16" subnet="default" subnet_range="10.0.0.0/24"  user="username" ssh_key="ssh-public-key"  name="server-01" image="UbuntuLTS" ip="10.0.0.101" interface_suffix="__ip-private-01" disk_suffix="__disk-01" size="Standard_B1s" ### SSD = "Premium_LRS"; HDD = "Standard_LRS" storage_type="Premium_LRS"

Создаём группу ресурсов:

az group create --location ${location} --name ${resource_group}

Создаём виртуальную сеть и подсеть:

az network vnet create --location ${location} --resource-group ${resource_group} --name ${virt_network} --address-prefixes ${virt_network_range}
az network vnet subnet create --resource-group ${resource_group} --vnet-name ${virt_network} --name ${subnet} --address-prefix ${subnet_range}

Создаём сетевой интерфейс:

az network nic create --resource-group ${resource_group} --location ${location} --name ${name}${interface_suffix} --subnet ${subnet} --vnet-name ${virt_network} --private-ip-address ${ip}

Создаём фиктивную виртуальную машину:

az vm create --name ${name} --admin-username ${user} --ssh-key-value "${ssh_key}" --resource-group ${resource_group} --location ${location} --image ${image} --size ${size} --nics ${name}${interface_suffix} --storage-sku ${storage_type}

Нормализуем диск:

az vm stop --name ${name} --resource-group ${resource_group}  disk_old=$(az vm get-instance-view --name ${name} --resource-group ${resource_group} | grep -o "${name}_OsDisk[0-9a-z\_]\{1,\}" | head -1)  az disk create --location ${location} --resource-group ${resource_group} --name ${name}${disk_suffix} --source ${disk_old} --sku ${storage_type}

Удаляем фиктивную машину и разворачиваем рабочую:

az vm delete --name ${name} --resource-group ${resource_group} --yes  az vm create --name ${name} --resource-group ${resource_group} --location ${location} --size ${size} --nics ${name}${interface_suffix} --attach-os-disk ${name}${disk_suffix} --os-type Linux ${availability_set_as_option}

Удаляем фиктивный диск:

az disk delete --resource-group ${resource_group} --name ${disk_old} --yes

Автоматизация

Чтоб автоматизировать процесс разворачивания виртуальных машин в облаке Microsoft Azure, я свёл все вышеперечисленные команды в один bash-скрипт azure-create-vm.sh, который можно взять с Github. Открываете скрипт в любом текстовом редакторе, вбиваете свои данные и можно разворачивать виртуальные машины с красивыми именами нажатием нескольких клавиш.


ссылка на оригинал статьи https://habr.com/post/422211/


Комментарии

Добавить комментарий

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