Majster bábok: Inštalácia a konfigurácia systému správy vzdialenej konfigurácie Puppet. Majster bábok: Inštalácia a konfigurácia systému správy vzdialenej konfigurácie bábky Inštalácia bábky

Ak chcete používať Puppet efektívnejšie, musíte pochopiť, ako sa vytvárajú moduly a manifesty. Tento tutoriál vás prevedie tým, ako fungujú tieto bábkové komponenty nastavením zásobníka LAMP na serveri Ubuntu 14.04.

Požiadavky

  • Inštalácia Puppet (majster a agent). Viac o tomto -.
  • Schopnosť vytvoriť aspoň jeden virtuálny server Ubuntu 14.04, ktorý bude slúžiť uzlu Puppet agent.

Základy bábkového kódu

Zdroje

Bábkový kód pozostáva hlavne zo zdrojov. Zdroj je časť kódu, ktorá popisuje stav systému a určuje zmeny, ktoré potrebuje. Napríklad:

user("mitchell":
zabezpečiť => prítomný,
uid => "1000",
gid => "1000",
shell => "/bin/bash",
domov => "/home/mitchell"
}

Vyhlásenie o zdroji má nasledujúci formát:

resource_type("názov_zdroja"
atribút => hodnota
...
}

Ak chcete zobraziť všetky typy bábkových prostriedkov, zadajte príkaz:

bábkový zdroj --typy

V tejto príručke sa dozviete viac o typoch zdrojov.

Manifesty

Manifest je orchestračný skript. Bábkové programy s príponou .pp sa nazývajú manifesty. Predvolený manifest Bábky je /etc/puppet/manifests/site.pp.

triedy

Ako v každom bežnom programovacom jazyku sú triedy zodpovedné za organizáciu a opätovné použitie častí orchestrácie.

V rámci definície triedy je blok kódu, ktorý popisuje, ako trieda funguje. Keď definujete triedu, môžete ju použiť v manifestoch.

Definícia triedy má nasledujúci formát:

trieda example_class(
...
kód
...
}

Tento kód definuje triedu example_class. Bábkový kód bude v zložených zátvorkách.

Deklarácia triedy je miesto v kóde, kde sa volá konkrétna trieda. S deklaráciou triedy Puppet spracuje svoj kód.

Deklarácia triedy môže byť obyčajná a podľa typu zdroja.

Bežná deklarácia triedy sa pridá do kódu pomocou kľúčového slova include.

zahrnúť triedu_príkladu

Keď je trieda deklarovaná ako typ zdroja, je deklarovaná vo formáte zdroja:

class("example_class" :)

Táto deklarácia vám umožňuje pridať do kódu parametre triedy, ktoré prepíšu predvolené hodnoty atribútov triedy. Napríklad:

uzol "host2" (
class ("apache": ) # použite modul apache
apache::vhost ( "example.com": # definujte zdroj vhost
port => "80",
docroot => "/var/www/html"
}
}

Moduly

Modul je skupina manifestov a iných súborov organizovaných preddefinovaným spôsobom, ktorý uľahčuje zdieľanie a opätovné použitie jednotlivých častí orchestrácie. Moduly pomáhajú organizovať Bábkový kód, pretože sa dajú použiť na oddelenie kódu do viacerých manifestov.

Bábkové moduly sú uložené v adresári /etc/puppet/modules.

Písanie manifestu

Môžete si precvičiť písanie bábkových manifestov, modulov a tried pomocou príkladu inštalácie zásobníka LAMP na server Ubuntu (výsledok bude ).

Ak teda chcete usporiadať server Ubuntu 14.04 a nainštalovať naň zásobník LAMP, potrebujete prostriedky na nasledujúce akcie:

  • inštalácia balíka apache2.
  • spustenie služby apache2.
  • inštalácia balíka MySQL server, mysql-server.
  • spustenie služby mysql.
  • inštalácia balíka php5
  • vytvorenie testovacieho skriptu PHP, info.php.
  • aktualizujte index apt pred inštaláciou každého balíka.

Nižšie nájdete tri príklady bábkového kódu, ktorý možno použiť na dosiahnutie takéhoto nastavenia zásobníka LAMP.

Prvý príklad vás naučí písať základné manifesty do jedného súboru. Druhý príklad vám pomôže zostaviť a použiť triedu a modul na základe predtým napísaných manifestov. Tretí príklad vám ukáže, ako použiť vopred zostavené verejné moduly na inštaláciu zásobníka LAMP.

Poznámka: Na testovanie je lepšie použiť nový virtuálny server.

Príklad 1: Inštalácia LAMP s jedným manifestom

Manifest bábky je možné zapísať na uzol agenta a potom ho spustiť pomocou príkazu aplikovania bábky (na tento účel nepotrebujete nastavenie hlavného a agenta).

V tejto časti sa naučíte písať manifesty, ktoré budú používať tieto typy deklarácií zdrojov:

  • exec: Vykonávanie príkazov.
  • balík: inštalácia balíkov.
  • služba: správa služieb.
  • súbor: správa súborov.

Vytvorenie manifestu

Vytvorte nový manifest:

sudo vi /etc/puppet/manifests/lamp.pp

Pridajte k nemu nasledujúci kód, aby ste deklarovali požadované zdroje.

# spustite príkaz "apt-get update".
exec("apt-update": # zdroj exec "apt-update"
príkaz => "/usr/bin/apt-get update" # príkaz, ktorý tento prostriedok spustí
}
# nainštalujte balík apache2
package("apache2":
vyžadovať => Exec["apt-update"], # vyžiadať "apt-update" pred inštaláciou balíka
zabezpečiť => nainštalované,
}
# spustiť službu apache2
služba("apache2":
zabezpečiť => beh,
}
# nainštalujte mysql-server
package("mysql-server":
vyžadovať => Exec["apt-update"], # vyžiadať "apt-update" preinštalovaním
zabezpečiť => nainštalované,
}
# spustite službu mysql
service("mysql":
zabezpečiť => beh,
}
# nainštalujte balík php5
balíček("php5":
vyžadovať => Exec["apt-update"], # požiadať o "apt-update" pred inštaláciou
zabezpečiť => nainštalované,
}
# spustite službu info.php
súbor("/var/www/html/info.php":
zabezpečiť => súbor,
obsah => "“, # phpinfo kód
vyžadovať => Balík["apache2"], # žiadosť o balík "apache2"
}

Použitie manifestu

Ak chcete použiť nový manifest, zadajte príkaz:

sudo puppet aplikovať --test

Zobrazí objemný výsledok, ktorý zobrazuje všetky zmeny v stave prostredia. Ak vo výstupe nie sú žiadne chyby, mali by ste byť schopní otvoriť svoju externú IP adresu alebo názov domény vo svojom prehliadači. Na obrazovke sa zobrazí testovací test. PHP stránka s informáciami o zásobníku. To znamená, že Apache a PHP fungujú.

Teraz je zásobník LAMP nainštalovaný na server pomocou Puppet.

Toto je pomerne jednoduchý manifest, pretože ho možno spustiť na agentovi. Ak nemáte majstra bábok, ostatné uzly agentov nebudú môcť tento manifest použiť.

Hlavný server bábok kontroluje zmeny stavu servera každých 30 minút.

Príklad 2: Inštalácia stohu LAMP pomocou modulu

Teraz skúste vytvoriť jednoduchý modul založený na manifeste LAMP, ktorý ste napísali v predchádzajúcej časti.

Pre vytvorenie modulu vytvorte nový adresár v adresári modules (jeho názov sa musí zhodovať s názvom modulu). Tento adresár by mal obsahovať adresár manifests a súbor init.pp. Súbor init.pp špecifikuje triedu Puppet (jej názov sa tiež musí zhodovať s názvom modulu).

Vytvorenie modulu

Prejdite na hlavný server Puppet a vytvorte adresárovú štruktúru pre modul:

cd /etc/puppet/modules
sudo mkdir -p lampa/prejavy

Vytvorte a otvorte súbor init.pp v editore:

sudo vi lampa/manifesty/init.pp

Do súboru vložte triedu lampy:

lampa triedy (
}

Skopírujte obsah manifestu z časti 1 a vložte ho do bloku triedy lampy. Teraz máte definíciu triedy lampy. Ostatné manifesty budú môcť používať túto triedu ako modul.

Uložte a zatvorte súbor.

Použitie modulu v hlavnom manifeste

Teraz môžete nakonfigurovať hlavný manifest a použiť modul lampy na inštaláciu zásobníka LAMP na server.

Na serveri Puppet master upravte nasledujúci súbor:

sudo vi /etc/puppet/manifests/site.pp

S najväčšou pravdepodobnosťou na tento moment súbor je prázdny. Pridajte k tomu nasledujúce riadky:

predvolený uzol ( )
uzol "lamp-1" (
}

Poznámka: Nahraďte lampu-1 názvom hostiteľa vášho Puppet agenta, na ktorý chcete nainštalovať zásobník.

Blok uzlov vám umožňuje zadať kód bábky, ktorý sa bude vzťahovať iba na niektoré uzly.

Predvolený blok sa vzťahuje na všetky uzly agentov, ktoré nemajú samostatný blok (nechajte ho prázdny). Blok lampy 1 sa použije na uzol agenta lampy 1.

Do tohto bloku, ktorý používa modul lampy, pridajte nasledujúci riadok:

Uložte a zatvorte súbor.

Teraz bude uzol Puppet agent schopný stiahnuť nastavenia z hlavného servera a nainštalovať zásobník LAMP. Ak chcete vykonať zmeny hneď teraz, spustite príkaz na agentovi:

sudo bábkový agent --test

Moduly sú najpohodlnejším spôsobom opätovného použitia bábkového kódu. Okrem toho vám moduly pomáhajú logicky organizovať váš kód.

Príklad 3: Inštalácia LAMP pomocou verejných modulov

Podobným spôsobom sa používa aj modul MySQL. Do bloku uzla pridajte nasledujúce riadky:

class("mysql::server":
root_password => "heslo",
}

Môžete tiež odovzdať parametre modulu MySQL.

Pridajte zdroj, ktorý skopíruje info.php na požadované miesto. Použite parameter source. Do bloku uzla pridajte nasledujúce riadky:

file("info.php": # názov zdrojového súboru
cesta => "/var/www/html/info.php", # cieľová cesta
zabezpečiť => súbor,
vyžadovať => Trieda["apache"], # trieda apache na použitie
source => "puppet:///modules/apache/info.php", # umiestnenie na skopírovanie súboru
}

Táto deklarácia triedy používa namiesto obsahu parameter zdroj. Táto možnosť nielen využíva obsah súboru, ale ho aj skopíruje.

Puppet skopíruje súbor puppet:///modules/apache/info.php do /etc/puppet/modules/apache/files/info.php.

Uložte a zatvorte súbor.

Vytvorte súbor info.php.

sudo sh -c "echo""> /etc/puppet/modules/apache/files/info.php"

Teraz bude uzol Puppet agent schopný stiahnuť nastavenia z hlavného servera a nainštalovať zásobník LAMP. Ak chcete vykonať zmeny v prostredí agenta práve teraz, spustite príkaz na tomto uzle:

sudo bábkový agent --test

Tento príkaz stiahne všetky aktualizácie pre aktuálny uzol a nainštaluje naň zásobník. Aby ste sa uistili, že Apache a PHP fungujú, otvorte IP adresu alebo doménu uzla v prehliadači:

http://lamp_1_public_IP/info.php

Záver

Teraz máte základné znalosti práce s Bábkovými modulmi a manifestmi. Skúste si sami vytvoriť jednoduchý manifest a modul.

Puppet je skvelý na správu konfiguračných súborov aplikácie.

Značky: ,
Trochu poézie. Zdalo by sa, že tento článok by mal byť východiskovým bodom pre celú sériu, no cieľovou skupinou sú stále skúsenejší používatelia produktov Open Source Puppet Labs, ktorí nie sú spokojní s jednotlivými, slabo integrovanými modulmi s Puppet Forge. Ako v každom prípade „knižnica verzus rámec“, cena, ktorú treba zaplatiť, je nasledovať svetonázor autora integrovaného riešenia.

Trochu o tom, ako Puppet funguje

Bábka je predovšetkým špecifický jazyk na deklaratívne upresnenie konečného stavu systému. Pre porovnanie sa mimoriadne hodí GNU Makefile, kde sa dá okrem priameho popisu závislostí zabávať do sýtosti.

Bábková abstrakcia je niečo také ( porušovanie vzorov - zabudnite na všetko, čo ste vedeli o programovacích pojmoch!).

  • Uzol je súbor konfigurácií pre konkrétny cieľový systém. V skutočnosti ide o špeciálny prípad triedy.
  • Trieda je množina deklaratívnej logiky, ktorá je zahrnutá v konfigurácii uzla alebo v iných triedach. Trieda nemá inštancie ani metódy, ale má parametre a premenné definované v rámci logiky. V skutočnosti je to skôr procedúra, ktorá môže zdediť inú procedúru jednoduchým pridaním kódu a nie tak banálnym rozsahom premenných.
  • Typ- ale toto vyzerá skôr ako klasická trieda - predpokladá inštancie s názvom a určite dané parametre, ale nič viac. Špecifická implementácia typu môže byť napísaná ako Bábkový skript cezdefinovať , ktorý vytvára inštancie iných typov, alebo ako rozšírenie Ruby s množstvom fantázie.
  • Zdroj- toto sú vlastne pomenované inštancie typov. Každý názov prostriedku je jedinečný v rámci špecifického typu v rámci konfigurácie uzla (adresára).
  • Premenné- no, to sú skrátka stálice... Pred Puppet 4 to bolo s ich rozsahom ešte horšie. Teraz je to postačujúce: na použitie mimo miesta definície musí byť špecifikovaný plne kvalifikovaný identifikátor, s výnimkou prípadu dedičnosti triedy.
Puppet je možné použiť na lokálne nasadenie bez siete alebo pridruženej infraštruktúry. To sa dá použiť na vytváranie obrázkov kontajnerov. Existuje dokonca celé hnutie, ktoré obhajuje opustenie centralizovaného servera.

Ideologicky správnym spôsobom sa infraštruktúra bábok skladá z agenta – privilegovanej služby na cieľovom systéme – a servera, ktorý na požiadanie agentov distribuuje cenné inštrukcie vo forme deklaratívnych adresárov zdrojov. Bezpečnosť je implementovaná na úrovni infraštruktúry súkromných verejných kľúčov (X.509). Zjednodušene povedané, rovnaké mechanizmy ako v HTTPS, no s vlastnou CA a povinným overením klientsky certifikát.

V zjednodušenej forme vyzerá postup nasadenia asi takto:

  1. Spracovanie cez TLS a X.509 (nadviazanie spojenia, aktualizácia CRL, kontrola obmedzení certifikátov atď.)
  2. Agent dostáva zo servera generátory faktov s cachovaním a všetkými vecami (presnejšie povedané, všetko sa ťahá z priečinkov lib/ v moduloch). Nie je ťažké pridať svoj vlastný Ruby skript na zhromažďovanie informácií, ktoré vás zaujímajú.
  3. Agent zhromažďuje fakty o cieľovom systéme a posiela ich na server. Všetky fakty je možné jednoducho zobraziť manuálne pomocou bábkového hovoru faktov. Tieto fakty sú dostupné ako globálne premenné.
  4. Server zostaví katalóg zdrojov a odošle ho agentovi. Pod tým sa skrýva celá vrstva rôznych konceptov.
  5. Agent stiahne všetko potrebné zo servera a uvedie systém do zadanej podoby. Samotný agent nevie, čo so zdrojmi, spolieha sa na implementáciu poskytovateľov (sémantický preklad bude „implementátor“, nie dodávateľ) konkrétnych typov zdrojov. Niektorí poskytovatelia sú štandardní a sú súčasťou balíkov Puppet, zatiaľ čo zvyšok je vytiahnutý z modulov.
Aby ste si užili všetky pôžitky, sú tu ďalšie buchty vo forme:
  • modul- zbierka deklaratívnych Bábkových skriptov, Ruby rozšírení pre Puppet, súborov, šablón súborov, údajov Hiera a mnoho ďalšieho. Správnejší výraz by bol „balík“.
  • Životné prostredie- súbor skriptov, modulov a údajov Hiera. Ako sa infraštruktúra stávala zložitejšou, bolo nevyhnutne potrebné rozdeliť konfiguráciu ďalej ako je štandardné rozdelenie podľa uzlov. V zásade je to potrebné pre pilotné inovácie a banálne riadenie prístupu (keď nie všetci správcovia majú prístup ku všetkým uzlom IT infraštruktúry).
  • Hiera- hierarchická databáza. Táto formulácia môže byť veľmi zastrašujúca. Pravdepodobne preto bol zmenený v dokumentácii neskorších verzií. V skutočnosti ide o mimoriadne jednoduchý a pohodlný mechanizmus na extrahovanie konfigurácie zo súborov YAML alebo JSON. Hierarchia je možnosť určiť poradie čítania viacerých konfiguračných súborov – t.j. hierarchia/priorita týchto súborov.
    • Okrem získavania údajov volaním funkcie, Puppet sťahuje predvolené parametre triedy, čo je hlavný dôraz.
    • Hiera samozrejme podporuje interpoláciu faktov a dokonca aj volanie špeciálnych funkcií.
    • V Puppet 4.3 sme opäť implementovali rovnakú funkcionalitu na podporu nielen globálnej databázy, ale aj lokálnej pre Prostredie a Modul, aj keď autor už pri ich implementácii našiel viacero problémov (PUP-5983, PUP-5952 a PUP -5899), ktoré boli okamžite opravené spoločnosťou Puppet Labs.
    • Na extrahovanie hodnôt zo všetkých súborov v hierarchii je podporovaných niekoľko stratégií:
      • prvá - vráti sa prvá hodnota nájdená podľa priority
      • jedinečný - zhromažďuje všetky hodnoty do jednorozmerného poľa a odstraňuje duplikáty
      • hash - kombinuje všetky nájdené YAML Hash. Duplicitné kľúče sa vyberajú podľa priority.
      • deep je v podstate rekurzívna verzia hashu
    • Krása je v tom, že stratégiu vzorkovania možno špecifikovať aj pri volaní funkcie lookup(), pretože a v akomkoľvek súbore hierarchie prostredníctvom špeciálneho kľúča lookup_options, ktorý sa aktívne používa v module cfnetwork.
  • PuppetDB- v podstate vrstva obchodnej logiky okolo relačnej databázy (PostgreSQL), ktorá vám umožňuje ukladať správy o skutočnostiach a vykonaných nasadeniach a exportovať zdroje pre následný import do adresárov na iných uzloch alebo výberoch cez špeciálne funkcie. Nechýba ani webové rozhranie v podobe Puppet Dashboard.
  • X.509 PKI- už spomínaná infraštruktúra certifikátov, ktorú je mimoriadne vhodné využiť aj pre ďalšie služby bez nutnosti spravovať samostatnú infraštruktúru.
  • MCollective- sa javí ako užitočná vec na spúšťanie úloh na serverovej farme na základe udalostí, ale autor má určitú nedôveru v bezpečnosť konkrétneho riešenia.
  • Puppet Forge- otvorená platforma na publikovanie a sťahovanie modulov.
  • niektoré ďalšie funkcie vo forme ovládacích prvkov externých zariadení typ zariadenia Cisco a nasadenie na holý kov, ale to je iný príbeh

Poznámky k bezpečnosti a dostupnosti

Musíte pochopiť, že bábkový server sa stáva zraniteľným miestom celej IT infraštruktúry, pretože... určuje konečnú konfiguráciu všetkých systémov. V špeciálnych prípadoch má zmysel urobiť oddelenie - samostatný server pre prvky kritickej infraštruktúry s extrémne obmedzený prístup a manuálna aktualizácia a druhá pre všetko ostatné.

Dostupnosť Puppet Server určuje schopnosť spravovať celú infraštruktúru. Má zmysel hostiť bábkový server na virtuálnom počítači v spoľahlivejšom a rýchlejšie obnoviteľnom cloude tretej strany, než sú vaše vlastné možnosti. Alebo by ste mali nainštalovať niekoľko serverov.

V žiadnom prípade by ste nemali inštalovať ďalšie služby do systému, kde bude nasadený Bábkový server so zvončekmi a píšťalkami. Pomôcť vám môže virtualizácia a kontajnerizácia.

Multi-master (niekoľko samostatných bábkových serverov)

  • V tomto prípade vystupuje ako CA (Certifikačná autorita) iba jeden server – jeho nedostupnosť znamená, že nie je možné pridávať nové uzly.
    • Puppet vám umožňuje používať infraštruktúru X.509 tretej strany, ak vstavaná nie je uspokojivá.
  • Celá konfigurácia (Prostredie) musí byť uložená v systéme správy verzií a nasadená na každý server súčasne.
  • Spoločná je len databáza PostgreSQL, ktorej organizácia vysokej dostupnosti je nad rámec tohto článku.
  • Modul cfpuppetserver podporuje inštalácie ako primárny (s CA) a ako sekundárny server.

Čo podstatné sa od starších verzií zmenilo

Výrobca má úplný popis.
  • Všetky služby sa presunuli pod JVM, JRuby a Jetty. Napriek zjavným výhodám integrácie existujú aj nevýhody z hľadiska spotreby pamäte.
  • Na spracovanie zbierok boli pridané funkcie lambda – teraz už nie je potrebné orezávať barličky v Ruby alebo perverzovať cez create_resources()
  • Objavil sa nástroj na spracovanie šablón EPP - v podstate rovnaký ERB, ale s Puppet DSL namiesto Ruby,
  • Predvolená adresárová štruktúra konfiguračných súborov sa výrazne zmenila
  • Pridaná podpora pre poskytovateľov údajov pre prostredia a moduly (hacky už nie sú potrebné).
  • Znižovanie úlohy globálnej Hiery. Nový a súvisiaci príkaz je bábkové vyhľadávanie.

Inštalácia

Tento proces je pomerne primitívny, ale vyžaduje dodržanie určitej postupnosti krokov. Keďže robiť to ručne je nevďačná úloha, autor vás naučí niečo zlé, a to sťahovanie nezrozumiteľných skriptov z internetu a ich spúšťanie ako root na vašom systéme.

Tri hlavné komponenty servera sú samotný Puppet Server, PuppetDB a PostgreSQL. Všetky môžu byť vtesnané do jedného uzla alebo rozdelené do dvoch alebo troch systémov. Bábkový server a Puppet DB je možné spustiť viackrát, ale PostgeSQL je jediným bodom zlyhania. Existujú rôzne prístupy k replikácii a klastrovaniu PostgeSQL. Pohodlný prístup v prípade hlavného a sekundárneho servera by bol Master + Read-Only Slave, ktorý je podporovaný v samotnej PuppetDB ako hlavný a iba na čítanie databázový uzol, ale automatizuje napr. nastavenie si vyžaduje čas, a preto ešte nie je k dispozícii zahrnuté v module cfpuppetserver.

Samotná konfigurácia sa dá jednoducho uložiť aspoň na systém súborov spolu s Bábkovým serverom, ale je to ako písanie skriptov na produkčnom webovom serveri. Najvhodnejším riešením je git repozitár. Nástroj r10k môže stiahnuť všetky vetvy úložiska a nasadiť ich na bábkový server ako samostatné prostredia. r10k je dosť zlý pri sťahovaní závislostí, takže navrch sa používa librarian-puppet. Okamžite stojí za zmienku, že hlavným kanonickým prostredím bábok je „výroba“. Preto by úložisko konfigurácií malo používať vetvu s názvom „výroba“ a nie „master“.

Požiadavky na systém

Hardvér popisuje samotný výrobca. Modul cfpuppetserver v súčasnosti podporuje iba Debian Jessie+ a Ubuntu Trusty+.

Konfigurácia v Git

Pre samotný r10k nezáleží na umiestnení úložiska - hlavná je jeho dostupnosť. Napríklad na testovacie účely môže byť úložisko hosťované na rovnakom systéme a prístupné cez file:// . Dobrým miestom na začiatok je príklad konfigurácie codingfuture/puppet-exampleenv.
  1. Klonovanie úložiska: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. Inštalácia Všeobecné nastavenia prístup správcu pomocou tipov v komentároch:
    • $EDITOR data/common.yaml
  3. Vytvorme konfiguráciu uzla:
    • $MY_DOMAIN – názov koreňovej domény (napríklad example.org)
    • $HOST_NAME - názov hostiteľa klienta bez domény
    • údaje mkdir/$MY_DOMAIN
    • cp data/example.com/puppet.yaml data/$(MY_DOMAIN)/buppet.yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/puppet.yaml - nastavenie uzla s Bábkovým serverom podľa návrhov v komentároch
    • cp data/example.com/host.yaml data/$(MY_DOMAIN)/$(HOST_NAME).yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/$(HOST_NAME).yaml – nastavenie ľubovoľného uzla na základe návrhov v komentároch
  4. Tlačíme na náš vlastný server Git alebo ho sprístupňujeme lokálne na uzle s bábkovým serverom cez rsync alebo scp. Lokálne úložisko je vhodné ako medzikrok, kým sa server Git nenasadí zo samotného Puppet. V istom zmysle to pripomína zostavenie kompilátora v niekoľkých fázach.

Inštalácia od začiatku na čistý systém

Modul cfpuppetserver vám umožňuje nainštalovať všetko pomocou samotného Puppet, ale pre počiatočnú inštaláciu sú základné operácie duplikované skriptom Bash.

V cieľovom systéme:

  1. Stiahnite si inštalačný skript: wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. Prezrieme si skript a zamračíme sa: menej setup_puppetserver.sh
  3. Spustite: bash setup_puppetserver.sh bábka.$(MY_DOMAIN) .
    • Príklad so vzdialeným úložiskom: bash setup_puppetserver.sh ssh:// [e-mail chránený]/puppet-conf
    • Príklad s lokálnym: bash setup_puppetserver.sh file:///root/puppetconf/
  4. Vidíme, ako sa systém nafúkne a nenainštaluje všetko veľmi rýchlo.
  5. Ak je úložisko vzdialené:
    • Vytvorte kľúč SSH pre root: ssh-keygen -t rsa -b 2048
    • Zaregistrujeme verejný kľúč /root/.ssh/id_rsa.pub na vzdialenom serveri Git...
    • ... a tam sme nastavili hák Git zavolaním nasledujúceho príkazu: /usr/bin/ssh -T deploypuppet@puppet.$(MY_DOMAIN) ./puppetdeploy.sh
  6. Začneme nasadzovať konfiguráciu manuálne: /etc/puppetlabs/deploy.sh
  7. Skúsme, ako to funguje na samotnom serveri: /opt/puppetlabs/bin/puppet agent --test
  8. Skontrolujte nastavenia siete, prepäťová ochrana a SSH prístup

Pridávanie spravovaných uzlov

  1. Plne kvalifikovaný názov bábkového servera musí byť dostupný cez DNS na spravovanom hostiteľovi alebo pevne zakódovaný do /etc/hosts.
    • Príklad: echo "128.1.1.1 puppet.example.com" >> /etc/hosts
  2. Na uzle s Bábkovým serverom spustite nasledujúci skript /root/genclientinit.sh $(HOST_NAME).$(MY_DOMAIN) .
  3. Skopírujte celý výsledok a vložte ho do príkazový riadok na cieľovom systéme.
  4. Počkáme na koniec vykonávania a spustíme /opt/puppetlabs/bin/puppet agent --test . Pri prvom spustení sa vygeneruje žiadosť o podpis certifikátu.
  5. Prejdeme do uzla Bábkového servera, aby sme podpísali certifikát.
    • zoznam bábkových certifikátov - kontrolujeme podpis certifikátu na extra paranoju.
    • bábkový certifikačný znak $(HOST_NAME).$(MY_DOMAIN) - v skutočnosti podpisujeme certifikát.
  6. Vrátime sa do riadeného uzla a znova spustíme: /opt/puppetlabs/bin/puppet agent --test`. To vynúti spustenie postupu nasadenia.
  7. Čakáme na dokončenie nasadenia cez Puppet Agent.
  8. To je všetko, máte pripravenú minimálnu Bábkovú infraštruktúru!

Príklad výstupu z /root/genclientinit.sh

bash</etc/cflocation fi if test ! -z ""; potom echo -n >/etc/cflocationpool fi if test ! -z "\$http_proxy"; potom exportujte http_proxy export https_proxy="\$http_proxy" export HTTP_PROXY="\$http_proxy" export HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! ktoré lsb-vydanie | čítať; potom apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; potom echo "Nepodarilo sa zistiť správny kódový názov" exit 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(codename).deb dpkg -i puppetlabs-release-pc1-\$(codename) .deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf<bábkový certifikačný znak host.example.com" echo "Použite CTRL+C na zastavenie cyklu, ak zlyhá z rôznych dôvodov" spánok 5 hotový EOT

Popis modulu

Kompletný zoznam parametrov Bash pre počiatočný inštalačný skript

~# ./setup_puppetserver.sh Použitie: ./setup_puppetserver.sh [ [ [ [] ] ] ]
  • r10k_repo_url - URI úložiska Git
  • certname - plne kvalifikovaný názov domény hostiteľa
  • cflocation - inicializácia faktu cf_location
  • cflocationpool - inicializácia faktu cf_location_pool
  • http_proxy - proxy server pre HTTP a HTTPS požiadavky

Kompletný zoznam parametrov Bash pre inicializačný skript klienta Puppet

~# /root/genclientinit.sh Použitie: ./genclientinit.sh [ [ []]]
Význam parametrov je rovnaký ako v predchádzajúcom skripte.

trieda cfpuppetserver

  • deployuser = "deploypuppet" - používateľské meno pre automatické nasadenie aktualizácií konfigurácie
  • deployuser_auth_keys = undef - zoznam kľúčov pre $deployuser
  • repo_url = undef - URI úložiska (príklad: ssh://user@host/repo alebo file:///some/path)
  • puppetserver = true - či sa má na tento uzol nainštalovať komponent Puppet Server
  • puppetdb = true - či sa má na tento uzol nainštalovať komponent PuppetDB
  • puppetdb_port = 8081 - port pre PuppetDB
  • setup_postgresql = true - či nainštalovať komponent PostgreSQL na tento uzol (iba ak je povolená inštalácia PuppetDB)
  • service_face = "any" - názov zdroja cfnetwork::iface na prijímanie prichádzajúcich pripojení
  • puppetserver_mem = auto - RAM pre bábkový server v megabajtoch (minimálne 192 MB)
  • puppetdb_mem = auto - RAM pre PuppetDB v megabajtoch (minimálne 192 MB)
  • postgresql_mem = auto - RAM pre PostgreSQL v megabajtoch (minimálne 128 MB)

trieda cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - adresa databázy
  • postgresql_listen = $postgresql_host – hodnota ide priamo do direktívy listen_addresses PostgreSQL
  • postgresql_port = 5432 - port databázy
  • postgresql_user = "puppetdb" - Používateľ PuppetDB v databáze
  • postgresql_pass = "puppetdb" - heslo používateľa PuppetDB v databáze
  • postgresql_ssl = false - povoliť šifrovanie pripojenia na základe certifikátov Puppet PKI

trieda cfpuppetserver::puppetserver

  • autosign = false - NESMIE byť použité v bojovom prostredí, snáď okrem DMZ. Existuje výlučne na automatizáciu testovania.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - cesta k predvolenému konfiguračnému súboru Hiera podľa kánonov Puppet (prvá súčasť je názov modulu, zvyšok je cesta pod súbormi/priečinkom v module)

Môžete pomôcť a previesť nejaké prostriedky na rozvoj stránky



Správa veľkého počtu unixových systémov sa nedá nazvať pohodlnou. Na zmenu jedného parametra musí administrátor kontaktovať každý stroj, skripty môžu pomôcť len čiastočne a nie vo všetkých situáciách.

Treba uznať, že správcovia siete Windows sú stále vo výhodnejšej pozícii. Stačí zmeniť nastavenia skupinovej politiky a po chvíli sa o novinke „dozvedia“ všetky počítače v sieti, vrátane tých s nedávno nainštalovaným operačným systémom, ak sa ich to samozrejme týka. Pri pohľade späť na dlhé obdobie vývoja Unixu si všimnete, že nič také sa nikdy neuchytilo. Existujú riešenia, ako je kickstart, ktoré pomáhajú s počiatočnou inštaláciou operačný systém, ale ďalšie zdokonaľovanie si bude vyžadovať značné úsilie. Komerčné riešenia ako BladeLogic a OpsWare riešia problém automatizácie nastavení len čiastočne, ich hlavnou výhodou je dostupnosť GUI a možno ich zakúpiť iba od veľkých organizácií. Projekty ponúkajúce bezplatné riešenia samozrejme existujú, no za celú dobu svojej existencie nikdy nedokázali vytvoriť veľkú komunitu. Napríklad Cfengine nie je medzi administrátormi veľmi obľúbený, hoci okrem Linuxu ho možno použiť aj v *BSD, Windows a Mac OS X. Môže to byť spôsobené relatívnou zložitosťou vytvárania konfigurácií. Pri popise úloh musíte brať do úvahy vlastnosti každého špecifického systému a manuálne riadiť postupnosť akcií pri vykonávaní príkazov. To znamená, že správca si musí pamätať, že pre niektoré systémy by ste mali napísať adduser pre iné, useradd, vziať do úvahy umiestnenie súborov na rôznych systémoch atď. To rádovo komplikuje proces zápisu príkazov, za chodu je veľmi ťažké vytvoriť správnu konfiguráciu a po chvíli je takmer nemožné vytvorené konfigurácie prečítať. Napriek GPL licencii je Cfengine vlastne projektom jedného človeka, ktorý kontroluje všetky zmeny a nemá veľký záujem o budovanie otvorenej spoločnosti. V dôsledku toho sú možnosti cfengine pre vývojára celkom uspokojivé, ale pre ostatných správcov je to skôr bolesť hlavy navyše. Na zlepšenie cfengine boli vývojármi tretích strán vytvorené rôzne doplnky, ktoré situáciu často len zhoršili. Autor niekoľkých takýchto modulov pre cfengine, Luke Kanies, sa nakoniec rozhodol vyvinúť podobný nástroj, ale bez mnohých nedostatkov cfengine.

Vlastnosti bábky

Puppet, podobne ako cfengine, je systém klient-server, ktorý používa deklaratívny, teda povinný jazyk na popis úloh a knižníc na ich implementáciu. Klienti sa pravidelne (štandardne 30 minút) pripájajú k centrálnemu serveru a dostávajú najnovšiu konfiguráciu. Ak prijaté nastavenia nezodpovedajú stavu systému, vykonajú sa av prípade potreby sa na server odošle správa o vykonaných operáciách. Server môže ukladať správy do syslogu alebo súboru, vytvárať RRD graf a posielať ich na určený e-mail. Dodatočné vrstvy transakčnej a abstrakcie zdrojov poskytujú maximálnu kompatibilitu s existujúcimi nastaveniami a aplikáciami, čo vám umožňuje sústrediť sa na systémové objekty bez obáv z rozdielov v implementácii a popise podrobných príkazov a formátov súborov. Administrátor operuje len s typom objektu, o zvyšok sa postará Puppet. Typ balíkov teda pozná asi 17 balíkových systémov, požadovaný sa automaticky rozpozná na základe informácie o verzii distribúcie alebo systému, aj keď v prípade potreby môže byť správca balíkov nútený.

Na rozdiel od skriptov, ktoré často nie je možné použiť na iných systémoch, konfigurácie bábok napísané správcami tretích strán budú z väčšej časti fungovať bez problémov v akejkoľvek inej sieti. V bábkovej kuchárke [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2Crecipe] už sú tri desiatky hotových receptov. Puppet v súčasnosti oficiálne podporuje nasledujúce operačné systémy a služby: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo a MySQL, LDAP.

Bábkový jazyk

Aby ste sa posunuli vpred, musíte najprv pochopiť základné prvky a možnosti jazyka. Jazyk je jedným z silné stránky Bábka. S jeho pomocou sú opísané zdroje, ktoré správca plánuje spravovať, a akcie. Na rozdiel od väčšiny podobných riešení, Puppet umožňuje jazyku zjednodušiť prístup ku všetkým podobným zdrojom na akomkoľvek systéme v heterogénnom prostredí. Popis prostriedku zvyčajne pozostáva z názvu, typu a atribútov. Ukážme napríklad na súbor /etc/passwd a nastavte jeho atribúty:

súbor("/etc/passwd":

vlastník => root,

skupina => koreň,

Teraz klienti po pripojení k serveru skopírujú súbor /etc/passwd a nainštalujú zadané atribúty. V jednom pravidle môžete definovať viacero zdrojov, pričom ich oddelíte bodkočiarkou. Čo robiť, ak sa konfiguračný súbor používaný na serveri líši od klientskeho alebo sa nepoužíva vôbec? Táto situácia môže nastať napríklad vtedy, keď Nastavenia VPN spojenia. V tomto prípade je možné na súbor poukázať pomocou zdrojovej smernice. Tu sú ako obvykle dve možnosti, ako zadať cestu k inému súboru, podporované sú aj dva protokoly URI: súbor a bábka. V prvom prípade odkaz na externý NFS server, v druhej možnosti sa na serveri Puppet spustí služba podobná NFS, ktorá exportuje zdroje. V druhom prípade je predvolená cesta relatívna ku koreňovému adresáru bábky - /etc/puppet. To znamená, že odkaz puppet://server.domain.com/config/sshd_config bude zodpovedať súboru /etc/puppet/config/sshd_config. Tento adresár môžete prepísať pomocou direktívy filebucket, aj keď správnejšie je použiť sekciu s rovnakým názvom v súbore /etc/puppet/fileserver.conf. V tomto prípade môžete obmedziť prístup k službe len z určitých adries. Napríklad popíšme konfiguračnú sekciu.

cesta /var/puppet/config

povoliť *.domena.com

povoliť 192.168.0.*

povoliť 192.168.1.0/24

zamietnuť *.wireless.domain.com

A potom sa obrátime na túto časť pri popise zdroja.

zdroj => "puppet://server.domain.com/config/sshd_config"

Pred dvojbodkou je názov zdroja. V najjednoduchších prípadoch môžete jednoducho zadať alias alebo premenné ako názov. Alias ​​sa nastavuje pomocou direktívy alias. úplná cesta k súboru. V zložitejších konfiguráciách

súbor("/etc/passwd":

alias => passwd

Ďalšia možnosť vytvorenia aliasu je dobrá, keď sa musíte vysporiadať s rôznymi operačnými systémami. Napríklad vytvorte zdroj popisujúci súbor sshd_config:

súbor (sshdconfig:

meno => $operačný systém ? (

solaris => "/usr/local/etc/ssh/sshd_config",

predvolené => "/etc/ssh/sshd_config"

V tomto príklade stojíme pred voľbou. Súbor pre Solaris je špecifikovaný samostatne, pre všetky ostatné sa vyberie súbor /etc/ssh/sshd_config. Teraz je možné k tomuto prostriedku pristupovať ako sshdconfig, v závislosti od operačného systému sa vyberie požadovaná cesta. Napríklad uvádzame, že ak je démon sshd spustený a prijatý nový súbor, mali by ste službu reštartovať.

zabezpečiť => pravda,

predplatiť => Súbor

Pri práci s používateľskými údajmi sa často používajú premenné. Napríklad popíšeme umiestnenie domovských adresárov používateľov:

$homeroot = "/home"

Teraz je možné pristupovať k súborom konkrétneho používateľa ako

$(homeroot)/$name

Parameter $name bude vyplnený názvom účtu používateľa. V niektorých prípadoch je vhodné definovať predvolenú hodnotu pre niektorý typ. Napríklad pre typ exec často označujú adresáre, v ktorých by mal hľadať spustiteľný súbor:

Exec (cesta => "/usr/bin:/bin:/usr/sbin:/sbin")

Ak potrebujete ukázať na niekoľko vnorených súborov a adresárov, môžete použiť parameter recurse.

súbor("/etc/apache2/conf.d":

zdroj => “puppet:// puppet://server.domain.com/config/apache/conf.d”,

rekurz => "pravda"

Viaceré zdroje možno kombinovať do tried alebo definícií. Triedy predstavujú úplný popis systému alebo služby a používajú sa samostatne.

"/etc/passwd": vlastník => root, skupina => root, režim => 644;

"/etc/shadow": vlastník => root, skupina => root, režim => 440

Rovnako ako v objektovo orientovaných jazykoch je možné triedy prepísať. Napríklad na FreeBSD je vlastníkom skupiny týchto súborov wheel. Preto, aby sme zdroj neprepísali úplne, vytvorme novú triedu freebsd, ktorá zdedí linuxovú triedu:

trieda freebsd dedí linux (

Súbor[“/etc/passwd”] ( skupina => koliesko );

Súbor[“/etc/shadow”] ( skupina => koliesko )

Pre pohodlie je možné všetky triedy umiestniť do samostatného súboru, ktorý je možné prepojiť pomocou direktívy include. Definície môžu mať viacero parametrov ako argumenty, ale nepodporujú dedičnosť a používajú sa, keď potrebujete opísať opakovane použiteľné objekty. Napríklad definujme domovský adresár používateľov a príkazy potrebné na vytvorenie nového účtu.

definovať user_homedir ($group, $fullname, $ingroups) (

user("$name":

zabezpečiť => prítomný,

komentár => "$fullname",

gid => "$skupina",

skupiny => $ingroups,

členstvo => minimum,

shell => "/bin/bash",

home => "/home/$name",

vyžadovať => Skupina[$group],

exec("$name homedir":

príkaz => “/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name",

vytvorí => "/home/$name",

vyžadovať => User[$name],

Teraz vytvorte nový účtu stačí kontaktovať user_homedir.

user_homedir("sergej":

skupina => "sergej",

celé meno => “Sergej Jaremchuk”,

ingroups => ["media", "admin]

Existujú samostatné popisy uzlov, ktoré podporujú triedy podobné dedičnosti. Keď sa klient pripojí k serveru Puppet, vyhľadá sa príslušná sekcia uzla a poskytnú sa nastavenia špecifické len pre tento počítač. Na popis všetkých ostatných systémov môžete použiť predvolené nastavenie uzla. Popis všetkých typov je uvedený v dokumente „Type Reference“, ktorý si v každom prípade musíte prečítať, aspoň aby ​​ste pochopili všetky možnosti jazyka Puppet. Rôzne druhy vám umožňujú vykonávať špecifikované príkazy, vrátane prípadu, keď sú splnené určité podmienky (napríklad zmena konfiguračného súboru), pracovať s cron, používateľskými povereniami a skupinami, počítačmi, pripájať prostriedky, spúšťať a zastavovať služby, inštalovať, aktualizovať a odstraňovať balíky, pracovať s SSH kľúče, zóny Solaris a pod. Takto jednoducho je možné vynútiť aktualizáciu zoznamu balíkov v distribúciách pomocou apt každý deň medzi 2 a 4 hodinami.

rozvrh (denne:

obdobie => denne,

rozsah =>

exec("/usr/bin/apt-get update":

rozvrh => denne

Aktualizáciu za toto obdobie vykoná každý systém iba raz, potom sa úloha považuje za dokončenú a bude z klientskeho počítača vymazaná. Jazyk Puppet podporuje ďalšie známe štruktúry: podmienky, funkcie, polia, komentáre a podobne.

Inštalácia bábky

Puppet vyžaduje Ruby (>= 1.8.1) s podporou OpenSSL a XMLRPC knižnicami, ako aj Faster library [ http://reductivelabs.com/projects/facter]. Úložisko Ubuntu 7.04, ktoré bolo použité na testovaciu inštaláciu, už obsahovalo balík pre šteniatko.

$ sudo apt-cache vyhľadávacia bábka

bábka — centralizovaná správa konfigurácie pre siete

puppetmaster - centralizovaný riadiaci démon správy konfigurácie

Počas inštalácie sa nainštalujú všetky potrebné balíčky závislostí: facter libopenssl-ruby libxmlrpc-ruby.

$ sudo apt-get nainštalujte bábkový majster

Dostupnosť knižníc Ruby môžete skontrolovať pomocou príkazu.

$ ruby ​​​​-ropenssl -e "puts:yep"

~$ ruby ​​​​-rxmlrpc/client -e "puts:yep"

Ak sa neobjavia žiadne chyby, všetko, čo potrebujete, je už zahrnuté. Súbory, ktoré popisujú požadovanú konfiguráciu systémov, sa v terminológii Puppet nazývajú manifesty. Po spustení sa démon pokúsi prečítať súbor /etc/puppet/manifests/site.pp, ak chýba, zobrazí varovnú správu. Pri testovaní môžete démonovi povedať, aby pracoval v režime offline, v takom prípade sa manifest nevyžaduje

$ sudo /usr/bin/puppetmasterd --nonodes

V prípade potreby môžete k site.pp pripojiť ďalšie súbory, napríklad s popismi tried. Pre skúšobnú prevádzku môžete do tohto súboru zadať najjednoduchšie pokyny.

súbor("/etc/sudoers":

vlastník => root,

skupina => koreň,

Všetky konfiguračné súbory pre server aj klientov sa nachádzajú v /etc/puppet. Súbor fileserver.conf, o ktorom sme hovorili vyššie, je voliteľný a používa sa iba v prípade, že Puppet bude fungovať aj ako súborový server. Na Ubuntu tento súbor exportuje podadresár /etc/puppet/files. Podadresár ssl obsahuje certifikáty a kľúče, ktoré sa použijú na šifrovanie pri pripájaní klientov. Kľúče sa vytvoria automaticky pri prvom spustení puppetmasterd; môžete ich vytvoriť manuálne pomocou príkazu.

$ sudo /usr/bin/ puppetmasterd --mkusers.

Súbory puppetd.conf a puppetmasterd.conf sú podobné. Označujú niektoré parametre pre činnosť démonov na klientskom systéme a serveri. Súbor klienta sa líši iba prítomnosťou parametra server, ktorý ukazuje na počítač, na ktorom beží puppetmasterd.

server = grinder.com

logdir = /var/log/puppet

vardir = /var/lib/puppet

rundir = /var/run

# poslať správu na server

Aby ste sa vyhli zadávaniu všetkého ručne, môžete si vytvoriť šablónu pomocou samotného puppetd.

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Podobne môžete vytvoriť site.pp na serveri.

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Ďalší súbor, tagmail.conf, vám umožňuje určiť e-mailové adresy, na ktoré sa budú odosielať prehľady. V najjednoduchšom prípade môžete použiť jeden riadok.

všetko: [e-mail chránený]

Konfiguračné súbory nestačia na to, aby sa klient mohol pripojiť k serveru. Aby ste to mohli urobiť, musíte tiež podpísať certifikáty. Najprv, aby ste dali serveru vedieť o novom počítači v klientskom systéme, zadajte príkaz:

$ sudo puppetd --server grinder.com --waitforcert 60 --test

info: Žiadosť o certifikát

varovanie: Partnerský certifikát nebude v tejto relácii SSL overený

upozornenie: Nedostal som certifikát

Ak sa vráti iný riadok, mali by ste skontrolovať fungovanie servera.

$ ps aux | grep bábka

bábka 5779 0,0 1,4 27764 15404 ? Ssl 21:49 0:00 ruby ​​​​/usr/sbin/puppetmasterd

Firewall musí umožňovať pripojenia na porte 8140.

Na server dostaneme zoznam certifikátov, ktoré je potrebné podpísať.

$ sudo puppetca --list

nomad.grinder.com

A podpisujeme klientsky certifikát.

$ sudo puppetca –sign nomad.grinder.com

Teraz sa klient môže voľne pripojiť k serveru a prijímať nastavenia.

Bohužiaľ, jednoducho nie je možné v článku ukázať všetky schopnosti Puppet. Ako však vidíte, ide o funkčný a flexibilný nástroj, ktorý vám umožní vyriešiť väčšinu problémov súčasnej správy veľkého množstva systémov. Ak váš odbor vyžaduje, aby ste nastavili niekoľko systémov. A čo je najdôležitejšie, projektu sa podarilo zhromaždiť malú, ale neustále rastúcu komunitu. Dúfajme preto, že dobrý nápad nenechá zomrieť alebo ísť bokom.

Bábka je multiplatformová štruktúra, ktorá umožňuje správcov systému Vykonajte bežné úlohy pomocou kódu. Kód vám umožňuje vykonávať rôzne úlohy od inštalácie nových programov až po kontrolu povolení súborov alebo aktualizáciu používateľských účtov. Bábka nadradený nielen pri prvotnej inštalácii systému, ale počas celého životného cyklu systému. Väčšinou bábka používané v konfigurácii klient/server.

Táto časť zobrazuje inštaláciu a konfiguráciu Bábka v konfigurácii klient/server. Tento jednoduchý príklad ukazuje, ako nainštalovať Apache použitím Bábka.

Inštalácia

Na inštaláciu Bábka zadajte do terminálu:

Sudo apt-get install puppetmaster

Na klientskom počítači (zariadeniach) zadajte:

Sudo apt-get nainštalovať bábku

nastavenie

Pred nastavením bábky možno budete chcieť pridať položku DNS CNAME Pre bábka.example.com, Kde example.com- toto je vaša doména. Predvolených klientov Bábka skontrolujte DNS pre puppet.example.com ako názov bábkového servera ( Bábkar). Ďalšie podrobnosti o používaní DNS nájdete v časti Služba názvov domén.

Ak nemáte v úmysle používať DNS, môžete pridať položky do súboru /etc/hosts na serveri a klientovi. Napríklad v súbore /etc/hosts Bábka pridať server:

127.0.0.1 localhost.localdomain localhost bábka 192.168.1.17 meercat02.example.com meercat02

Na každom Bábka V klientovi pridajte položku pre server:

192.168.1.16 suricat.example.com bábka suricat

Nahraďte adresy IP a názvy domén od príkladu po vaše aktuálne adresy a názvy servera a klientov.

Teraz nastavíme nejaké zdroje pre apache2. Vytvorte súbor /etc/puppet/manifests/site.pp obsahujúce nasledovné:

Balíček ( "apache2": zaistenie => nainštalované ) služba ( "apache2": zaistenie => pravda, povoliť => pravda, vyžadovať => Balík["apache2"] )

Uzol "meercat02.example.com" (vrátane apache2)

Nahradiť meercat02.example.com na vaše aktuálne meno Bábka zákazník.

Posledný krok pre tento jednoduchý Bábka server má reštartovať službu:

Sudo /etc/init.d/puppetmaster reštartujte

Teraz Bábka všetko je nakonfigurované na serveri a je čas nakonfigurovať klienta.

Najprv nakonfigurujeme službu Bábka agent na spustenie. Upravte /etc/default/puppet a nahraďte hodnotu ŠTART na Áno:

Sudo /etc/init.d/puppet start

Vráťme sa k Bábka server podpísať klientsky certifikát pomocou príkazu:

Sudo puppetca --sign meercat02.example.com

Skontrolujte /var/log/syslog pre prípadné chyby konfigurácie. Ak všetko prebehlo v poriadku, balík apache2 a jeho závislosti sa nainštalujú do Bábka zákazník.

Tento príklad je veľmi jednoduchý a neukazuje veľa funkcií a výhod. Bábka. Pre Ďalšie informácie pozri

Sergej Jaremčuk

Centralizovaná konfigurácia UNIXových systémov pomocou Puppet

Správa veľkého počtu UNIXových systémov sa nedá nazvať pohodlnou. Na zmenu jedného parametra musí administrátor kontaktovať každý stroj, skripty môžu pomôcť len čiastočne a nie vo všetkých situáciách.

Treba uznať, že správcovia siete Windows sú stále vo výhodnejšej pozícii. Stačí zmeniť nastavenia skupinovej politiky a po chvíli sa o novinke „dozvedia“ všetky počítače v sieti, vrátane tých s nedávno nainštalovaným operačným systémom, ak sa ich to samozrejme týka. Keď sa pozriete späť na dlhé obdobie vývoja UNIXu, môžete vidieť, že nič také sa nikdy neuchytilo. Existujú riešenia ako kickstart, ktoré pomáhajú s počiatočnou inštaláciou operačného systému, no ďalší vývoj si bude vyžadovať značné úsilie. Komerčné riešenia ako BladeLogic a OpsWare riešia problém automatizácie nastavení len čiastočne, ich hlavnou výhodou je prítomnosť grafického rozhrania a ich nákup si môžu dovoliť len veľké organizácie. Existujú samozrejme projekty, ktoré ponúkajú bezplatné riešenia, no za celú dobu svojej existencie nedokázali vytvoriť veľkú komunitu. Napríklad Cfengine nie je medzi správcami veľmi obľúbený, hoci okrem Linuxu sa dá použiť aj v *BSD, Windows a Mac OS X. Môže to byť spôsobené relatívnou zložitosťou vytvárania konfigurácií. Pri popise úloh je potrebné brať do úvahy vlastnosti každého konkrétneho systému a manuálne riadiť postupnosť akcií pri vykonávaní príkazov. To znamená, že správca si musí pamätať, že pre niektoré systémy by ste mali napísať adduser, pre iné - useradd, brať do úvahy umiestnenie súborov na rôznych systémoch atď. To rádovo komplikuje proces zápisu príkazov, za chodu je veľmi ťažké vytvoriť správnu konfiguráciu a po chvíli je takmer nemožné vytvorené konfigurácie prečítať. Napriek GPL licencii je Cfengine v podstate projektom jedného človeka, ktorý kontroluje všetky zmeny a nemá veľký záujem o budovanie otvorenej spoločnosti. Vo výsledku sú možnosti Cfengine pre vývojára celkom uspokojivé, no pre ostatných administrátorov je to skôr bolesť hlavy navyše. Na zlepšenie Cfengine boli vývojármi tretích strán vytvorené rôzne doplnky, ktoré situáciu často len zhoršili. Autor niekoľkých takýchto modulov pre Cfengine, Luke Kanies, sa nakoniec rozhodol vyvinúť podobný nástroj, no bez mnohých nedostatkov Cfengine.

Vlastnosti bábky

Puppet, podobne ako Cfengine, je systém klient-server, ktorý používa deklaratívny jazyk na popis úloh a knižnice na ich implementáciu. Klienti sa pravidelne (štandardne každých 30 minút) pripájajú k centrálnemu serveru a dostávajú najnovšiu konfiguráciu. Ak prijaté nastavenia nezodpovedajú stavu systému, vykonajú sa av prípade potreby sa na server odošle správa o vykonaných operáciách. Server správ ich môže uložiť do syslogu alebo súboru, vytvoriť graf RRD a poslať ho na zadaný e-mail. Dodatočné vrstvy transakčnej a abstrakcie zdrojov poskytujú maximálnu kompatibilitu s existujúcimi nastaveniami a aplikáciami, čo vám umožňuje zamerať sa na systémové objekty bez obáv z rozdielov v implementácii a popise podrobných príkazov a formátov súborov. Administrátor operuje len s typom objektu, o zvyšok sa postará Puppet. Typ balíkov teda pozná asi 17 balíkových systémov, požadovaný bude automaticky rozpoznaný na základe informácie o verzii distribúcie alebo systému, aj keď v prípade potreby je možné správcu balíkov nastaviť násilne.

Na rozdiel od skriptov, ktoré sa často nedajú použiť na iných systémoch, konfigurácie bábok napísané správcami tretích strán budú väčšinou fungovať bez problémov v akejkoľvek inej sieti. Bábková kuchárka má už tri desiatky hotových receptov. Puppet v súčasnosti oficiálne podporuje nasledujúce operačné systémy a služby: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo a MySQL, LDAP.

Bábkový jazyk

Aby ste sa posunuli vpred, musíte najprv pochopiť základné prvky a možnosti jazyka. Jazyk je jednou zo silných stránok Puppet. Popisuje zdroje, ktoré správca plánuje spravovať, a akcie, ktoré vykonáva. Na rozdiel od väčšiny podobných riešení, Puppet umožňuje jazyku zjednodušiť prístup ku všetkým podobným zdrojom na akomkoľvek systéme v heterogénnom prostredí. Popis prostriedku zvyčajne pozostáva z názvu, typu a atribútov. Ukážme napríklad na súbor /etc/passwd a nastavte jeho atribúty:

súbor("/etc/passwd":

Vlastník => root,

Skupina => root,

Režim => 644,

Teraz klienti pripájajúci sa k serveru skopírujú súbor /etc/passwd a nastavia zadané atribúty. V jednom pravidle môžete definovať viacero zdrojov, pričom ich oddelíte bodkočiarkou. Čo ak sa však konfiguračný súbor používaný na serveri líši od klientskeho súboru alebo sa nepoužíva vôbec? Táto situácia môže nastať napríklad pri nastavovaní pripojení VPN. V tomto prípade by ste mali ukázať na súbor pomocou zdrojovej direktívy. Tu sú dve možnosti; ako obvykle môžete zadať cestu k inému súboru a tiež pomocou dvoch podporovaných protokolov URI: súbor a bábka. V prvom prípade sa používa prepojenie na externý server NFS, v druhom prípade sa na serveri Puppet spustí služba podobná NFS, ktorá exportuje zdroje. V druhom prípade je predvolená cesta relatívna ku koreňovému adresáru bábky – /etc/puppet. To znamená, že odkaz puppet://server.domain.com/config/sshd_config bude zodpovedať súboru /etc/puppet/config/sshd_config. Tento adresár môžete prepísať pomocou direktívy filebucket, aj keď správnejšie je použiť sekciu s rovnakým názvom v súbore /etc/puppet/fileserver.conf. V tomto prípade môžete obmedziť prístup k službe len na určité adresy. Napríklad popíšme konfiguračnú sekciu:

Cesta /var/puppet/config

Povoliť *.domena.com

Povoliť 127.0.0.1

Povoliť 192.168.0.*

Povoliť 192.168.1.0/24

Zakázať *.wireless.domain.com

A potom sa pri popise zdroja odvolávame na túto časť:

zdroj => "puppet://server.domain.com/config/sshd_config"

Pred dvojbodkou je názov zdroja. V najjednoduchších prípadoch môžete ako názov jednoducho zadať úplnú cestu k súboru. V zložitejších konfiguráciách je lepšie použiť alias alebo premenné. Alias ​​sa nastavuje pomocou direktívy alias:

súbor("/etc/passwd":

Alias ​​​​=> passwd

Ďalšia možnosť vytvorenia aliasu je dobrá, keď sa musíte vysporiadať s rôznymi operačnými systémami. Napríklad vytvorte zdroj, ktorý popisuje súbor sshd_config:

súbor (sshdconfig:

Meno => $ operačný systém ? (

Solaris => "/usr/local/etc/ssh/sshd_config",

Predvolené => "/etc/ssh/sshd_config"

V tomto príklade stojíme pred voľbou. Súbor pre Solaris je špecifikovaný samostatne, pre všetky ostatné sa vyberie súbor /etc/ssh/sshd_config. Teraz je možné k tomuto prostriedku pristupovať ako sshdconfig, v závislosti od operačného systému sa vyberie požadovaná cesta. Napríklad uvádzame, že ak je spustený démon sshd a je prijatý nový súbor, služba by sa mala reštartovať:

služba (sshd:

Uistite sa, že => pravda,

Odoberať => Súbor

Pri práci s používateľskými údajmi sa často používajú premenné. Napríklad popíšeme umiestnenie domovských adresárov používateľov:

$homeroot = "/home"

Teraz je možné pristupovať k súborom konkrétneho používateľa ako:

$(homeroot)/$name

Parameter $name bude vyplnený názvom účtu používateľa. V niektorých prípadoch je vhodné definovať predvolenú hodnotu pre niektorý typ. Napríklad pre typ exec je veľmi bežné špecifikovať adresáre, v ktorých má hľadať spustiteľný súbor:

Exec ( cesta => "/usr/bin:/bin:/usr/sbin:/sbin" )

Ak potrebujete ukázať na niekoľko vnorených súborov a adresárov, môžete použiť parameter recurse:

súbor("/etc/apache2/conf.d":

Zdroj => "puppet:// puppet://server.domain.com/config/apache/conf.d",

Rekurz => "pravda"

Viaceré zdroje možno kombinovať do tried alebo definícií. Triedy sú úplným popisom systému alebo služby a používajú sa samostatne:

trieda linux (

Súbor (

"/etc/passwd": vlastník => root, skupina => root, režim => 644;

"/etc/shadow": vlastník => root, skupina => root, režim => 440

Rovnako ako v objektovo orientovaných jazykoch je možné triedy prepísať. Napríklad na FreeBSD je vlastníkom skupiny týchto súborov wheel. Preto, aby sme zdroj neprepísali úplne, vytvorme novú triedu freebsd, ktorá zdedí linuxovú triedu:

trieda freebsd dedí linux (

Súbor["/etc/passwd"] ( skupina => koliesko );

Súbor["/etc/shadow"] ( skupina => koliesko )

Pre pohodlie môžu byť všetky triedy umiestnené v samostatnom súbore, ktorý musí byť zahrnutý pomocou direktívy include. Definície môžu mať viacero parametrov ako argumenty, ale nepodporujú dedičnosť a používajú sa, keď potrebujete opísať opakovane použiteľné objekty. Napríklad definujme domovský adresár používateľa a príkazy potrebné na vytvorenie nového účtu:

definovať user_homedir ($group, $fullname, $ingroups) (

Používateľ("$name":

Zabezpečte => prítomný,

Komentár => "$fullname",

Gid => "$skupina",

Skupiny => $ingroups,

Členstvo => minimum,

Shell => "/bin/bash",

Domov => "/home/$name",

Vyžadovať => Skupina[$group],

Exec("$name homedir":

Príkaz => "/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name",

Vytvorí => "/home/$name",

Vyžadovať => Používateľ[$name],

Ak chcete vytvoriť nový účet, stačí kontaktovať user_homedir:

user_homedir("sergej":

Skupina => "sergej",

Celé meno => "Sergej Jaremchuk",

Ingroups => ["médiá", " admin]

Existujú samostatné popisy uzlov, ktoré podporujú dedičnosť, ako aj triedy. Keď sa klient pripojí k serveru Puppet, vyhľadá sa príslušná sekcia uzla a poskytnú sa nastavenia špecifické len pre tento počítač. Na popis všetkých ostatných systémov môžete použiť predvolené nastavenie uzla. Popis všetkých typov je uvedený v dokumente „Type Reference“, ktorý si v každom prípade musíte prečítať, aspoň aby ​​ste pochopili všetky možnosti jazyka Puppet. Rôzne typy vám umožňujú vykonávať špecifikované príkazy, vrátane prípadu, keď sú splnené určité podmienky (napríklad zmena konfiguračného súboru), prácu s cronom, používateľskými povereniami a skupinami, počítačmi, pripájaním prostriedkov, spúšťaním a zastavovaním služieb, inštaláciou, aktualizáciou a odstraňovaním balíkov. , práca s kľúčmi SSH, zónami Solaris atď. Takto môžete jednoducho vynútiť, aby sa zoznam balíkov v distribúciách pomocou apt aktualizoval denne medzi 2 a 4 hodinami:

rozvrh (denne:

Obdobie => denne,

Rozsah =>

exec("/usr/bin/apt-get update":

Rozvrh => denne

Aktualizáciu za toto obdobie vykoná každý systém iba raz, potom sa úloha považuje za dokončenú a bude z klientskeho počítača vymazaná. Jazyk Puppet podporuje ďalšie známe štruktúry: podmienky, funkcie, polia, komentáre a podobne.

Inštalácia bábky

Puppet vyžaduje Ruby (verziu 1.8.1 a vyššiu) s podporou OpenSSL a XMLRPC knižnicami, ako aj knižnicu Faster. Úložisko Ubuntu 7.04, ktoré bolo použité na testovaciu inštaláciu, už obsahuje balík puppy:

$ sudo apt-cache vyhľadávacia bábka

~$ ruby ​​​​-rxmlrpc/client -e "puts:yep"

áno

Ak sa neobjavia žiadne chyby, všetko, čo potrebujete, je už zahrnuté. Súbory, ktoré popisujú požadovanú konfiguráciu systémov, sa v terminológii Puppet nazývajú manifesty. Po spustení sa démon pokúsi prečítať súbor /etc/puppet/manifests/site.pp, ak chýba, zobrazí varovnú správu. Pri testovaní môžete démonovi povedať, aby pracoval v samostatnom režime, ktorý nevyžaduje manifest:

$ sudo /usr/bin/puppetmasterd --nonodes

V prípade potreby môžete k site.pp pripojiť ďalšie súbory, napríklad s popismi tried. Pre skúšobnú prevádzku môžete do tohto súboru zadať najjednoduchšie pokyny.

trieda sudo(

Súbor("/etc/sudoers":

Vlastník => root,

Skupina => root,

Režim => 440,

predvolený uzol (

Zahrňte sudo

Všetky konfiguračné súbory, server aj klient, sa nachádzajú v /etc/puppet. Súbor fileserver.conf, o ktorom sme už hovorili, je voliteľný a používa sa iba v prípade, že Puppet bude fungovať aj ako súborový server. Na Ubuntu tento súbor exportuje podadresár /etc/puppet/files. Podadresár ssl obsahuje certifikáty a kľúče, ktoré sa použijú na šifrovanie pri pripájaní klientov. Kľúče sa vytvoria automaticky pri prvom spustení puppetmasterd; môžete ich vytvoriť manuálne pomocou príkazu:

$ sudo /usr/bin/puppetmasterd --mkusers

Súbory puppetd.conf a puppetmasterd.conf sú podobné. Označujú niektoré parametre pre činnosť démonov na klientskom systéme a serveri. Súbor klienta sa líši iba prítomnosťou parametra servera, ktorý ukazuje na počítač, na ktorom beží puppetmasterd:

server = grinder.com

logdir = /var/log/puppet

vardir = /var/lib/puppet

rundir = /var/run

# poslať správu na server

správa = pravda

Aby ste sa vyhli zadávaniu všetkého ručne, môžete vytvoriť šablónu pomocou samotného puppetd:

$ puppetd --genconfig > /etc/puppet/puppetd.conf

Podobne môžete vytvoriť site.pp na serveri:

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

Ďalší súbor, tagmail.conf, vám umožňuje zadať e-mailové adresy, na ktoré sa budú odosielať prehľady. V najjednoduchšom prípade môžete použiť jeden riadok:

všetko: [e-mail chránený]

Konfiguračné súbory nestačia na to, aby sa klient mohol pripojiť k serveru. Aby ste to mohli urobiť, musíte tiež podpísať certifikáty.

Najprv, aby ste dali serveru vedieť o novom počítači, zadajte príkaz na klientskom systéme:

$ sudo puppetd --server grinder.com --waitforcert 60 –test

Firewall musí umožňovať pripojenia na porte 8140.

Na serveri dostaneme zoznam certifikátov, ktoré je potrebné podpísať:

$ sudo puppetca –list

nomad.grinder.com

A podpíšte klientsky certifikát:

$ sudo puppetca –sign nomad.grinder.com

Teraz sa klient môže voľne pripojiť k serveru a prijímať nastavenia.

Bohužiaľ nie je možné v článku ukázať všetky schopnosti Puppet. Ako však vidíte, ide o funkčný a flexibilný nástroj, ktorý vám umožní vyriešiť väčšinu problémov súčasnej správy veľkého počtu systémov. A čo je najdôležitejšie, projektu sa podarilo zhromaždiť malú, ale neustále rastúcu komunitu. Dúfajme preto, že dobrý nápad nenechá zomrieť alebo ísť bokom.

Veľa štastia!

  1. Webová stránka projektu BladeLogic – http://www.bladelogic.com.
  2. Webová stránka projektu OpsWare je http://www.opsware.com.
  3. Webová stránka projektu Cfengine je http://www.cfengine.org.
  4. Webová stránka projektu Puppet je http://reductivelabs.com/projects/puppet.
  5. Bábková kuchárka – http://www.reductivelabs.com/trac/puppet/tagspuppet%2Crecipe.
  6. Rýchlejšia knižnica –



Hore