Image katalog pro vaše VM v Azure

Vytvořit si vlastní image pro VM v Azure je jednoduché, ale jak si v tom udělat pořádek a distribuovat diskové obrazy do všech vašich regionů a sdílet je v rámci celého tenantu nebo dokonce i mimo něj? Na to se dnes podíváme s Shared Image Gallery v Azure.

Managed Image

Postup vytvoření custom image z výchozího obrazu v Azure je například tento:

  1. Vytvoříte si VM s požadovaným OS
  2. Nainstalujete co potřebujete
  3. Provedete generalizaci OS (sysprep ve Windows a waagent v Linuxu), tedy odmazání user-specific věcí, unikátních identifikátorů, zkrátka přípravu na to, že při vytváření VM z tohoto obrazu se nově vytvoří uživatelský prostor (dle zadání v průvodci), vygeneruje nové ID stroje a tak podobně.
  4. Vypněte a v GUI klikněte na Capture

V mém případě tohle už mám připraveno, ale je tu pár potíží:

  • Jak efektivně nasdílet můj image do jiné subskripce? Nebo dokonce do jiného tenantu?
  • Jak efektivně distribuovat tento image do dalších regionů, které používám?
  • Jak se v tom vyznat, například seskupovat různé image podle nějakých kritérií?
  • Jak image verzovat, přidávat nové varianty, ale moci zachovávat předchozí?

Shared Image Gallery

Řešením zmíněných nedostatků je Shared Image Galery. Ta umožňuje sdílení napříč subskripcemi (a dokonce je možné nasdílet přes tenanty díky RBAC nebo přes kompletní sdílení do celého jiného tenantu aplikační registrací), seskupování, verzování a klonování do dalších regionů.

Vytvoříme novou galerii.

Přidejme novou definici.

Stejně jako u public Azure obrazů je součástí identifikace image jeho publisher, offer a SKU. Zvolme si jako publisher corpLinuxTeam, tedy Linuxáři v mé IT organizaci. Offer je nginx a SKU jeho konkrétní varianta, například nginx na Ubuntu 16.04 a k tomu můžeme nabízet třeba nginx na RHEL jako další SKU. Vedle toho bude corpLinuxTeam nabízet třeba offer Apache2, Tomacat apod. corpWindowsTeam se bude soustředit na přípravu Windows obrazů s předinstalovaným korporátním software pro zabezpečení a monitoring.

Pro svůj obraz definuji řetězec verze, v mém případě řekněme 1.0.0. Vybírám si hlavní region a zdrojový obraz (jde o můj Managed Image, který jsem si připravil dříve). U každého obrazu je kromě jeho verze také k dispozici tag latest. Pokud uživatel při vybírání image neuvede přesnou verzi, použije se latest. Takhle se chovají i public image, takže pokud zakládáte svůj Ubuntu, RHEL nebo Windows stroj jen v GUI, vyberete si třeba Windows Server 2019 a dostáváte latest (Microsoft asi tak jednou měsíčně přidává nové verze obrazů, které už obsahují poslední patche). Pokud z nějakého důvodu nechcete tento obraz dát do latest tagu, můžete ho vyjmout (například pracujete na nové generaci image 2.x.x, ale ještě není zralá pro nezkušené uživatale, kterým chcete pod latest dávat nejnovější 1.x.x větev).

Další otázkou je replikace. By default mám jednu zónově redundantní repliku v primárním regionu, tedy v mém případě West Europe. Mohu v něm mít replik víc - to je pro případ, že image je v mé firmě extrémně oblíben a používá se pro sestavování výpočetních clusterů o stovkách VM najednou. Vícero uložení rozloží zátěž na storage a urychlý sestavování takového clusteru. Co bude pro mě ale důležitější je přidání repliky do dalších regionů, které používám - v mém případě North Europe.

K obrazu mohu přidat nějaké další popisky nebo odkazy.

Nakonec můžeme ještě indikovat nějaká doporučení pro náš image. Nic z toho nebude vynuceno, ale bude zobrazeno jako doporučení (a podle vaší interní politiky může vést třeba k odmítnutí interní podpory, pokud není následováno). Pokud máte image s náročnou žravou aplikací a víte, že pokud se pustí na 1-corové mašině s minimem paměti a HDD disku nebude to vůbec dobré, můžete tady doporučit nějaké rozumné konfigurace.

Všechno je připraveno, image je v katalogu.

Kdo bude mít k image přístup? Všimněte si, že na záložce celé galerie, ale i konkrétního image a dokonce specifické verze najdete obvyklý Access control (IAM). Tam můžete řídit kdo má možnost co použít. Pro jednoduchost bych na začátek rozhodně doporučoval přístupy řešit na úrovni celé galerie, ať se v tom neztratíte. Toto řešení funguje v rámci vašeho tenantu. Pokud potřebujete zpřístupnit obraz i do jiného tenantu (například aplikační firma dodávající software potřebuje nabídnout image pro specifické zákazníky privátně a ne běžnou public cestou v marketplace), tak i to je možné: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/share-images-across-tenants

Přidal jsem další verzi image.

Jak vypadá vytváření VM když kliknu na Create VM? Dialog je stejný jako vždy.

Když se podívám jaké obrazy mám k dispozici, uvidím tři zdroje - marketplace, moje Managed Images a Shared Image Galery.

Výborně. A kolik to všechno vlastně stojí? Služba jako taková je zdarma, ale platíte za storage a přenosy dat. Stejně jako běžný Managed Image platíte jeho uložení, což je poplatek jako Snapshot u Managed Disk, tedy pokud bude uložen na HDD v ZRS režimu, platíte u něj 0,05 USD za GB a to pouze z použitého místa (skutečná velikost, ne provisionovaná). Druhý náklad je za odchozí data, pokud se rozhodnete image replikovat ještě do dalších regionů.

A co takhle pravidelné vytváření imagů nějak automatizovat? Dobrý nápad - příště se společně podíváme na Azure Image Builder.



GitHub Codespaces - vývojářské prostředí od stroje po knihovny a kompilátor, které naběhne za 15 vteřin Compute
Microsoft Dev Box - virtuální pecko pro vývojáře a kdy použít vs. GitHub Codespaces, Windows365 nebo Azure Virtual Desktop Compute
ARM64 v Azure a jak používat s Kubernetes, Terraform a GitHub Actions a multi-arch image Compute
On-demand capacity reservation vs. reserved instances v Azure - kdy co a proč nejčastěji oboje Compute
Confidential Computing - zabezpečení dat při jejich používání, kdy ani root systému nemá šanci je rozlousknout Compute