Jak používat loutkové moduly pro automatizaci IT infrastruktury?



Praktický loutkový výukový program, který hovoří o psaní loutkového modulu a použití manifestu k automatizaci a údržbě IT infrastruktury organizace.

Dříve správci systému používali ke spuštění svých serverů skripty prostředí a tato metoda měla nulovou škálovatelnost. Neustálým úkolem je neustále upravovat skripty pro stovky nebo tisíce neustále se měnících serverů a jejich systémových konfigurací.

V tomto článku o loutkové moduly a manifesty pojďme se podívat, jak bychom mohli použít loutkové moduly pro automatizaci nastavení serveru, instalaci programu a správu systému.





Tento blog se bude zabývat následujícími tématy:

Úvod do loutkového programování

Loutka je jedním z populárně používaných nástrojů DevOps, který se široce používá pro správu konfigurace. Používá se k uskutečnění konzistence v infrastruktuře. Puppet může definovat infrastrukturu jako kód, spravovat více serverů a vynutit konfiguraci systému, což pomáhá při automatizaci procesu správy infrastruktury.



Loutka mávlastní konfigurační jazyk, Loutkové DSL . Stejně jako u jiných programů DevOps, Puppet automatizuje změny a eliminuje manuální změny prováděné skriptem. Loutka však není jen dalším jazykem prostředí, ani čistým programovacím jazykem, jako je PHP. Místo toho Puppet používána deklarativní přístup založený na modelu k automatizaci IT. To umožňuje Puppet definovat infrastrukturu jako kód a vynutit konfiguraci systému pomocí programů.

Než se pustíme do ukázky, podívejme se na několik základních aspektů loutkového programování.

vyhledávací transformace v příkladu informatica

Klíčové pojmy v loutkovém programování

Projevy

Loutkový program se nazývá manifest a má název souboru s .pp rozšíření. Loutkovým výchozím hlavním manifestem je /etc/puppet/manifests/site.pp . (To definujeglobální konfigurace systému, jako je konfigurace LDAP, servery DNS nebo jiné konfigurace, které platí pro každý uzel).



Třídy

V rámci těchto manifestů se nazývají bloky kódu třídy ostatní moduly mohou volat. Třídy konfigurují velké nebo střední bloky funkcí, jako jsou všechny balíčky, konfigurační soubory a služby potřebné ke spuštění aplikace. Třídy usnadňují opětovné použití loutkového kódu a zlepšují čitelnost.

Zdroje

Loutkový kód je tvořen většinou deklaracemi zdrojů. A zdroj popisuje konkrétní prvek o požadovaném stavu systému. Může například zahrnovat, že by měl existovat konkrétní soubor nebo by měl být nainstalován balíček.

Loutkové moduly

Až na hlavnísite.ppmanifest,ukládá manifestyv moduly .

Celý náš loutkový kód je uspořádán do modulů, které jsou základními stavebními kameny loutek, které můžeme znovu použít a sdílet. Každý modul spravuje konkrétní úlohu v infrastruktuře, jako je instalace a konfigurace softwaru.

Moduly obsahují loutkové třídy, definované typy, úkoly, plány úkolů, kapacity, typy prostředků a doplňky, například vlastní typy nebo fakta. Nainstalujte moduly do Loutkycesta modulu. Loutka načte veškerý obsah ze všech modulů v cestě modulu a zpřístupní tento kód pro použití.

Moduly - Loutkové programování - EdurekaPuppetlabs má předdefinované moduly, ze kterých je můžeme okamžitě stahovat PuppetForge . Můžete také vytvořit vlastní loutkový modul, který bude vyhovovat vašim požadavkům.

Pracovní postup loutkového programu

K popisu požadovaného stavu systému v souborech zvaných manifesty použijeme deklarativní jazyk Puppet. Manifesty popisují, jak byste měli konfigurovat síťové a operační systémy, jako jsou soubory, balíčky a služby.

Loutka se sestavuje do katalogy a použije každý katalog na odpovídající uzel, aby zajistil konfiguraci tuzel je správnýnapříč vaší infrastrukturou.

Demonstrace: Automatizace instalace Apache a MySQL

Tento článek o loutkových modulech je praktický, který by ukázal dva způsoby použití loutkového modulu a také vás naučí, jak na to automatizovat instalace serveru nakonfigurovaného s těmito dvěma moduly.

Nejprve se ujistěte, že máte připravenou infrastrukturu loutek, která zahrnuje server loutkového mistra a 2 loutkové agenty.

  • Loutkář: Ubuntu 18.04
  • Agent 1: Ubuntu 18.04
  • Agent 2:CentOS7

Zde je přehled toho, čeho v tomto praktickém programu dosáhneme:


Začněme tedy praktickým:

Vytvoření modulu od nuly

V tomto loutkovém modulu se budeme zabývat úkoly, jako je stahování balíčku Apache, konfigurace souborů a nastavení virtuálních hostitelů.

  • Z Puppet Master přejděte do adresáře modulu Puppet a vytvořte adresář Apache:
    cd / etc / puppet / modules sudo mkdir apache
  • Zevnitř adresáře apache vytvořte podadresáře: manifesty, šablony, soubory a příklady.
    cd apache sudo mkdir {manifesty, šablony, soubory, příklady}
  • Přejděte do adresáře manifestů:
    cd manifesty
  • Odtud modul rozdělíme do tříd na základě cílů dané části kódu.

init.pp -> stáhnout balíček Apache

params.pp -> definovat libovolné proměnné a parametry

config.pp -> pro správu všech konfiguračních souborů pro službu Apache.

vhosts.pp -> definovat virtuální hostitele.

Tento modul bude také využívat Hiera (vestavěný systém pro vyhledávání konfiguračních dat klíč-hodnota, který se používá k oddělení dat od dat loutkového kódu), ukládat proměnné pro každý uzel.

Krok 1: Stažení balíčku Apache

Vytvořte třídu init.pp

Nyní vytvořímeinit.ppsoubor pod adresářem manifestů k uložení balíčku Apache.
Jelikož máme 2 různé OS (ubuntu a CentOS7), které používají různé názvy balíčků pro Apache, budeme muset použít proměnnou$ apachename.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

třída apache {balíček {'apache': name => $ apachename, zajistit => přítomen,}}

balík prostředek umožňuje správu balíčku. Slouží k přidání, odebrání nebo zajištění přítomnosti balíčku.

Ve většině případů název zdroje (apache, výše) by měl být název spravovaného balíčku. Z důvodu různých konvencí pojmenovánínazýváme skutečné jméno balíčkus název odkaz. Tak název , volá po dosud nedefinované proměnné$ apachename.

zajistit reference zajišťuje, že balíček jesoučasnost, dárek.

Vytvořte soubor params.pp

Theparams.ppsoubor definuje potřebné proměnné. I když bychom mohli tyto proměnné definovat v rámciinit.ppsoubor, protože bude potřeba použít více proměnných mimo samotný typ prostředku pomocí aparams.ppsoubor umožňuje definovat proměnné v-lipříkazy a používají se ve více třídách.

Vytvořitparams.ppsoubor a následující kód.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

třída apache :: parametry {if $ :: osfamily == 'RedHat' {$ apachename = 'httpd'} elsif $ :: osfamily == 'Debian' {$ apachename = 'apache2'} else {selhání ('toto není podporovaná distribuce. ')}}

Mimo originál init.pptřídy, od každého názvu třídy je třeba odbočitapache. Tuto třídu nazýváme jako apache :: parametry . Název za dvojitým dvojtečkem by měl sdílet název se souborem. An-lipříkaz se používá k definování parametrů, vycházející z informací poskytnutých Faktor „Loutka má instalaci factoreru jako součást vlastní instalace. Zde Facter stáhne rodinu operačních systémů (osfamily), aby zjistil, zda ječervená čepiceneboZaložené na Debianu.

Když jsou parametry definovány, musíme zavolat params.pp soubor a parametry doinit.pp. K tomu je třeba přidat parametry za název třídy, ale před úvodní složenou závorku({).

Takžeinit.ppkteré jsme vytvořili dříve, by mělo vypadat asi takto:

třída apache ($ apachename = $ :: apache :: params :: apachename,) dědí :: apache :: params {balíček {'apache': name => $ apachename, zajistit => přítomný,}}

Řetězec hodnot $ :: apache :: params :: value řekne Loutce, aby vytáhla hodnoty z apache moduly, parametry třídy, následovaný názvem parametru. Fragment inherits :: apache :: params povoleno proinit.ppzdědit tyto hodnoty.

Krok 2: Správa konfiguračních souborů

Konfigurační soubor Apache se bude lišit v závislosti na tom, zda pracujete v systému založeném na Red Hat nebo Debian.

Na konci této ukázky najdete následující soubory závislostí:httpd.conf(Červená čepice),apache2.conf(Debian).

  • Zkopírujte obsah httpd.conf aapache2.confv samostatných souborech a uložit je do soubory adresářna / etc / puppetlabs / code / prostředí / produkce / moduly / apache / soubory .
  • Upravte oba soubory do deaktivovat udržet naživu. Budete muset přidat řádek KeepAlive vypnuto vhttpd.confsoubor. Pokud toto nastavení nechcete změnit, měli bychom do horní části každého přidat komentářsoubor:
    /etc/puppetlabs/code/environments/production/modules/apache/files/httpd.conf
# Tento soubor spravuje loutka

Přidejte tyto soubory do složkyinit.ppsoubor, takže Puppet bude znát umístění těchto souborů na uzlech hlavního serveru i agenta. K tomu používáme soubor zdroj.

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, ensure => file, source => $ confsource,}

Protože máme konfigurační soubory na dvou různých místech, dáme prostředku obecný název konfigurační soubor se souborem cesta definován jako parametr scestaatribut.

zajistit zajišťuje, že se jedná o soubor.

zdroj poskytuje umístění výše vytvořených souborů na loutkovém mistrovi.

Otevřiparams.ppsoubor.

Definujeme $ conffile a $ confsourceproměnné v rámci-liprohlášení:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/params.pp

if $ :: osfamily == 'RedHat' {... $ conffile = '/etc/httpd/conf/httpd.conf' $ confsource = 'puppet: ///modules/apache/httpd.conf'} elsif $: : osfamily == 'Debian' {... $ conffile = '/etc/apache2/apache2.conf' $ confsource = 'puppet: ///modules/apache/apache2.conf'} else {...

Musíme přidat parametry na začátekapachedeklarace třídy vinit.ppsoubor, podobný předchozímu příkladu.

Když se změní konfigurační soubor, musí se Apache restartovat. Abychom to automatizovali, můžeme použít prostředek službyv kombinaci s oznámit atribut, který vyvolá spuštění prostředku při každé změně konfiguračního souboru:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/init.pp

file {'configuration-file': path => $ conffile, ensure => file, source => $ confsource, notify => Service ['apache-service'],} service {'apache-service': name => $ apachename, hasrestart => true,}

servis prostředek používá již vytvořený parametr, který definoval název Apache v systémech Red Hat a Debian.
hasrestart atribut se používá ke spuštění restartu definované služby.

javascript zkontrolovat délku pole

Krok 3: Vytvořte soubory virtuálního hostitele

V závislosti na distribuci vašeho systému budou soubory virtuálního hostitele spravovány odlišně. Z tohoto důvodu vložíme kód pro virtuální hostitele do-liprohlášení podobné prohlášení použitému v dokumentuparams.pptřídy, ale obsahující skutečné loutkové zdroje.

  • Zevnitřapache / manifesty /adresář, vytvořte a otevřetevhosts.ppsoubor. Přidejte kostru-liprohlášení:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

třída apache :: vhosts {if $ :: osfamily == 'RedHat' {} elsif $ :: osfamily == 'Debian' {} else {}}

Umístění souboru virtuálního hostitele na našem serveru CentOS 7 je/etc/httpd/conf.d/vhost.conf . Musíte vytvořit soubor jako šablonu na loutkovém mistrovi. Totéž proveďte pro soubor virtuálních hostitelů Ubuntu, který je umístěn na/etc/apache2/sites-available/example.com.conf, nahrazujícíexample.coms FQDN serveru.

  • Přejděte na šablony soubor v apache modul a poté vytvořte dva soubory pro vaše virtuální hostitele:

Pro systémy Red Hat:
/etc/puppetlabs/code/environments/production/modules/apache/templates/vhosts-rh.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www // public_html / ErrorLog /var/www//logs/error.log CustomLog /var/www//logs/access.log kombinované

Pro systémy Debian:
/etc/puppet/modules/apache/templates/vhosts-deb.conf.erb

ServerAdmin ServerName ServerAlias ​​www. DocumentRoot / var / www / html // public_html / ErrorLog /var/www/html//logs/error.log CustomLog /var/www/html//logs/access.log kombinovanéVyžadovat vše uděleno

V těchto souborech používáme pouze dvě proměnné: adminemail a název serveru . Definujeme je na jednotlivých uzlech v rámcisite.ppsoubor.

  • Zpět navhosts.ppsoubor. Na vytvořené šablony lze nyní odkazovat v kódu:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

třída apache :: vhosts {if $ :: osfamily == 'RedHat' {soubor {'/etc/httpd/conf.d/vhost.conf': zajistit => soubor, obsah => šablona ('apache / vhosts-rh .conf.erb '),}} elsif $ :: osfamily ==' Debian '{soubor {' /etc/apache2/sites-available/$servername.conf ': zajistit => soubor, obsah => šablona (' apache /vhosts-deb.conf.erb '),}} else {fail (' Toto není podporovaná distribuce. ')}}

Obě distribuční rodiny volají dosouborzdroj a převzít název umístění virtuálního hostitele v příslušné distribuci. Pro Debian to znamená ještě jednou odkaz na$ název serveruhodnota. Theobsahatribut zavolá příslušné šablony.

  • Oba soubory virtuálního hostitele odkazují na dva adresáře. Ve výchozím nastavení nejsou v systémech. Můžeme je vytvořit pomocísouborzdroj, každý v rámci-liprohlášení. Kompletnívhosts.confsoubor by měl vypadat:

/etc/puppetlabs/code/environments/production/modules/apache/manifests/vhosts.pp

třída apache :: vhosts {if $ :: osfamily == 'RedHat' {soubor {'/etc/httpd/conf.d/vhost.conf': zajistit => soubor, obsah => šablona ('apache / vhosts-rh .conf.erb '),} soubor {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / log ',]: zajistit => adresář,}} elsif $ :: osfamily == 'Debian' {soubor {'/etc/apache2/sites-available/$servername.conf': zajistit => soubor, obsah => šablona ('apache / vhosts-deb. conf.erb '),} soubor {[' / var / www / $ servername ',' / var / www / $ servername / public_html ',' / var / www / $ servername / logs ',]: zajistit => adresář ,}} else {fail ('Toto není podporovaná distribuce.')}}

Krok 4: Vyzkoušejte modul

  • Přejděte naapache / manifesty /adresář, spusťte analyzátor loutek na všech souborech, aby bylo zajištěno bezchybné kódování loutek:

sudo / opt / puppetlabs / bin / loutkový analyzátor ověřit init.pp parametrys.pp vhosts.pp

Mělo by se vrátit prázdné bez problémů.

  • Přejděte na příklady adresář v rámciapachemodul. Vytvořitinit.ppsoubor a zahrnout vytvořené třídy. Nahraďte hodnoty pro$ název serverua$ adminemails vlastními:

/etc/puppetlabs/code/environments/production/modules/apache/examples/init.pp

serveremail = 'webmaster@example.com' $ servername = 'loutka.example.com' zahrnout apache zahrnout apache :: vhosts
  • Otestujte modul spuštěním loutka platí s –Neop štítek:
    sudo / opt / puppetlabs / bin / puppet apply --noop init.pp

Neměl by vracet žádné chyby a výstup, který spustí aktualizace z událostí. Chcete-li nainstalovat a nakonfigurovat apache na Puppet master, spusťte znovu bez–Neop, je-li to požadováno.

  • Přejděte zpět do hlavního adresáře loutek a poté doprojevujesložka (neten přítomný v modulu Apache).

cd / etc / puppetlabs / code / prostředí / produkce / manifesty

přepsání vs přetížení c ++

Vytvořitsite.ppsoubor,a zahrnout modul Apache pro každý uzel agenta. Také zadejte proměnné proadminemail a název serveruparametry. Vašesite.ppby měl vypadat takto:

/etc/puppetlabs/code/environments/production/manifests/site.pp

uzel 'puppet-agent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'puppet.example.com' zahrnout apache zahrnout apache :: vhosts} uzel 'loutka-agent-centos.example .com '{$ adminemail =' webmaster@example.com '$ servername =' puppet.example.com 'zahrnout apache zahrnout apache :: vhosts}

Ve výchozím nastavení bude služba Loutkového agenta na vašich spravovaných uzlech automaticky kontrolována u hlavního serveru každých 30 minut a použije všechny nové konfigurace od hlavního uzlu. Můžete také ručně vyvolat proces loutkového agenta mezi automatickými běhy agentů. Chcete-li nový modul ručně spustit na uzlech agenta, přihlaste se k uzlům a spusťte:

sudo / opt / puppetlabs / bin / loutkový agent -t

Teď, když jsme se naučili, jak vytvořit modul od nuly, pojďme se naučit, jak používat již existující modul z loutkové kovárny loutek.

Použijte modul z PuppetForge

Loutková kovárna již má mnoho modulů pro spuštění serveru. Můžeme je nakonfigurovat stejně rozsáhle jako modul, který jste vytvořili, a můžeme ušetřit čas, protože modul nemusíme vytvářet úplně od začátku.

Ujistěte se, že jste v / etc / puppetlabs / code / prostředí / produkce / moduly adresář a nainstalujte Modul MySQL od Puppet Forge podle PuppetLabs. Tím se nainstalují také všechny nezbytné moduly.

cd / etc / puppetlabs / code / prostředí / produkce / moduly

sudo / opt / puppetlabs / bin / loutkový modul nainstalujte puppetlabs-mysql

Použijte Hiera k vytváření databází

Než vytvoříte konfigurační soubory pro modul MySQL, zvažte, že možná nebudete chtít používat stejné hodnoty ve všech uzlech agenta. Abychom dodali Puppet správná data na uzel, používáme Hiera. Pro každý uzel budete používat jiné heslo root, čímž vytvoříte různé databáze MySQL.

  • Navigovat do/ etc / loutkaa vytvořte Hierin konfigurační souborhiera.yamlv hlavnímloutkaadresář. Použijete výchozí hodnoty Hiera:

/etc/puppetlabs/code/environments/production/hiera.yaml

--- verze: 5 hierarchie: - název: Společná cesta: common.yaml výchozí: data_hash: yaml_data datadir: data
  • Vytvořte souborobyčejný.yaml. Bude definovat výchozí vykořenit heslo pro MySQL:

/etc/puppetlabs/code/environments/production/common.yaml

mysql :: server :: root_password: 'heslo'

Používámeobyčejný.yamlsouborkdyž proměnná není nikde definována. To znamená, že všechny servery budou sdílet stejné heslo root MySQL. Tato hesla lze také hašovat, aby se zvýšila bezpečnost.

  • Chcete-li použít výchozí nastavení modulu MySQL, můžete přidat zahrnout „:: mysql :: server“ linka dosite.ppsoubor. V tomto příkladu však přepíšete některá výchozí nastavení modulu a vytvoříte databázi pro každý z vašich uzlů.

Upravtesite.ppsoubor s následujícími hodnotami:

uzel 'Puppetagent-ubuntu.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' zahrnout apache zahrnout apache :: vhosts zahrnout mysql :: server mysql :: db {'mydb_ $ {fqdn} ': user =>' myuser ', heslo =>' mypass ', dbname =>' mydb ', host => $ :: fqdn, grant => [' SELECT ',' UPDATE '], tag = > $ domain,}} uzel 'Puppetagent-centos.example.com' {$ adminemail = 'webmaster@example.com' $ servername = 'hostname.example.com' zahrnout apache zahrnout apache :: vhosts zahrnout mysql :: server mysql :: db {'mydb _ $ {fqdn}': user => 'myuser', heslo => 'mypass', dbname => 'mydb', hostitel => $ :: fqdn, grant => ['VYBRAT', ' UPDATE '], tag => $ doména,}}

Automatizace instalace Loutkových modulů od loutkového mistra po loutkového agenta

  • Tyto aktualizace můžete spustit ručně na každém uzlu pomocí SSHing do každého uzlu a vydáním následujícího příkazu:

sudo / opt / puppetlabs / bin / loutkový agent -t

  • V opačném případě služba loutkového agenta na vašich spravovaných uzlech automaticky zkontroluje u hlavního serveru každých 30 minut a použije všechny nové konfigurace od hlavního uzlu.

Katalog byl úspěšně použit na agenta Ubuntu

Katalog byl úspěšně použit na agentovi CentOS

Získá se tedy celá instalace Automatizovaný na uzlech agenta pouhým použitím katalogu.Soubory kódu a závislosti použité pro tuto ukázku najdete tady .

Doufám, že vám tato ukázka pomohla získat jasnou představu o loutkových modulech a manifestech a jejich využití pro automatizaci IT infrastruktury.V takovém případě se vaše práce stane tak snadnou, stačí zadat konfigurace v Loutkáři a Loutkové agenty automaticky vyhodnotí hlavní manifest a použijí modul, který určuje nastavení Apache a MySQL. Pokud narazíte na jakékoli dotazy, neváhejte je zveřejnit .

Pokud jste to našli Výukový program pro loutky relevantní, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Kurz certifikace Edureka DevOps pomáhá studentům získat odborné znalosti v různých procesech a nástrojích DevOps, jako jsou Puppet, Jenkins, Nagios a GIT pro automatizaci více kroků v SDLC.