Disky v Azure jsou ve skutečnosti objekty (konkrétně VHD soubor) v Page Blob storage v nějakém vašem Storage Accountu. Od února už ale tento detail neumusíte řešit, Azure to bude spravovat za vás. Jednoduše disky vytvoříte, připojíte, odpojíte, nabootujete nebo uděláte snapshot a jak si to Azure ukládá necháte na něm. Podívejme se jak na to.
Pro naše zkoušení budeme potřebovat dvě VM, použiji jednu s Windows a jednu s Linux. Můžete klidně naklikat vše potřebné v portálu, jen si všimněte zaškrtávátka pro Managed Disks.
Tímto se zajistí, že pro disk s OS se nemusíte trápit se správou storage accountů (nicméně pokud chcete sbírat diagnostiku apod. tak jeden budete stále potřebovat, ale disky jako takové bude pro vás spravovat Azure).
V resource group se vám objeví objekt disků.
Pojďme si vytvořit nějaký datový disk, začneme v portálu. Klikněte na přidat a vyhledejte Managed Disk.
Zadáme jméno a další atributy. Disk může vzniknout z VHD souboru v Blob storage, ze snapshotu (o tom později) neo být prázdný (to bude náš případ).
Výborně. Není to ale moc klikání? Pokud máte rádi CLI, udělejme to takhle:
az disk create -g mojerg --name dataDisk2 --size-gb 32
Kouzlíte raději v powerShellu? Pak takhle:
$disk = New-AzureRmDiskConfig -CreateOption Empty -AccountType StandardLRS -Location westeurope -DiskSizeGB 32 New-AzureRmDisk -ResourceGroupName mojerg -DiskName dataDisk3 -Disk $disk
Podívejme se na výsledek.
Prázdné disky si nemusíme připravovat dopředu, dá se to udělat jednoduše přímo v okamžiku přidávání datového disku. Nicméně ze cvičných důvodů jsme to provedli takhle, protože tímto postupem budete třeba vytvářet disky ze snapshotů či existujících VHD souborů.
Připojme si jeden z disků do jedné z VM nejprve v GUI. Klikněte na VM a najděte záložku disků.
Vyberte si a připojte disk.
Pokud chcete rovnou vytvořit disk a nepřipravovat si ho dopředu, použijte příslušnou volbu.
Vyzkoušejme si přidat disk ze CLI. Nejprve musíme získat ID disku a pak ho připojit.
diskId=$(az disk show -g mojerg -n dataDisk2 --query 'id' -o tsv) az vm disk attach -g mojerg --vm-name mujLinux --disk $diskId
Vlastně v CLI jde ještě jedna příjemná věc - pokud potřebujete nový disk, nemusíte ho vytvářet dopředu. Stačí rovnou v příkazu attach definovat jeho vlastnosti a říct, že má být nový.
az vm disk attach -g mojerg --vm-name mujLinux --disk dataDisk4 --size-gb 32 --new
Výsledek předchozích dvou příkazů vypadá takhle:
Raději PowerShell?
$vm = Get-AzureRmVM -ResourceGroupName mojerg -Name mojeWindows Add-AzureRmVMDataDisk -VM $vm -ManagedDiskId (Get-AzureRmDisk -DiskName dataDisk3 -ResourceGroupName mojerg).Id -CreateOption Attach -Lun 1 Update-AzureRmVM -ResourceGroupName mojerg -VM $vm
Stejně jako u CLI může kromě existujícího disku při kroku připojování rovnou vytvořit nějaký prádný, pokud chceme.
$vm = Get-AzureRmVM -ResourceGroupName mojerg -Name mojeWindows Add-AzureRmVMDataDisk -VM $vm -Lun 1 -CreateOption Empty -StorageAccountType StandardLRS -DiskSizeinGB 32 -Name dataDisk5 Update-AzureRmVM -ResourceGroupName mojerg -VM $vm
Podívejme se do naší Windows VM. První dva disky uvidíme v systému jako C: (na něm je operační systém) a disk D: (to je lokální rychlý temporary disk, na který nikdy neukládejte nic důležitého, protože není perzistentní).
Po inicializaci disků můžeme vytvořit jednotky a začít ukládat data.
V Linuxu to je podobné.
sudo fdisk -l Disk /dev/sda: 29.3 GiB, 31457280000 bytes, 61440000 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xffcebafc Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 61439966 61437919 29.3G 83 Linux Disk /dev/sdb: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x8066c020 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 83884031 83881984 40G 7 HPFS/NTFS/exFAT Disk /dev/sdc: 32 GiB, 34359738368 bytes, 67108864 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdd: 32 GiB, 34359738368 bytes, 67108864 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Potřebujeme tedy inicializovat disk tím, že vytvoříme partition, založíme souborový systém a připojíme.
sudo parted /dev/sdc mklabel gpt sudo parted -a opt /dev/sdc mkpart primary ext4 0% 100% sudo mkfs.ext4 -L mojedata /dev/sdc1 sudo mkdir -p /mnt/mojedata sudo mount -o defaults /dev/sdc1 /mnt/mojedata
Azure vám dovolí nad diskem udělat snapshot, který pak můžeme dál používat například pro naklonování (vytvořit diskové kopie), vytvoření image nebo zálohování (tam doporučuji použít službu Azure Backup - používá stejný postup, ale o vše se vám pravidelně postará, nemusíte nic řešit). Tento snapshot je aplikačně konzistnentní u Windows VM díky použití VSS a u Linux je file-system konzistentní (tzn. nedojde k poškození souborů nebo ztrátě dat na rozdíl od "crash" konzistence, kde se sice většinou nic neztratí, ale systém si po startu bude disk opravovat).
Vytvoříme snapshot v portálu - vyhledejte službu a udělejte snapshot.
Vyplňte požadované parametry a udělejte snapshot.
Totéž snadno uděláte v CLI.
az snapshot create -g mojerg --name az_snap --sku Standard_LRS --source dataDisk2
A také v PowerShell.
$snap = New-AzureRmSnapshotConfig -SourceUri (Get-AzureRmDisk -DiskName dataDisk3 -ResourceGroupName mojerg).Id -CreateOption Copy -AccountType StandardLRS -Location westeurope New-AzureRmSnapshot -Snapshot $snap -SnapshotName ps_snap -ResourceGroupName mojerg
Tohle bude výsledek.
Z těchto snapshotů pak můžete vytvářet nové disky - opět v portálu, CLI i PowerShell.
az disk create --name az_disk --source az_snap --resource-group disky
$disk = New-AzureRmDiskConfig -SourceUri (Get-AzureRmSnapshot -SnapshotName ps_snap -ResourceGroupName mojerg).Id -CreateOption Copy -AccountType StandardLRS -OsType Linux -Location westeurope New-AzureRmDisk -ResourceGroupName mojerg -DiskName ps_disk -Disk $disk
Pokud tohle provedese s OS diskem, můžete z něj nabootovat další VM. To si ale ukážeme až příště, protože k tomu se možná bude lépe hodit koncept image.
Předchozí řešení, kdy jste se sami starali o storage account se platilo právě v rámci této entity. Také záleželo na úrovni replikace - typicky se používá buď lokální redundance (3 kopie v rámci Azure regionu) nebo geo-replikace (dva regiony a v každém 3 kopie). Managed Disks mají licencování, které je pro ně přirozenější - tedy podle typu disku a jeho velikosti a v tuto chvíli (únor 2017) nabízí jen replikaci uvnitř regionu.
Máte na výběr ze dvou tříd disků - Standard nebo Premium. Standardní řešení je postaveno na HDD a u VM standardní vrstvy má výkon někam k 500 IOPS a až 60 MB za vteřinu. Čím větší VM, tím víc disků obvykle můžete připojit, vytvořit na nich softwarový RAID (nebo něco podobného) a výkony posčítat. Velikosti disků jsou označeny jako S4, S6, S10, S20 a S30 a jdou od 32 GB do 1TB. Základní S4 disk vás vyjde na 1,3 EUR za měsíc používání a 0,00608 EUR za každých 100 000 IO transakcí - nicméně na všechny ceny Managed Disks je do konce července zaváděcí promo se slevou 50%.
Premium, tedy SSD varianty jsou v provedení P10 (128GB, 500 IOPS, 100 MB/s), P20 (512 GB, 2300 IOPS, 150 MB/s) a P30 (1TB, 5000 IOPS, 200 MB/s). Výkony jsou per-disk, takže zátěž můžete opět rozkládat a zvyšovat tak výkon. Nejvíc disků dáte do VM typu GS5 a výsledkem bude 80 000 IOPS a 2000 MB/s, což je poměrně masivní na jedinou virtuální mašinku. Za IOPS se u prémiové storage neplatí a za P10 dáte 36,56 EUR měsíčně, ale do konce července 2017 jen za polovic.
Managed Disks je příjemné zjednodušení práce s disky v Azure. Ale co když potřebujete opakovatelně spustit stroj s několika disky, kde se má snapshot provést koordinovaně? A co když chcete svůj vlastní generalizovaný image? Příště se podíváme právě na to.