- 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
V předchozím díle jsme vyšli ze základního Ubuntu image, nainstalovali do něj aplikaci, zmrazili ho jako nový VHD soubor, z kterého jsme vytvořili šablonu. Docela komplikované. Co kdybychom to zkusili jinak – automaticky?
Proč automat místo VHD šablony
Postup v předchozím článku byl klasický a celkem nevhodný do modernějšího způsobu řízení IT. Zmrazení image nemusí být špatně (viz dále), ale ruční instalace není ideální.
První potíž spočívá v tom, že instalace aplikace se může měnit docela často. Nové verze aplikace, knihoven, návazností. Můžeme tyto změny aplikovat do běžící VM, ale to často vede ke vzniku “configuration drift”, tedy po pár iteracích už vlastně nevíme kde jaká verze čeho je a navíc pokud máme víc instancí, chyba operátora snadno způsobí, že se ne ve všem shodují. Určitě pomůže nějaký configuration management nástroj, jako je Chef, Ansible, Puppet či PowerShell DCS. Nicméně ještě čistší a méně rizikové je nasadit phoenix servery. Tedy samotnou VM nebudeme modifikovat nikdy. Pokud chceme nainstalovat novou verzi čehokoli, raději vytvoříme novou VM od začátku. Při automatizovaném procesu získáte nejpřesnější výsledky, je to jednoduché, stabilní, opakovatelné a předvídatelné. Varianta nastartovat prázdnou VM a nainstalovat vše při prvním spuštění (klidně s využitím Chef či Ansible) je jeden z nejlepších způsobů jak implementovat phoenix servery.
Mít hotové image nemusí být špatně, zejména při nasazení strategie immutable infrastruktury. “Dokonfigurace” prázdné VM může trvat dost dlouho, klidně i 30 minut, což možná není dost rychlé a efektivní třeba pro nasazení nějakého automatického škálování (počet balancovaných VM aplikace se průběžně mění). Můžeme tedy automaticky vyrobit a zmrazit VM (vždy znovu pro každou verzi aplikace nebo aplikaci, potud je to stejné jak v předchozím odstavci) a pak používat šablonu.
V obou případech je zásadní automatizace. Dnes si ukážeme jak na to.
VM Extension a skript po startu
Dnes nebudeme používat nic zvlášť sofistikovaného typu Chef či Ansible. Bude to primitivní Bash skript.
VM Extensions zahrnuje různé možnosti, ale nás teď bude zajímat spuštění skriptu (funguje to pro Linux i pro Windows). První co toto rozšíření udělá je, že nakopíruje soubory, které mu řekneme z Azure Blob storage do vnitřku VM a následně spustí nějaký příkaz (třeba skript).
Připravíme si soubor web (binárka jednoduchého web serveru, najdete ji na https://github.com/tkubica12/web) a dále soubor web.service. To je definice služby pro Systemd, tedy tímto říkáme, že se má web server spouštět automaticky po startu systému. Takhle vypadá:
[Unit] Description=web service After=network [Service] ExecStart=/opt/web [Install] WantedBy=multi-user.target
Třetím souborem bude Bash skript, který provede, co potřebujeme. Tedy z lokálního adresáře (tam najde všechny ostatní soubory, které necháme VM Extension zkopírovat) nakopíruje soubory na správná místa a nastartuje web server.
touch /opt/stalejsemtu cp web /opt/web cp web.service /etc/systemd/system/web.service chmod +x /opt/web systemctl enable web.service systemctl start web.service
Máme je připraveny, teď si jen vyberte nějaký svůj storage account, založte si v něm nějaký kontejner a soubory nahrajte.
Set-AzureRmCurrentStorageAccount -Name mojestorage -ResourceGroupName storage Set-AzureStorageBlobContent -Container provision -File .\provision.sh Set-AzureStorageBlobContent -Container provision -File .\web.service Set-AzureStorageBlobContent -Container provision -File .\web
Vyzkoušíme
Zajímavé je, že VM Extension nemusíme aplikovat jen při vytváření VM, ale klidně i později. Vytvořte Ubuntu 16.04 VM například podle návodu v druhém díle seriálu.
Načteme si údaje o VM.
$vm = Get-AzureRmVM -ResourceGroupName test -Name vm1
Načteme si URI tří souborů, které jsme prve nahráli. Najdete to i v GUI, ale takhle to bude rychlejší.
$scriptUri = (Get-AzureStorageBlob -Blob provision.sh -Container provision).ICloudBlob.uri.AbsoluteUri $appUri = (Get-AzureStorageBlob -Blob web -Container provision).ICloudBlob.uri.AbsoluteUri $systemdUri = (Get-AzureStorageBlob -Blob web.service -Container provision).ICloudBlob.uri.AbsoluteUri
Teď si připravíme VM Extension, zejména přidáme informace o požadovaných souborech (ty nám extension nakopíruje do VM) a také příkazu, který se má spustit (v našem přípodě vyvoláme náš bash skript).
$PrivateConfiguration = '{"storageAccountName": "mojestorage","storageAccountKey":"3WisiC1mfVhNlWqkH9wVDPSqQc09T10F24HlENfa0oSS+cNwnin8w5qKUBpasDpQs2EXrPt88DXa5Cx7xY/fag=="}' $PublicConfiguration = '{"fileUris":["' + $scriptUri + '", "' + $appUri + '", "' + $systemdUri + '"], "commandToExecute": "sh provision.sh" }' $ExtensionName = 'CustomScript' $Publisher = 'Microsoft.Azure.Extensions' $Version = '2.0'
Přiřadíme a spustíme extension.
Set-AzureRmVMExtension -Name $ExtensionName -ExtensionType $ExtensionName -VMName vm1 -Publisher $Publisher -TypeHandlerVersion $Version -ProtectedSettingString $PrivateConfiguration -SettingString $PublicConfiguration -ResourceGroupName test -Location westeurope
Podívejte se do portálu, uvidíte tam jak se postupně mění stav této Extension.
Připojte se na veřejnou IP této VM na portu 3000 – naše webová aplikace je nainstalovaná a běží!
Dnes jsme automatizovali vnitřek VM a to je velmi důležitý mechanismus. Bude se nám hodit například až si vytvoříme Scale Set, tedy load-balancované VM, které se samy přidávají a ubírají podle zátěže. Tam ale ještě nejsme – příště se podíváme na Availability Set a vysvětlíme si, že Azure vám nedá SLA na jednotlivou VM, ale pouze na skupinu.
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.