Výuka loutky pro začátečníky: Co je loutka a jak ji používat?
Než se naučíme Puppet, pochopme:
Co je Configuration Management?
Správa konfigurace je proces udržování softwaru a počítačových systémů (například servery, úložiště, sítě) ve známém, požadovaném a konzistentním stavu. Umožňuje také přístup k přesným historickým záznamům o stavu systému pro účely projektového řízení a auditu.
Správci systému většinou provádějí opakující se úkoly, jako je instalace serverů, konfigurace těchto serverů atd. Tito odborníci mohou tento úkol automatizovat psaním skriptů.
Je to však obtížná práce, když pracují na masivní infrastruktuře. K vyřešení těchto problémů byl představen nástroj Configuration Management jako loutka.
Co je Puppet?
Loutka je nástroj pro správu systému pro centralizaci a automatizaci procesu správy konfigurace. Puppet se také používá jako nástroj pro nasazení softwaru. Jedná se o open-source software pro správu konfigurace široce používaný pro konfiguraci serverů, správu, nasazení a orchestraci různých aplikací a služeb v celé infrastruktuře organizace.
Puppet je speciálně navržen pro správu konfigurace Linuxu a Windows systémy. Je napsán v Ruby a využívá svůj unikát Dhlavní Sspecifický Ljazyk (DSL) k popisu konfigurace systému.
Jaké jsou verze Puppet?
Loutka se dodává ve dvou verzích:
- Open Source loutka: Jedná se o základní verzi nástroje pro správu konfigurace Puppet, který je také známý jako Open Source Puppet. Je k dispozici přímo z webu Puppet a je licencován pod systémem Apache 2.0.
- Loutkový podnik: Komerční verze, která nabízí funkce jako hlášení shody, orchestraci, řízení přístupu na základě rolí, GUI, API a nástroje příkazového řádku pro efektivní správu uzlů.
Co dokáže Puppet?
Máte například infrastrukturu s přibližně 100 servery. Jako správce systému je vaší úlohou zajistit, aby všechny tyto servery byly vždy aktuální a fungovaly s plnou funkčností.
K tomu můžete použít Puppet, který vám umožní napsat jednoduchý kód, který lze na tyto servery automaticky nasadit. Tím se snižuje lidské úsilí a vývojový proces je rychlý a efektivní.
Loutka plní následující funkce:
- Puppet umožňuje definovat různé konfigurace pro každého hostitele.
- Nástroj vám umožňuje nepřetržitě monitorovat servery, abyste potvrdili, zda požadovaná konfigurace existuje nebo ne a zda se nemění. Pokud se konfigurace změní, nástroj Puppet se vrátí k předdefinované konfiguraci na hostiteli.
- Poskytuje také kontrolu nad celým nakonfigurovaným systémem, takže centralizovaná změna se provede automaticky.
- Používá se také jako nástroj pro nasazení, protože automaticky nasazuje software do systému. Implementuje infrastrukturu jako kód, protože zásady a konfigurace jsou psány jako kód.
Loutkové DSL a programovací paradigmata
Než se naučíme Puppet DSL, pojďme pochopit programovací paradigmata:
Programovací paradigma je styl, který používáte v počítačovém programování.
Čtyři typy paradigmat jsou:
- Rozkazovací způsob.
- Deklarativní.
- Funkční (což je považováno za podmnožinu tohoto deklarativního paradigmatu)
- Objektově orientovaný.
Zaměříme se na imperativní a deklarativní.
Imperativní paradigmata
Toto programovací paradigma vyjadřuje logiku výpočtu (Co dělat) a popisuje jeho řídicí tok (Jak dělat)
Příklad:
Předpokládejme, že jedete do své kanceláře, zarezervujete si taxi a začnete krok za krokem dávat pokyny řidiči, dokud nedorazíte do kanceláře. Specifikovat, co a jak dělat, je imperativní styl.
Deklarativní paradigmata
Toto programovací paradigma vyjadřuje logiku výpočtu (Co dělat), aniž by popisoval jeho řídicí tok (Jak dělat)
Příklad:
Předpokládejme, že jedete do své kanceláře, zarezervujete si taxi Uber a určíte konečné místo určení (kancelář). Určení toho, co nedělat, jak dělat, je deklarativní styl.
Paradigma | Co dělat | Jak to udělat |
---|---|---|
imperativ | Ano | Ano |
Deklarativní | Ano | Ne |
Puppet používá deklarativní programovací paradigma
Puppet používá deklarativní programovací přístup.
Příklad: Vytvořte uživatele v systému:
To lze provést pomocí imperativního programovacího vzoru pomocí skriptu shell: Zde specifikujeme, jak vytvořit uživatele a jaké příkazy použít na operační systém.
Lze to však provést pomocí deklarativního programovacího vzoru s pouze několika řádky loutkového kódu, specifického jazyka loutky (DSL) a stále dosáhnout stejného výsledku.
Modely nasazení nástrojů pro správu konfigurace
Existují dva modely nasazení nástroje pro správu konfigurace :
- Model nasazení založený na push: iniciovaný hlavním uzlem.
- Model nasazení založený na tahu: iniciovaný agenty.
Model nasazení založený na push
V tomto modelu nasazení hlavní server předává konfigurace a software jednotlivým agentům. Po ověření zabezpečeného připojení hlavní server vzdáleně spouští příkazy na agentech. Například, Možná a Salt Stack.
Model nasazení založený na tahu.
V tomto modelu nasazení jednotlivé servery kontaktují hlavní server, ověřují a navazují zabezpečené připojení, stahují své konfigurace a software a podle toho se konfigurují – například Puppet a Chef.
Jak Puppet funguje?
Puppet je založen na modelu nasazení Pull, kde se agentní uzly pravidelně po každém přihlašují 1800 sekund s hlavním uzlem, abyste zjistili, zda je v agentovi potřeba něco aktualizovat. Pokud je třeba cokoliv aktualizovat, agent si vytáhne potřebné loutkové kódy z masteru a provede požadované akce.
Vysvětlíme si to na příkladu:
Příklad: Master – Nastavení agenta:
Mistr
Stroj založený na Linuxu s nainstalovaným softwarem Puppet master. Je zodpovědný za udržování konfigurací ve formě loutkových kódů. Hlavním uzlem může být pouze Linux.
Agenti
Cílové stroje spravované loutkou s nainstalovaným softwarem loutkového agenta.
Agenta lze nakonfigurovat na jakémkoli podporovaném operačním systému, jako je Linux nebo Windows or Solaris nebo Mac OS.
Komunikace mezi masterem a agentem je navázána prostřednictvím bezpečných certifikátů.
Komunikace mezi Masterem a Agentem
Krok 1) Jakmile je navázáno spojení mezi agentem a masterem, agent Puppet odešle data o svém stavu na server Puppet master. Tyto informace se nazývají fakta: Tyto informace zahrnují název hostitele, podrobnosti o jádře, IP adresu, podrobnosti o názvu souboru atd.…
Krok 2) Puppet Master tato data použije a sestaví seznam s konfigurací, která má být aplikována na agenta. Tento seznam konfigurace, která má být provedena na agentovi, se nazývá a katalog. To lze změnit, jako je instalace balíčku, aktualizace nebo odstranění, vytvoření systému souborů, vytvoření nebo odstranění uživatele, restartování serveru, změny konfigurace IP atd.
Krok 3) Agent použije tento seznam konfigurace k použití všech požadovaných změn konfigurace na uzlu.
V případě, že v konfiguraci nejsou žádné odchylky, Agent neprovede žádné konfigurační změny a nechá uzel běžet se stejnou konfigurací.
Krok 4) Jakmile je hotovo, uzel hlásí zpět loutkovému mistrovi, že konfigurace byla aplikována a dokončena.
Loutkové bloky
Puppet poskytuje flexibilitu pro integraci sestav s nástroji třetích stran pomocí Puppet API.
Existují čtyři typy stavebních bloků Puppet
- Zdroje
- vyučování
- Manifest
- moduly
Zdroje pro loutku
Puppet Resources jsou stavebními kameny Puppet.
Zdroje jsou vestavěné funkce které běží na zadním konci k provádění požadovaných operací v loutce.
Kurzy loutek
Kombinace různých zdrojů může být seskupena do jediné jednotky zvané class.
Manifest loutky
Manifest je adresář obsahující loutkové DSL soubory. Tyto soubory mají příponu .pp. Přípona .pp znamená loutkový program. Kód loutky se skládá z definic nebo deklarací tříd loutek.
Moduly loutek
Moduly jsou kolekce souborů a adresářů, jako jsou Manifests, Class definitions. Jsou to znovu použitelné a sdílené jednotky v Puppet.
Například, MySQL modul k instalaci a konfiguraci MySQL nebo modul Jenkins pro správu Jenkins atd..
Typy loutkových zdrojů
Obecně se systém skládá ze souborů, uživatelů, služeb, procesů, balíčků atd. V Puppet se jim říká zdroje. Zdroje jsou základními stavebními kameny
Loutka. Všechny operace na loutkových agentech jsou prováděny pomocí loutkových prostředků.
Prostředky loutek jsou hotové nástroje, které se používají k provádění různých úkolů a operací na jakékoli podporované platformě. Můžeme použít jeden loutkový prostředek k provedení konkrétního úkolu, nebo můžeme použít více loutkových prostředků společně k provedení některých komplexních nasazení konfigurací aplikací.
Zdroje mohou mít různé typy. Použití loutky zdroje si typy zdrojů za účelem popisu konfigurace systému.
Existují tři druhy typů zdrojů:
- Typy loutkového jádra nebo vestavěných zdrojů.
- Typy prostředků definované loutkou.
- Vlastní typy zdrojů loutky.
Typy loutkového jádra nebo vestavěných zdrojů
Základní nebo vestavěné typy prostředků jsou předpřipravené typy loutkových prostředků dodávané se softwarem pro loutky. Všechny základní nebo vestavěné typy zdrojů Puppet jsou napsány a udržovány týmem Puppet.
Typy prostředků definované loutkou
Definované typy zdrojů jsou odlehčené typy zdrojů napsané v deklarativním jazyce Puppet s použitím kombinace existujících typů zdrojů.
Vlastní typy zdrojů loutky
Vlastní typy zdrojů jsou zcela přizpůsobené typy zdrojů napsané v Ruby.
Pojďme prozkoumat typy loutkových zdrojů…
V terminálu zadejte následující příkaz pro zobrazení seznamu dílčích příkazů souvisejících s Puppet:
Puppet --help
V našem případě nás zajímá dílčí příkaz „zdroj“, kterou použijeme k vyhledání informací o typech vestavěných loutkových zdrojů.
Chcete-li zobrazit seznam, zadejte v terminálu libovolný z následujících příkazů akce spojený s dílčím příkazem loutka “zdroj"
Puppet help resource Puppet resource --help
V tomto případě máme zdroj jako dílčí příkaz a – typy jako akce.
Puppet má 49 vestavěných základních typů zdrojů.
V terminálu zadejte následující příkaz pro zobrazení seznamu dostupných typů prostředků vestavěné loutky:
puppet resource –types
Každý typ podporuje seznam atributy. Tyto atributy poskytují podrobný popis, který Puppet používá ke správě zdroje.
Chcete-li zjistit všechny atributy spojené s typem prostředku loutky, použijte následující příkaz:
puppet describe <resource type name>
Parametry zobrazí seznam všech dostupných atributů pro daný typ prostředku.
loutka popsat balíček
Pro nového člověka je těžké pochopit a uvést do souvislosti mnoho nespravovaných souborů s loutkovým kódem. Zde potřebujeme nějaké seskupení, abychom spojili operace. Cílem je vyřešit jeden problém, jako jsou všechny operace potřebné ke konfiguraci ssh na serveru nebo službě ntp nebo kompletním webovém serveru nebo databázovém serveru od začátku.
Co jsou třídy loutek?
Třídy loutek jsou sbírkou loutkových zdrojů svázaných dohromady jako jeden celek.
Puppet představil třídy, aby byla struktura znovu použitelná a organizovaná.
Nejprve musíme definovat třídu pomocí syntaxe definice třídy; třídy musí být jedinečné a mohou být deklarovány pouze jednou se stejným názvem:
class <class-name> { <Resource declarations> }
Příklad:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Zatím jsme definovali pouze třídu, ale nikde jsme ji nepoužili. To znamená, že tento kód, který jsme napsali, nebude nikdy spuštěn, pokud tuto třídu nedeklarujeme jinde.
Třídní prohlášení
Chcete-li v kódu použít definovanou třídu, použijte obsahovat klíčové slovo.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Pojďme to pochopit na reálném případu.
Demo instalace NTP
Nejprve se ujistěte, že balíček NTP již není na serveru přítomen, následující příkaz nevrátí nic, pokud na serveru není přítomen telnet:
rpm -qa | grep -i ntp
Jak vidíme, balíček NTP je již na serveru přítomen. Odeberme stávající balíček NTP:
yum remove ntp
Po odebrání balíčku se ujistěte, že soubor ntp.conf neexistuje:
ls -lrt /etc/ntp.conf
Spuštěním následujícího příkazu ověřte, že služba ntp neexistuje:
systemctl status ntp
Pro uložení kódu vytvořte nový soubor .pp. Z příkazového řádku:
vi demontp.pp
Změňte režim vkládání stisknutím i na klávesnici.
Chcete-li vytvořit nový soubor, zadejte následující kód:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
Po dokončení úprav: stiskněte esc
Pro uložení souboru stiskněte :wq!
Dalším krokem je check zda má kód nějaké syntaktické chyby. Proveďte následující příkaz:
puppet parser validate demontp.pp
Ujistěte se, že jste přepnuli na kořen abyste mohli dokončit test bez chyby provedením příkazu:
su root
test je dalším krokem v procesu vytváření kódu. Provedením následujícího příkazu provedete kouřový test:
Puppet applies demontp.pp --noop
Posledním krokem je běh loutku v reálném režimu a ověřte výstup.
puppet apply demontp.pp
Puppet nic nepředvedl, protože demo třída byla prostě definovány ale ne prohlásil,.
Dokud tedy nedeklarujete třídu loutek, kód se nepoužije.
Pojďme prohlásit demo třída uvnitř stejného kódu pomocí zahrnout název třídy na konci kódu:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
Znovu check zda má kód nějaké syntaktické chyby. Proveďte následující příkaz:
puppet parser validate demontp.pp
Ujistěte se, že jste přepnuli na kořen abyste mohli dokončit test bez chyby provedením příkazu:
su root
Testování je dalším krokem v procesu vytváření kódu. Provedením následujícího příkazu provedete kouřový test:
Puppet apply demontp.pp --noop
Posledním krokem je běh loutku v reálném režimu a ověřte výstup.
puppet apply demontp.pp
Tentokrát se kód použije, protože třída byla definována a poté deklarována.
Ujistěte se, že ntp.conf nyní existuje:
ls -lrt /etc/ntp.conf
Ověřte, zda byla služba ntp spuštěna spuštěním následujícího příkazu:
systemctl status ntpd