- Azure IaaS (1) – první VM z grafického portálu
- Azure IaaS (2) – první VM z PowerShell
- Azure IaaS (3) – první VM z Azure CLI
- Azure IaaS (4) – první VM z ARM šablony
- Azure IaaS (5) – Network security group
- Azure IaaS (6) – vlastní image
- Azure IaaS (7) – automatizace stavu VM při vytvoření
- Azure IaaS (8) – Availability Set aneb jak je to s SLA
Dnes si ukážeme zmrazení vaší VM do nového image. V IaaS v2 a novém portálu je to zatím tak, že musíte do PowerShellu či CLI a výsledkem je nový diskový soubor (VHD). Pro jeho následný deployment pak musíte použít ARM šablonu, CLI nebo PowerShell. Může se to v budoucnu změnit, ale dnes je to tak. Nicméně GUI stejnak zdržuje, takže pro tento díl nám to vadit nebude.
Připravíme si VM
Nejprve si rozjeďte Ubuntu 16.04 VM, například PowerShellem tak, jak to bylo v druhém díle seriálu. Pak se do VM připojte a nejprve si stáhněte jednoduchý web server tak, jako v minulém díle.
tomas@vm1:~$ git clone https://github.com/tkubica12/web.git Cloning into 'web'... remote: Counting objects: 19, done. remote: Compressing objects: 100% (10/10), done. remote: Total 19 (delta 2), reused 19 (delta 2), pack-reused 0 Unpacking objects: 100% (19/19), done. Checking connectivity... done.
Pojďme teď z webového serveru udělat službu. Nejprve ho nakopírujte do adresáře /opt
tomas@vm1:~$ sudo cp web/web /opt/web
Aby se web choval jako služba, musíme ji popsat (víc detailů najdete na Internetu, stačí kouknout po Systemd). Vytvořte tento soubor:
tomas@vm1:~$ sudo nano /etc/systemd/system/web.service
A nechť je tohle jeho obsah:
[Unit] Description=web service After=network [Service] ExecStart=/opt/web [Install] WantedBy=multi-user.target
Službu ještě povolíme.
sudo chmod +x /opt/web sudo systemctl enable web.service
To zajistí, že služba nastartuje automaticky s počítačem. Abychom nemuseli restartovat spustíme ji teď explicitně a vyzkoušejte, že web server funguje.
tomas@vm1:~$ sudo systemctl start web tomas@vm1:~$ curl 127.0.0.1:3000 <h1>My MAC address is 00:0d:3a:20:70:34</h1>
Ověřte také, že se na web dostanete přes veřejnou IP (pokud ne, možná máte network security group a není tam přidán port 3000).
Zachytíme VM
Z této VM, která od teď dělá statický web server, chceme udělat nový diskový obraz. Pokud bychom to udělali jen tak hned teď, zmrazíme i nastavení uživatelského účtu, jeho heslo nebo SSH klíč apod. To nechceme, tyto parametry v IaaS chceme dosazovat až v okamžiku deploymentu. Musíme je tedy “vygumovat”. Azure na to má předinstalovanou utilitku jak pro Linux VM, tak pro Windows. Pozor – nenechávejte nic důležitého v domovském adresáři uživatele, to bude vymazáno.
sudo waagent -deprovision+user -force WARNING! The waagent service will be stopped. WARNING! Cached DHCP leases will be deleted. WARNING! root password will be disabled. You will not be able to login as root. WARNING! tomas account and entire home directory will be deleted. WARNING! Nameserver configuration in /etc/resolvconf/resolv.conf.d/{tail,originial} will be deleted. 2016/09/30 04:29:33.546917 INFO resolvconf is enabled; leaving /etc/resolv.conf intact
Teď VM zastavíme a generalizujeme.
Stop-AzureRmVM -ResourceGroupName test -Name vm1 Set-AzureRmVM -ResourceGroupName test -Name vm1 -Generalized
Teď si uložíme tuto VM do nového VHD souboru, tedy startovacího disku. Všimněte si, že budeme směřovat do aktuálního storage accountu v naší Resource Group a definujeme si název kontejneru pro šablony v našem Blob store (o tom ještě bude v seriálu řeč). Také si necháme vygenerovat ARM šablonu.
Save-AzureRmVMImage -ResourceGroupName test -VMName vm1 -DestinationContainerName templates -VHDNamePrefix 'template' -Path C:\test-web.json
Podívejte se do storage accountu a do Blob store.
Najděte kontejner System a jděte ve struktuře dál. Nakonec narazíte na náš nový VHD disk.
Prohlédněte si ARM template a zaměřte se především na část, kde je image URI.
{ "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/VM_IP.json", "contentVersion": "1.0.0.0", "parameters": { "vmName": { "type": "string" }, "vmSize": { "type": "string", "defaultValue": "Standard_DS1_v2" }, "adminUserName": { "type": "string" }, "adminPassword": { "type": "securestring" }, "networkInterfaceId": { "type": "string" } }, "resources": [ { "apiVersion": "2016-03-30", "properties": { "hardwareProfile": { "vmSize": "[parameters('vmSize')]" }, "storageProfile": { "osDisk": { "osType": "Linux", "name": "template-osDisk.24210b07-2824-4e87-a37e-a4439b2f28df.vhd", "createOption": "FromImage", "image": { "uri": "https://tomastore.blob.core.windows.net/system/Microsoft.Compute/Images/templates/template-osDisk.24210b07-2824-4e87-a37e-a4439b2f28df.vhd" }, "vhd": { "uri": "https://tomastore.blob.core.windows.net/vmcontainer39042991-aa08-4d61-b84e-4bc509af7621/osDisk.39042991-aa08-4d61-b84e-4bc509af7621.vhd" }, "caching": "ReadWrite" } }, "osProfile": { "computerName": "[parameters('vmName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPassword')]" }, "networkProfile": { "networkInterfaces": [ { "id": "[parameters('networkInterfaceId')]" } ] }, "diagnosticsProfile": { "bootDiagnostics": { "enabled": true, "storageUri": "https://tomastore.blob.core.windows.net/" } }, "provisioningState": 0 }, "name": "[parameters('vmName')]", "type": "Microsoft.Compute/virtualMachines", "location": "westeurope" } ] }
Spustíme VM z nového VHD šablonou
Máme teď víc možností. Jednou z nich je použít vytvořenou ARM šablonu. V té se mi jedna věc nelíbí a to, že nový disk s OS má fixní název, takže šablonu nelze beze změny aplikovat dvakrát. Změňme tuto část:
"vhd": { "uri": "https://tomastore.blob.core.windows.net/vmcontainer39042991-aa08-4d61-b84e-4bc509af7621/osDisk.39042991-aa08-4d61-b84e-4bc509af7621.vhd" }
takhle:
"vhd": { "uri": "https://tomastore.blob.core.windows.net/vmcontainer39042991-aa08-4d61-b84e-4bc509af7621/osDisk.[parameters('vmName')].vhd" }
Dál má pro uživatele jméno místo SSH klíče a očekává, že NIC pro ni vytvoříme ručně. To všechno můžeme vylepšit a v minulých dílech jsme zkoumali jak. V okamžiku, kdy budete spokojeni, můžete si šablonu uložit přímo v portálu.
Spustíme VM z nového VHD z PowerShell
Možná není tento web server něco, co budeme chtít používat jako nějakou odladěnou šablonu. Navíc co když tento web server potřebujeme měnit každý den (pak je lepší odpověď VM Extensions, ale o tom až příště)? Proveďme si tedy deployment z PowerShell. Jediné co musíme vědět je URI VHD souboru v našem storage accountu. To najdete přímo prohlížením v portálu a bylo to i v naší šabloně.
Budu předpokládat, že se vaše virtuální síť jmenuje net1. Navíc v rámci procvičování si PowerShellem založme i security group.
Nejprve tedy načteme síť a uděláme si veřejnou IP a NIC.
$net1 = Get-AzureRmVirtualNetwork -Name net1 -ResourceGroupName test $pip2= New-AzureRmPublicIpAddress -Name pip2 -ResourceGroupName test -Location westeurope -AllocationMethod Static $nic2= New-AzureRmNetworkInterface -Name nic2 -ResourceGroupName test -Location westeurope -SubnetId $net1.Subnets[0].Id -PublicIpAddressId $pip2.Id
Založte a přiřaďte novou NSG.
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name 3000-rule -Description "Allow port 3000" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 ` -SourceAddressPrefix Internet -SourcePortRange * ` -DestinationAddressPrefix * -DestinationPortRange 3000 $rule2 = New-AzureRmNetworkSecurityRuleConfig -Name ssh -Description "Allow port 22" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 102 ` -SourceAddressPrefix Internet -SourcePortRange * ` -DestinationAddressPrefix * -DestinationPortRange 22 $nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName test -Location westeurope -Name "sg3000" -SecurityRules $rule1,$rule2 $nic2.NetworkSecurityGroup = $nsg Set-AzureRmNetworkInterface -NetworkInterface $nic2
Přiřadíme velikost VM, přihlašovací údaje a tak podobně.
$vm2 = New-AzureRmVMConfig -VMName vm2 -VMSize "Standard_DS1_v2" $creds = New-Object System.Management.Automation.PSCredential ("tomas", (new-object System.Security.SecureString)) $vm2 = Set-AzureRmVMOperatingSystem -VM $vm2 -Linux -ComputerName vm2 -Credential $creds -DisablePasswordAuthentication $vm2= Add-AzureRmVMSshPublicKey -VM $vm2 -Path “/home/tomas/.ssh/authorized_keys” -KeyData "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFhm1FUhzt/9roX7SmT/dI+vkpyQVZp3Oo5HC23YkUVtpmTdHje5oBV0LMLBB1Q5oSNMCWiJpdfD4VxURC31yet4mQxX2DFYz8oEUh0Vpv+9YWwkEhyDy4AVmVKVoISo5rAsl3JLbcOkSqSO8FaEfO5KIIeJXB6yGI3UQOoL1owMR9STEnI2TGPZzvk/BdRE73gJxqqY0joyPSWOMAQ75Xr9ddWHul+v//hKjibFuQF9AFzaEwNbW5HxDsQj8gvdG/5d6mt66SfaY+UWkKldM4vRiZ1w11WlyxRJn5yZNTeOxIYU4WLrDtvlBklCMgB7oF0QfiqahauOEo6m5Di2Ex Generated-by-Nova" $vm2 = Add-AzureRmVMNetworkInterface -VM $vm2 -Id $nic2.Id
Teď jdeme na to co je odlišné. Nejprve načteme storage account a připravíme si URI disku pro tuto novou VM (ne šablony, ale disku nové VM). To je zatím stejné.
$storageAcc = Get-AzureRmStorageAccount -ResourceGroupName test -AccountName tomastore $osDiskUri = $storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds/vm2.vhd"
Nicméně teď místo existujícího Azure image (jako jsme dělali s Ubuntu) pošleme VM na náš template VHD soubor.
$imageUri = "https://tomastore.blob.core.windows.net/system/Microsoft.Compute/Images/templates/template-osDisk.24210b07-2824-4e87-a37e-a4439b2f28df.vhd" $vm2 = Set-AzureRmVMOSDisk -VM $vm2 -Name vm2 -VhdUri $osDiskUri -CreateOption fromImage -SourceImageUri $imageUri -Linux
Hotovo, vytvořte VM.
New-AzureRmVM -ResourceGroupName test -Location westeurope -VM $vm2
Připojte se na veřejné adrese na portu 3000. Pokud je vše správně, naše webová VM funguje !
Dnes jsme si zmrazili image, kterou jsme ručně připravili. Vzhledem k tomu, jak jednoduchá ta příprava byla, je to docela kostrabaté. Co kdybychom raději startovali čistý Ubuntu image a nakopírování web serveru a spuštění této služby automatizovali? Bude to flexibilnější, ve finále jednodušší, rychlejší a ušetříme placené místo v úložišti.
Příště se podíváme na VM Extensions a uděláme to!
Chcete pomoci s návrhem on-premise řešení IaaS postaveným na Azure Pack/Stack, OpenStack nebo VMware? Potřebujete poradit s migrací aplikací a nasazením v Azure cloudu? HPE má certifikované Microsoft architekty a konzultanty a můžete také využít plně konvergovaných systémů pro vaše on-premise potřeby.