Hlavní navigace

Uyuni aneb solnou plání configuration managementu

20. 4. 2021
Doba čtení: 13 minut

Sdílet

 Autor: Uyuni
Uyuni je nástroj na konfiguraci a správu infrastruktury, který vznikl v roce 2018 jako fork Spacewalku. Nabízí správu softwarových kanálů, plánování a následnou distribuci aktualizací a celkovou správu balíků na nich.

Za možná trochu tajemným názvem Uyuni (vyslovuje se jako [uju:ˈni]) se skrývá nástroj na konfiguraci a správu infrastruktury, který vznikl v roce 2018 jako fork Spacewalku. Nyní má za sebou již více než dva roky nezávislého vývoje, zásadní část jeho kódu byla přepsána do Pythonu 3, jako na klíčovou komponentu spoléhá na SaltStack a jde o upstream pro SUSE Manager.

Pokud jste o Uyuni nebo Spacewalku dosud neslyšeli (a spojení „konfigurace infrastruktury“ je přeci jen značně obecné), jedná se v obou případech o software, jehož pravděpodobně nejčastějším použitím je správa softwarových kanálů (obsahujících repozitáře), plánování a následná distribuce updatů a patchů na zaregistrované klienty a celková správa balíků na nich.

Pokud klonování repozitářů zní jako relativně triviální úloha, sluší se dodat, že Spacewalk a Uyuni zmůžou víc, mnohem víc! Je možné provádět audity systémů, distribuovat na ně konfigurační soubory, autoinstalaci a v případě Uyuni např. i vytvářet kiwi image, pracovat s kontejnery nebo aplikovat Salt formule. Jaká je historie projektu? Jaká je jeho architektura? K čemu se dá v současnosti použít? Jak vypadá komunita kolem projektu?

Historie

Historie Uyuni je spjata s open-source projektem Spacewalk z dílny Red Hatu. Ten v první verzi spatřil světlo světa už v roce 2008 a stal se upstreamem pro vícero odvozených aplikací. Z nejvýznamnějších lze zmínit Red Hat Sattelite (do verze 5 včetně) a SUSE Manager, se kterým je právě Uyuni úzce propojené. Zatímco vývoj Spacewalku byl postupně utlumen (což bylo jedním z impulzů pro vytvoření forku) a posléze na jaře 2020 ukončen, vývoj následovníka v podobě Uyuni je naopak poměrně dynamický. Kam tedy projekt směřuje a na čem je postaven?

Pod kapotou

Vlastně už samotným názvem Uyuni odkazuje na klíčový prvek své architektury, kterým je SaltStack. (Salar de Uyuni je solnou plání v Bolívii, kde se natáčela jedna z bondovek: Quantum of Solace.) Uyuni používá shodně se Spacewalkem architekturu na bázi server-client – volitelně rozšiřitelnou o použití proxy (server-proxy-client) primárně z důvodu lepšího škálování. SaltStack použitý v Uyuni tuto architekturu kopíruje, na serveru je tak provozován salt-master, na klientech typicky salt-minion a v případě použití proxy také  salt-broker.

Pozor, neznamená to ale, že by Salt zcela nahradil předchozí koncepci Spacewalku (v terminologii Uyuni tzv. tradiční stack). Uyuni je stále možné používat tak, jak tomu bylo dříve se Spacewalkem. Z dalších klíčových komponent Uyuni používá kromě SaltStacku např. Cobbler a jako databázový backend PostgreSQL. Instalace každé verze Uyuni je v současnosti spjatá s konkrétní verzí openSUSE Leap, i když probíhají např. snahy o kontejnerizaci Uyuni. Projekt je v tomto směru otevřený možnostem, jak už to z jeho open source povahy vyplývá. Poslední verze Uyuni 2021.02 (vydání probíhají ideálně na měsíční bázi, proto verzování ve tvaru rok.měsíc) tak staví na openSUSE Leap 15.2.

Ochutnávka vlastností

Z hlediska registrace a správy klientů je možné použít dva různé přístupy: jak tradiční (viz výše), tak pomocí SaltStacku. Ve druhém případě pak komunikace mezi Uyuni serverem a klientem probíhá pomocí salt-minionu (služba běžící na klientovi), nebo přes salt-ssh  – clientless přístup obdobný tomu, jak pracuje např. Ansible.

Proč to zmiňuji v sekci týkající se vlastností? Platí, že podporované vlastnosti jsou přímo poplatné tomu, jak je systém zaregistrován. A zatímco u Saltem spravovaných klientů se dá počítat s širokou škálou nově přidávaných vlastností, u tradičních jde spíše o zachování funkcí poplatných původnímu Spacewalku. Jakým směrem tedy vykročilo Uyuni?

Podpora distribucí

Uyuni je primárně vyvíjeno vývojáři společnosti SUSE, proto nepřekvapí, že mezi podporovanými distribucemi na straně klientů se nachází openSUSE Leap. Ani nepřekvapí podpora dalších na RPM založených distribucí, jako jsou různé verze CentOS (a v budoucnu i další příbuzné).

Záběr Uyuni – a tím výrazný rozdíl oproti Spacewalku – je ale širší, lze proto pracovat i s LTS verzemi Ubuntu (16.04, 18.04, 20.04) a ještě poměrně s vůní nového nátěru pak s Debianem 9 a 10. Je možné provozovat i enterprise distribuce jako jsou SLES a RHEL, nicméně ty pro plnohodnotné použití vyžadují samozřejmě předplatné. I ohledně podpory distribucí platí to, co už padlo předtím, Ubuntu a Debian je tak možné spravovat už jen pomocí SaltStacku.

Slané formule

Jedním z příjemných efektů použití SaltStacku je možnost použití tzv. Salt Formulas. Uyuni zpřístupňuje množství těchto formulí, byť jen některé z nich jsou zahrnuté ve výchozí instalaci. Pro jednoduchost se jedná o předpřipravené Salt staty, které po doplnění dílčí konfigurace ze strany uživatele (Uyuni tak činí přes jednoduché webové formuláře) umožní zpřístupnit určitou funkcionalitu nebo nastavit určitou službu na běžícím klientovi. To celé zní… poměrně krypticky, že? Pojďme se podívat na pár příkladů pro ilustraci.

Těmi mohou být např. Prometheus a Grafana, resp. formule pro jejich nainstalování a konfiguraci. Prometheus je v současnosti populární aplikace a databáze pro sbírání a archivaci metrik o monitorovaných systémech, Grafana pak neméně zajímavý nástroj pro jejich vizualizaci. Co je příjemné, v obou případech jde o open source. Abychom obě formule zpřístupnili pro v Uyuni zaregistrované systémy, je nejprve nutné je nainstalovat na straně Uyuni serveru:

zypper in prometheus-formula grafana-formula
zypper in prometheus-exporters-formulas # Pro nastavení exportéru metrik z daného systému

Chceme-li provést základní konfiguraci obou aplikací pomocí Uyuni, stačí v systémovém profilu klienta (systému, kde mají tyto služby běžet) vybrat obě formule, viz screenshot níže.


Výběr z dostupných formulí v systémovém profilu zvoleného klienta

Ve webových formulářích pro každou formuli nejprve vyplníme údaje pro základní nastavení obou služeb (a exportéru, který zpřístupňuje metriky systému, kde běží) a poté provedeme tzv. highstate, čímž jsou změny aplikovány. A to je pro základní zprovoznění služby celé, výsledkem je systém s běžícím Prometheem a Grafanou.


Konfigurace formule pro Grafanu pomocí webUI


Běžící Grafana s nainstalovaným dashboardem pro Uyuni klienty

Pokud narazíte na problém během vykonávání highstate z důvodu nedostupnosti GPG klíčů při instalaci některého z balíků pro Grafanu a Promethea, je možné tuto kontrolu dočasně deaktivovat (nebo provést import ručně, popř. ho lze zahrnout do bootstrap skriptu) na úrovni kanálu Uyuni Client Tools for openSUSE Leap 15.2 (x86_64) . Jde o výchozí chování, kdy těmto klíčům není ve výchozím stavu důvěřováno.

# Dodatečný import GPG klíče
rpm --import https://download.opensuse.org/repositories/systemsmanagement:/Uyuni:/Stable:/openSUSE_Leap_15-Uyuni-Client-Tools/openSUSE_Leap_15.0/repodata/repomd.xml.key

Stejně tak může být, v závislosti na konfiguraci klienta, kde chcete Grafanu a Promethea provozovat, nutné otevřít jim poplatné porty:

# Nastavení za předpokladu použití firewalld
firewall-cmd --zone=public --permanent --add-port=3000/tcp
firewall-cmd --zone=public --permanent --add-port=9090/tcp
firewall-cmd --reload

Pro úplnost, Uyuni umožňuje pracovat se sběrem dat pomocí Promethea poměrně komplexně, lze tak monitorovat i Uyuni server jako takový. Stejně tak existuje dashboard pro Grafanu zpřístupňující právě tyto metriky.

Výčet dostupných formulí se stále rozrůstá, stačí jen letmo nahlédnout do útrob repozitářů přes zypper se formula a dostaneme se k formulím pro nastavení služeb jako jsou namátkou třeba dhcp, dns (pomocí bindu) a mnoha dalších.

Content Lifecycle Management

Vlastnost Uyuni zaměřená na klasickou situaci v organizacích potřebujících pracovat s více prostředími (vývojářským, testovacím, produkčním apod.) a těm poplatnými verzemi balíků. Uyuni prostřednictvím Content Lifecycle Managementu umožňuje vytvořit tzv. projekty, do kterých lze na základě filtrů (např. pomocí data nebo verze) zahrnout jen určité balíky.

Po sestavení daného projektu a přiřazení vytvořených softwarových kanálů (a jejich repozitářů) v profilu klienta jsou ve výsledku tak spravovanému systému poskytovány přesně ty balíky, které chceme. Content Lifecycle Management je v Uyuni mimochodem i cestou, jak pracovat s moduly z AppStream repozitářů, které používají např. RHEL a CentOS.

Virtualizace, cloud, KIWI…

Uyuni umí také pracovat se systémy určenými pro roli virtualizačních hostů (podporovány jsou Xen a KVM) přes libvirtd. Stejně tak umožňuje vzdáleně se připojit (pomocí funkcionality tzv. Virtual Host Managers) do veřejných cloudů včetně Amazon Web Services, Microsoft Azure, Google Cloud Engine (a dalších) a pracovat s klienty, které jsou tam hostované. Další zajímavou funkcionalitou je podpora sestavení obrazů operačního systému pomocí KIWI, kde Uyuni zvládne jednoduše připravit, jak buildhost, který se samotné sestavení provede, tak řeší následnou správu hotových image a jejich deployment.

Šlo by pokračovat, uvedený výčet je pouze ilustrativní ochutnávkou, celkové spektrum podporovaných funkcí Uyuni je pestré.

První kroky

Jak na instalaci Uyuni? Předně je nutné podotknout, že Uyuni není úplně nenáročným případem software. Minimální požadavky v podobě 8 GiB RAM, 4 jádrového procesoru a 100 GiB diskového prostoru (hodnota je silně proměnlivá v závislosti na tom, které kanály a pro které operační systému budete třeba synchronizovat) je vhodné nepodcenit.

Pro základní testovací použití a drobné experimentování s managementem openSUSE Leap 15.2 (čili s jeho synchronizovanými kanály) doporučuji vyhradit alespoň 100 GiB pro mountpoint /var/spacewalk (zde se nachází zrcadlené balíky), 50 GiB pro /var/lib/pgsql, 40 GiB pro kořenový oddíl a rovněž dostatečně dimenzovat velikost swapu.

Instalace

Po instalaci podkladového operačního systému, kterým v případě poslední verze Uyuni – 2021.02 – je právě openSUSE Leap 15.2 (v x86–64 verzi) je nutné doplnit repozitáře obsahující Uyuni samotné, provést refresh dat o repozitářích a provést instalaci příslušného patternu. Ten zajistí, že budou nainstalovány všechny nezbytné balíky pro následnou konfiguraci a spuštění Uyuni jako takového. (V průběhu můžete být vyzváni k importu GPG klíče repozitáře.) Před započetím instalace silně doporučuji si nejprve projít oficiální dokumentaci.

zypper ar https://download.opensuse.org/repositories/systemsmanagement:/Uyuni:/Stable/images/repo/Uyuni-Server-POOL-x86_64-Media1/ uyuni-server-stable
zypper ref
zypper in patterns-uyuni_server

Samotné prvotní nastavení a spuštění Uyuni lze provést pomocí nástroje YaST2. Zásadně důležité v této fázi je si ověřit, že systém, na kterém Uyuni server budeme provozovat, má přiřazenou FQDN. Je to klíčová prerekvizita pro jeho korektní funkci. Povedlo se? Pak nejsnažší cestou, jak pokračovat, je spuštění příkazu yast2 susemanager_setup (ano, nejde o překlep), nebo případně pouze yast2 a dohledání Uyuni v jeho menu (Network Services > Uyuni Setup) a vyplnění otázek průvodce.


Dokončená instalace pomocí nástroje YaST2

Asi není třeba připomínat, že v rámci průvodce vyplněné heslo pro TLS a další, zvolené pro přístup do databáze, je vhodné si uložit na bezpečné místo. Pakliže všechno proběhlo korektně (nastavení by mělo trvat v závislosti na použitém hardware rámcově jednotky minut), budete vyzváni k přístupu k webovému rozhraní dostupnému právě na FQDN použitého serveru. V něm zadáme informace o prvním uživateli, skrze kterého budete Uyuni chtít administrovat a voilà… Můžeme se vrhnout do prozkoumávání jeho tajů.


Vytvoření uživatele a organizace na čerstvé instalaci Uyuni

Synchronizace kanálů

Jako pro uživatele Uyuni je pro vás primární cestou, jak Uyuni zpřístupnit možnost správy některé distribuce nástroj spacewalk-common-channels. Pomocí tohoto příkazu Uyuni získá možnost synchronizovat a dále pracovat s kanály, které obsahují už konkrétní repozitáře jednotlivých distribucí.

Způsob práce s kanály je ostatně stejný, jako tomu je už ve Spacewalku. Pozor, pro korektní funkci je vždy nutné nejprve přidat tzv. base channel a až teprve poté další kanály, které na něm závisí (child channels). S přepínačem spacewalk-common-channels -l nám pak tato utilita zobrazí všechny dostupné kanály.

Pokud bychom například chtěli pracovat s kanály pro openSUSE Leap 15.2, přidali bychom je pomocí:

spacewalk-common-channels opensuse_leap15_2

A až poté další:

spacewalk-common-channels opensuse_leap15_2-updates
spacewalk-common-channels opensuse_leap15_2-uyuni-client

Pokusíme-li se znovu přidat již existující kanál, bude naše snaha bude završena hláškou:

# Base channel 'openSUSE Leap 15.2 (x86_64)' - exists

Naopak v případě, že base channel stále chybí, nám bude vrácena následující chyba:

# ERROR: opensuse_leap15_2-x86_64 could not be found at the server
# ERROR: opensuse_leap15_2-uyuni-client-x86_64: redstone.xmlrpc.XmlRpcFault: unhandled internal exception: User 1 does not have access to channel opensuse_leap15_2-x86_64 or the channel does not exist

Povedlo se? Pokračujme tedy v experimentování s kanály pro openSUSE Leap 15.2. Než přistoupíme k dalšímu kroku, kterým je jejich samotná synchronizace (předchozí příkaz kanály pouze zpřístupní), je důležité si uvědomit, že se v daném případě (a obdobně i u dalších distribucí) jedná o desítky tisíc balíků, které budou nejen staženy, ale informace o nich budou rovněž importovány do databáze PostgreSQL. Jen u základního repozitáře pro Leap jde o více než 38 tisíc balíků.


Softwarové kanály obsahují repozitáře pro zvolenou distribuci

I přes masivní optimalizaci synchronizace, ke které došlo v Uyuni v posledním roce (a v určitých případech došlo i k několikanásobnému zrychlení), se stále jedná o operaci, která v lepším případě potrvá desítky minut. Je tak nutné počítat s tím, že provedení následujících příkazů si nějaký čas vyžádá:

spacewalk-repo-sync -c opensuse_leap15_2-x86_64
spacewalk-repo-sync -c opensuse_leap15_2-x86_64-updates
spacewalk-repo-sync -c opensuse_leap15_2-uyuni-client-x86_64

Několik poznámek na závěr. Určitě jste si všimli použití kanálu opensuse_leap15_2-uyuni-client, obdobné kanály s ( *-uyuni-client) v názvu jsou dostupné pro každou podporovanou distribuci, přičemž balíky, které jsou nutné pro bootstrap (registraci) jedním z podporovaných způsobů, ať již se jedná o tradičního klienta, nebo klienta managovaného přes Salt (pak jde zejména o zabezpečení o salt-minionu  v patřičné verzi).

Spuštěním spacewalk-common-channels -l | grep uyuni-client získáte poměrně přesnou představu o distribucích, se kterými aktuálně Uyuni může spolehlivě pracovat. A poslední informace zde: zatímco přidání kanálů skrze spacewalk-common-channels je nutné provést z terminálu, jejich synchronizaci lze spustit i přes webUI.

Bootstrap klientů

Pro bootstrap, nebo pokud chcete pro registraci klientů, které budete chtít pomocí Uyuni administrovat, je nutné vytvořit příslušné aktivační klíče. Nejde o nic jiného než o identifikátor, určující, které softwarové kanály se mají systému přiřadit. V našem případě vybereme openSUSE Leap 15.2 (x86_64) jako base channel a následující jako child channels:

- openSUSE Leap 15.2 Updates (x86_64)
- Uyuni Client Tools for openSUSE Leap 15.2 (x86_64)

V minulosti bylo nutné ručně vytvořit bootstrap repozitář obsahující zmíněné balíky nezbytné pro bootstrap. Repozitář samotný je nutný i nadále, nicméně už je vytvářen automaticky. Pokud bychom ho přesto chtěli vytvořit ručně, či vynutit jeho znovuvytvoření, lze to provést pomocí příkazu mgr-create-boostrap-repo. Pokud se vše předešlé zdařilo, už nám nic nebrání provést bootstrap zvoleného klienta. Nadále platí, že volba metody, kterou bude bootstrap klienta proveden, následně determinuje i dostupnou funkcionalitu pro jeho administraci.


Příprava aktivačního klíče pro bootstrap klienta

Patrně nejpřímočařejší volbou (ale nikoliv jedinou, možné je i použití skriptu) pro bootstrap klienta je skrze webUI Uyuni serveru (dostupné pod menu System > Bootstrap), kde vyplníme požadované údaje (URL klienta, aktivační klíč, metoda kontaktu apod.). Platí, že tradiční klient může být zaregistrován pouze pomocí skriptu, klient používajícísalt-minion pomocí webUI (nebo skriptu) a nakonec klient komunikující přessalt-ssh pouze přes webUI Uyuni serveru.

Provádíme-li bootstrap klienta jako salt-minionu, dojde zároveň k přijetí tohoto klíče (dostupné v menu Salt > Keys); stále platí, že Uyuni jako komponentu obsahuje plnohodnotný salt-master. Zdařilo se a vidíte zelené pole stvrzující, že bootstrap byl úspěšně proveden? Výborně, můžete se vrhnout na samotnou správu a možnosti, které Uyuni poskytuje.


Boostrap klienta pomocí webUI

V neposlední řadě

Na předchozích řádcích byl popsán pravděpodobně typický sled kroků, jak lze pracovat s Uyuni, ale rozhodně nejde o jediný možný způsob, jak jeho administraci provádět. Jakkoliv je webUI zjevným a jasným způsobem, dostupné jsou i jiné cesty.

Jednou z nich je prostřednictvím utility s dlouhou historií (spacecmd ), jak už název odkazující na Spacewalk napovídá, a Uyuni má rovněž komplexní XML-RPC API, takže integraci s dalšími nástroji, či uživatelskými skripty, se meze rozhodně nekladou.

Tip do clanku - special Computerworld

Komunita a kam dál

Vzhledem k tomu, že Uyuni nesbírá žádná data o uživatelích, je těžké odhadnout, jaká je velikost jeho uživatelské základny. Většina současného vývoje probíhá ze strany vývojářů firmy SUSE, ale zapojili se již i externí přispěvatelé, byť se zatím jedná spíše o jednotky případů. Jistě ale platí, že každý nový uživatel, přispěvatel, stejně jako nahlášený bug nebo provedený překlad je vítán!

Uyuni má více cest pro komunikaci, ať již je to prostřednictvím klasických mailing listů, instant messagingu přes gitter. Možná ale úplně nejlepší cestou, jak si udělat představu o Uyuni a dění okolo něj, jsou Uyuni Community Hours (konají se každý poslední pátek v měsíci), k posledním je k dispozici záznam na YouTube kanálu Uyuni.

Odkazy

Autor článku

Nadšenec do open source, Pythonu, Linuxu a nějakého toho domácího bastlení. Živí se jako QA inženýr v SUSE.