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í
- Klíčové pojmy v loutkovém programování
- Pracovní postup loutkového programu
- Demonstrace: Automatizace instalace Apache a MySQL
Ú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.pp
manifest,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í.
Puppetlabs 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.pp
soubor 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.pp
soubor definuje potřebné proměnné. I když bychom mohli tyto proměnné definovat v rámciinit.pp
soubor, protože bude potřeba použít více proměnných mimo samotný typ prostředku pomocí aparams.pp
soubor umožňuje definovat proměnné v-lipříkazy a používají se ve více třídách.
Vytvořitparams.pp
soubor 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.pp
tří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á čepice
neboZalož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.pp
které 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.pp
zdě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.conf
v 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 v
httpd.conf
soubor. 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.pp
soubor, 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.pp
soubor.
Definujeme $ conffile
a $ confsource
promě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.pp
soubor, 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.pp
třídy, ale obsahující skutečné loutkové zdroje.
- Zevnitřapache / manifesty /adresář, vytvořte a otevřete
vhosts.pp
soubor. 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.pp
soubor.
- Zpět na
vhosts.pp
soubor. 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 serveru
hodnota. 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.conf
soubor 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 na
apache / 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řit
init.pp
soubor a zahrnout vytvořené třídy. Nahraďte hodnoty pro$ název serveru
a$ adminemail
s 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.pp
soubor,a zahrnout modul Apache pro každý uzel agenta. Také zadejte proměnné proadminemail
a název serveru
parametry. Vašesite.pp
by 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 / loutka
a vytvořte Hierin konfigurační souborhiera.yaml
v 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 soubor
obyč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ý.yaml
souborkdyž 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 do
site.pp
soubor. 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.pp
soubor 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.