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í.

Správce systému pracuje na serverech ručně
Správce systému pracuje na serverech ručně

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í.

Puppet automatizuje správu serveru
Puppet automatizuje správu serveru

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.

Deklarativní paradigmata

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.

Deklarativní paradigmata

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 s loutkovým mistrem
Komunikace s loutkovým mistrem

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.…

Komunikace mezi Masterem a Agentem
Agent posílá fakta Masterovi

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.

Komunikace mezi Masterem a Agentem
Master odešle katalog agentovi

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í.

Komunikace mezi Masterem a Agentem
Agent použije konfiguraci

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

  1. Zdroje
  2. vyučování
  3. Manifest
  4. 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..

Moduly loutek
Moduly loutek

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ů:

  1. Typy loutkového jádra nebo vestavěných zdrojů.
  2. Typy prostředků definované loutkou.
  3. 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

Vlastní typy zdrojů loutky

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		

Vlastní typy zdrojů loutky

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

Vlastní typy zdrojů loutky

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

Vlastní typy zdrojů loutky

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

Demo Instalace 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

Demo Instalace NTP

Spuštěním následujícího příkazu ověřte, že služba ntp neexistuje:

systemctl status ntp

Demo Instalace 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.

Demo Instalace NTP

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

Demo Instalace NTP