Kako postaviti pametne telefone i računala. Informativni portal

Instaliranje lutke. Centralizirano postavljanje s lutkom

Da biste učinkovitije koristili Puppet, morate razumjeti kako se grade moduli i manifesti. Ovaj vodič će vas provesti kroz način rada ovih Puppet komponenti postavljanjem LAMP stoga na Ubuntu 14.04 poslužitelju.

Zahtjevi

  • Instalacija Puppet (master i agent). Više o ovome -.
  • Sposobnost stvaranja barem jednog Ubuntu 14.04 virtualnog poslužitelja za posluživanje čvora Puppet agent.

Osnove lutkarskog koda

Resursi

Puppet kod se uglavnom sastoji od resursa. Resurs je dio koda koji opisuje stanje sustava i određuje promjene koje su mu potrebne. Na primjer:

korisnik("mitchell":
osigurati => prisutan,
uid => "1000",
gid => "1000",
ljuska => "/bin/bash",
dom => "/dom/mitchell"
}

Deklaracija resursa ima sljedeći format:

resource_type("resource_name"
atribut => vrijednost
...
}

Da biste vidjeli sve vrste resursa lutke, izdajte naredbu:

marionetski resurs --vrste

U ovom vodiču saznat ćete više o vrstama izvora.

Manifesti

Manifest je skripta orkestracije. Programi lutke s ekstenzijom .pp nazivaju se manifesti. Zadani manifest lutke je /etc/puppet/manifests/site.pp.

Nastava

Kao iu svakom redovnom programskom jeziku, klase su odgovorne za organiziranje i ponovnu upotrebu dijelova orkestracije.

Unutar definicije klase nalazi se blok koda koji opisuje kako klasa radi. Nakon što definirate klasu, možete je koristiti u manifestima.

Definicija klase ima sljedeći format:

klasa primjer_klase(
...
kodirati
...
}

Ovaj kod definira klasu example_class. Kôd lutke bit će u vitičastim zagradama.

Deklaracija klase je mjesto u kodu gdje se poziva određena klasa. S deklaracijom klase, Puppet obrađuje svoj kod.

Deklaracija klase može biti obična i prema vrsti resursa.

Uobičajena deklaracija klase dodaje se kodu pomoću ključne riječi include.

uključi primjer_klase

Kada je deklarirana kao vrsta resursa, klasa je deklarirana u formatu resursa:

klasa("primjer_klase":)

Ova deklaracija vam omogućuje dodavanje parametara klase u vaš kod koji nadjačavaju zadane vrijednosti atributa klase. Na primjer:

čvor "host2" (
klasa ("apache": ) # korištenje apache modula
apache::vhost ("example.com": # definirajte vhost resurs
port => "80",
docroot => "/var/www/html"
}
}

Moduli

Modul je skupina manifesta i drugih datoteka organiziranih na unaprijed definiran način koji olakšava dijeljenje i ponovnu upotrebu pojedinačnih dijelova orkestracije. Moduli pomažu organizirati Puppet kod jer se mogu koristiti za razdvajanje koda u više manifesta.

Moduli lutaka pohranjeni su u direktoriju /etc/puppet/modules.

Pisanje manifesta

Možete vježbati pisanje Puppet manifesta, modula i klasa koristeći primjer instaliranja LAMP stoga na Ubuntu poslužitelju (rezultat će biti ).

Dakle, da biste orkestrirali poslužitelj Ubuntu 14.04 i instalirali LAMP stog na njega, potrebni su vam resursi za sljedeće radnje:

  • instaliranje paketa apache2.
  • pokretanje usluge apache2.
  • instaliranje paketa MySQL servera, mysql-server.
  • pokretanje mysql usluge.
  • instaliranje php5 paketa
  • stvaranje PHP test skripte, info.php.
  • ažuriranje apt indeksa prije instaliranja svakog paketa.

U nastavku ćete pronaći tri primjera Puppet koda koji se mogu koristiti za postizanje takvog postavljanja LAMP stacka.

Prvi primjer će vas naučiti kako napisati osnovne manifeste u jednu datoteku. Drugi primjer će vam pomoći sastaviti i koristiti klasu i modul na temelju prethodno napisanih manifesta. Treći primjer će vam pokazati kako koristiti unaprijed izgrađene javne module za instaliranje LAMP stoga.

Bilješka: Za testiranje je bolje koristiti novi virtualni poslužitelj.

Primjer 1: Instalacija LAMP-a s jednim manifestom

Manifest lutke može se napisati na čvoru agenta i zatim izvršiti pomoću naredbe primjene lutke (za to ne morate imati postavke glavnog i agenta).

U ovom odjeljku naučit ćete pisati manifeste koji će koristiti ove vrste deklaracija resursa:

  • exec: Izvrši naredbe.
  • paket: instalirajte pakete.
  • usluga: upravljanje uslugama.
  • datoteka: upravljanje datotekama.

Izrada manifesta

Napravite novi manifest:

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

Dodajte mu sljedeći kod da deklarirate potrebne resurse.

# pokrenite naredbu "apt-get update".
exec("apt-update": # resource exec "apt-update"
naredba => "/usr/bin/apt-get update" # naredba koju će pokrenuti ovaj resurs
}
# instalirajte paket apache2
paket("apache2":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" prije instaliranja paketa
osigurati => instalirano,
}
# pokrenite uslugu apache2
usluga ("apache2":
osigurati => rad,
}
# instalirajte mysql-server
paket("mysql-server":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" ponovnim instaliranjem
osigurati => instalirano,
}
# pokrenite mysql uslugu
usluga ("mysql":
osigurati => rad,
}
# instalirajte php5 paket
paket("php5":
zahtijevaju => Exec["apt-update"], # zahtijevaju "apt-update" prije instalacije
osigurati => instalirano,
}
# pokrenite uslugu info.php
datoteka("/var/www/html/info.php":
osigurati => datoteka,
sadržaj => "", # phpinfo kod
zahtijevaju => Paket["apache2"], # zahtjev za paket "apache2"
}

Primjena manifesta

Za korištenje novog manifesta unesite naredbu:

sudo lutka primijeniti --test

Prikazat će voluminozan rezultat koji prikazuje sve promjene u stanju okoline. Ako nema pogrešaka u izlazu, trebali biste moći otvoriti svoju vanjsku IP adresu ili naziv domene u svom pregledniku. Na zaslonu će se pojaviti PHP testna stranica s informacijama o hrpu. To znači da Apache i PHP rade.

Sada je LAMP stog instaliran na poslužitelju koristeći Puppet.

Ovo je prilično jednostavan manifest budući da se može izvršiti na agentu. Ako nemate Puppet mastera, drugi agentski čvorovi neće moći koristiti ovaj manifest.

Poslužitelj Puppet master provjerava promjene stanja poslužitelja svakih 30 minuta.

Primjer 2: Instaliranje LAMP steka pomoću modula

Sada pokušajte stvoriti jednostavan modul temeljen na LAMP manifestu koji ste napisali u prethodnom odjeljku.

Za izradu modula, kreirajte novi direktorij u direktoriju modula (njegov naziv mora odgovarati nazivu modula). Ovaj direktorij treba sadržavati direktorij manifesta i init.pp datoteku. Datoteka init.pp specificira klasu Puppet (njeno ime također mora odgovarati nazivu modula).

Stvaranje modula

Idite na poslužitelj Puppet master i kreirajte strukturu direktorija za modul:

cd /etc/puppet/modules
sudo mkdir -p svjetiljka/manifesti

Kreirajte i otvorite init.pp datoteku u uređivaču:

sudo vi lamp/manifests/init.pp

Umetnite klasu lampe u datoteku:

razredna lampa (
}

Kopirajte sadržaj manifesta iz odjeljka 1 i zalijepite ga u blok klase lampe. Sada imate definiciju klase lampe. Drugi će manifesti moći koristiti ovu klasu kao modul.

Spremite i zatvorite datoteku.

Korištenje modula u glavnom manifestu

Sada možete konfigurirati glavni manifest i koristiti modul lampe za instaliranje LAMP stoga na poslužitelj.

Na poslužitelju Puppet master uredite sljedeću datoteku:

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

Najvjerojatnije je datoteka trenutno prazna. Dodajte mu sljedeće retke:

zadani čvor ( )
čvor "lampa-1" (
}

Bilješka: Zamijenite lamp-1 s imenom glavnog računala vašeg Puppet agenta na koji ćete instalirati stog.

Blok čvora omogućuje vam da odredite Puppet kod koji će se primjenjivati ​​samo na neke čvorove.

Zadani blok primjenjuje se na sve agentske čvorove koji nemaju pojedinačni blok (ostavite ga praznim). Blok lamp-1 primijenit će se na čvor agenta lamp-1.

Ovom bloku dodajte sljedeći redak koji koristi modul lampe:

Spremite i zatvorite datoteku.

Sada će čvor Puppet agenta moći preuzeti postavke s glavnog poslužitelja i instalirati LAMP stog. Ako želite napraviti promjene odmah, pokrenite naredbu na agentu:

sudo lutkarski agent --test

Moduli su najprikladniji način za ponovnu upotrebu Puppet koda. Osim toga, moduli vam pomažu da logično organizirate svoj kod.

Primjer 3: Instalacija LAMP-a pomoću javnih modula

MySQL modul se koristi na sličan način. Dodajte sljedeće retke u blok čvora:

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

Također možete proslijediti parametre MySQL modula.

Dodajte resurs koji će kopirati info.php na željeno mjesto. Koristite parametar izvora. Dodajte sljedeće retke u blok čvora:

file("info.php": # naziv datoteke resursa
put => "/var/www/html/info.php", # ciljni put
osigurati => datoteka,
zahtijevaju => Klasu["apache"], # apache klasa za korištenje
izvor => "puppet:///modules/apache/info.php", # mjesto za kopiranje datoteke
}

Ova deklaracija klase koristi izvorni parametar umjesto sadržaja. Ova opcija ne samo da koristi sadržaj datoteke, već ga i kopira.

Puppet će kopirati datoteku puppet:///modules/apache/info.php u /etc/puppet/modules/apache/files/info.php.

Spremite i zatvorite datoteku.

Napravite datoteku info.php.

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

Sada će čvor Puppet agenta moći preuzeti postavke s glavnog poslužitelja i instalirati LAMP stog. Ako želite napraviti promjene u okruženju agenta odmah, pokrenite naredbu na ovom čvoru:

sudo lutkarski agent --test

Ova naredba će preuzeti sva ažuriranja za trenutni čvor i instalirati stog na njemu. Kako biste bili sigurni da Apache i PHP rade, otvorite IP adresu ili domenu čvora u pregledniku:

http://lamp_1_public_IP/info.php

Zaključak

Sada imate osnovno znanje o radu s Puppet modulima i manifestima. Pokušajte sami izraditi jednostavan manifest i modul.

Puppet je odličan za upravljanje konfiguracijskim datotekama aplikacija.

Oznake: ,

Lutka je međuplatformski okvir koji administratorima sustava omogućuje obavljanje uobičajenih zadataka pomoću koda. Kod omogućuje obavljanje raznih zadataka od instaliranja novih programa do provjere dopuštenja za datoteke ili ažuriranja korisničkih računa. Lutka superioran ne samo tijekom početne instalacije sustava, već tijekom cijelog životnog ciklusa sustava. U većini slučajeva lutka koristi se u konfiguraciji klijent/poslužitelj.

Ovaj odjeljak prikazuje instalaciju i konfiguraciju Lutka u konfiguraciji klijent/poslužitelj. Ovaj jednostavan primjer pokazuje kako instalirati Apache korištenjem Lutka.

Montaža

Za ugradnju Lutka unesite u terminal:

Sudo apt-get instalirajte lutkar

Na klijentskim računalima unesite:

Sudo apt-get instaliraj lutku

postavke

Prije postavljanja lutke možda ćete htjeti dodati unos DNS CNAME Za lutka.example.com, Gdje primjer.com- ovo je vaša domena. Zadani klijenti Lutka provjerite DNS za puppet.example.com kao naziv poslužitelja lutke ( Majstor lutaka). Pogledajte Usluga naziva domene za dodatne pojedinosti o korištenju DNS-a.

Ako ne namjeravate koristiti DNS, možete dodati unose u datoteku /etc/hosts na poslužitelju i klijentu. Na primjer, u datoteci /etc/hosts Lutka dodavanje poslužitelja:

127.0.0.1 localhost.localdomain localhost lutka 192.168.1.17 meercat02.example.com meercat02

Na svakom Lutka U klijentu dodajte unos za poslužitelj:

192.168.1.16 meercat.example.com meercat lutka

Zamijenite IP adrese i nazive domena iz primjera stvarnim adresama i imenima poslužitelja i klijenata.

Sada postavimo neke resurse za apache2. Stvorite datoteku /etc/puppet/manifests/site.pp koji sadrži sljedeće:

Paket ( "apache2": osigurati => instaliran) usluga ( "apache2": osigurati => istina, omogućiti => istina, zahtijevati => Paket["apache2"] )

Čvor "meercat02.example.com" (uključuje apache2)

Zamijeniti meercat02.example.com na svoje trenutno ime Lutka klijent.

Posljednji korak za ovo jednostavno Lutka poslužitelj treba ponovno pokrenuti uslugu:

Sudo /etc/init.d/puppetmaster ponovno pokrenite

Sada dalje Lutka sve je konfigurirano na poslužitelju i vrijeme je da konfigurirate klijenta.

Prvo, konfigurirajmo uslugu Lutka agent za pokretanje. Uredite /etc/default/puppet, zamjenjujući vrijednost POČETAK na Da:

Sudo /etc/init.d/puppet start

Vratimo se na Lutka poslužitelj za potpisivanje certifikata klijenta pomoću naredbe:

Sudo lutka --znak meercat02.example.com

Ček /var/log/syslog za sve konfiguracijske pogreške. Ako je sve prošlo u redu, paket apache2 a njegove će se ovisnosti instalirati na Lutka klijent.

Ovaj primjer je vrlo jednostavan i ne pokazuje mnoge značajke i prednosti. Lutka. Za više informacija pogledajte

Upravljanje velikim brojem Unix sustava ne može se nazvati praktičnim. Za promjenu jednog parametra administrator mora kontaktirati svaki stroj; skripte mogu samo djelomično pomoći, a ne u svim situacijama.

Treba priznati da su Windows mrežni administratori još uvijek u povoljnijem položaju. Dovoljno je promijeniti postavke grupnih pravila i nakon nekog vremena sva će računala u mreži, uključujući i ona s nedavno instaliranim operativnim sustavom, "saznati" za novotariju, ako ih se, naravno, tiče. Gledajući unatrag kroz dugo razdoblje razvoja Unixa, primijetit ćete da ništa poput ovoga nikada nije zaživjelo. Postoje rješenja poput kickstarta koja pomažu pri početnoj instalaciji operativnog sustava, no daljnji razvoj će zahtijevati značajan trud. Komercijalna rješenja kao što su BladeLogic i OpsWare samo djelomično rješavaju problem automatizacije postavki, njihova glavna prednost je prisutnost grafičkog sučelja, a mogu se kupiti samo u velikim organizacijama. Postoje, naravno, projekti koji nude besplatna rješenja, ali tijekom svog postojanja nikad nisu uspjeli stvoriti veliku zajednicu. Na primjer, Cfengine nije baš popularan među administratorima, iako se osim u Linuxu može koristiti u *BSD-u, Windowsima i Mac OS X-u. To može biti zbog relativne složenosti kreiranja konfiguracija. Kada opisujete zadatke, morate uzeti u obzir značajke svakog pojedinog sustava i ručno kontrolirati redoslijed radnji prilikom izvršavanja naredbi. To jest, administrator mora zapamtiti da za neke sustave trebate napisati adduser za druge, useradd, uzeti u obzir lokaciju datoteka na različitim sustavima, i tako dalje. To komplicira proces pisanja naredbi za red veličine; vrlo je teško stvoriti ispravnu konfiguraciju u hodu, a gotovo je nemoguće pročitati stvorene konfiguracije nakon nekog vremena. Unatoč GPL licenci, Cfengine je zapravo projekt jednog čovjeka koji kontrolira sve promjene i nije previše zainteresiran za izgradnju otvorenog društva. Kao rezultat toga, mogućnosti cfenginea su prilično zadovoljavajuće za programera, ali za ostale administratore to je dodatna glavobolja. Kako bi poboljšali cfengine, programeri trećih strana kreirali su razne dodatke, što je često samo pogoršavalo situaciju. Autor nekoliko takvih modula za cfengine, Luke Kanies, na kraju je odlučio razviti sličan alat, ali bez mnogih nedostataka cfenginea.

Značajke lutke

Puppet je, kao i cfengine, sustav klijent-poslužitelj koji koristi deklarativni, odnosno obvezni jezik za opisivanje zadataka i biblioteka za njihovu implementaciju. Klijenti se povremeno (30 minuta prema zadanim postavkama) spajaju na središnji poslužitelj i primaju najnoviju konfiguraciju. Ako primljene postavke ne odgovaraju stanju sustava, one će se izvršiti, a po potrebi će se na poslužitelj poslati izvještaj o izvršenim operacijama. Poslužitelj može spremiti poruke u syslog ili datoteku, stvoriti RRD graf i poslati ih na određenu e-poštu. Dodatni slojevi apstrakcije transakcija i resursa pružaju maksimalnu kompatibilnost s postojećim postavkama i aplikacijama, omogućujući vam da se usredotočite na sistemske objekte bez brige o razlikama u implementaciji i opisu detaljnih naredbi i formata datoteka. Administrator radi samo s vrstom objekta, Lutka se brine za ostalo. Dakle, tip paketa poznaje oko 17 sustava paketa, traženi će biti automatski prepoznat na temelju informacija o verziji distribucije ili sustava, iako se po potrebi može forsirati upravitelj paketa.

Za razliku od skripti, koje često nije moguće koristiti na drugim sustavima, Puppet konfiguracije koje su napisali administratori trećih strana uglavnom će raditi bez problema na bilo kojoj drugoj mreži. U Puppet CookBook [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2Crecipe] već postoji tri tuceta gotovih recepata. Puppet trenutno službeno podržava sljedeće operativne sustave i usluge: Debian, RedHat/Fedora, Solaris, SUSE, CentOS, Mac OS X, OpenBSD, Gentoo i MySQL, LDAP.

Jezik lutaka

Da biste krenuli naprijed, prvo morate razumjeti osnovne elemente i mogućnosti jezika. Jezik je jedna od prednosti Puppet-a. Uz njegovu pomoć opisuju se resursi kojima administrator planira upravljati i akcije. Za razliku od većine sličnih rješenja, Puppet omogućuje jeziku da pojednostavi pristup svim sličnim resursima na bilo kojem sustavu u heterogenom okruženju. Opis resursa obično se sastoji od naziva, tipa i atributa. Na primjer, pokažimo na datoteku /etc/passwd i postavimo njene atribute:

datoteka ("/etc/passwd":

vlasnik => korijen,

grupa => korijen,

Sada će klijenti, nakon povezivanja na poslužitelj, kopirati datoteku /etc/passwd i instalirati navedene atribute. Možete definirati više resursa u jednom pravilu, odvajajući ih točkom i zarezom. Što učiniti ako se konfiguracijska datoteka koja se koristi na poslužitelju razlikuje od klijentske ili se uopće ne koristi? Na primjer, ova situacija može nastati prilikom postavljanja VPN veza. U ovom slučaju, na datoteku se može ukazati korištenjem izvorne direktive. Ovdje postoje dvije opcije, kao i obično, za određivanje staze do druge datoteke; također su podržana dva URI protokola: datoteka i lutka. U prvom slučaju koristi se poveznica na eksterni NFS poslužitelj, u drugoj opciji se na Puppet poslužitelju pokreće servis sličan NFS-u koji eksportira resurse. U potonjem slučaju, zadana staza je relativna prema korijenskom direktoriju lutke - /etc/puppet. Odnosno, poveznica puppet://server.domain.com/config/sshd_config će odgovarati datoteci /etc/puppet/config/sshd_config. Ovaj direktorij možete nadjačati pomoću direktive filebucket, iako je ispravnije koristiti odjeljak istog imena u datoteci /etc/puppet/fileserver.conf. U tom slučaju možete ograničiti pristup usluzi samo s određenih adresa. Na primjer, opišite odjeljak konfiguracije.

put /var/puppet/config

dopustiti *.domain.com

dopustiti 192.168.0.*

dopustiti 192.168.1.0/24

odbiti *.wireless.domain.com

Zatim se okrećemo ovom odjeljku kada opisujemo izvor.

izvor => "lutka://server.domain.com/config/sshd_config"

Ispred dvotočke nalazi se naziv resursa. U najjednostavnijim slučajevima možete jednostavno navesti alias ili varijable kao ime. Alias ​​se postavlja pomoću direktive aliasa. puni put do datoteke. U složenijim konfiguracijama

datoteka ("/etc/passwd":

alias => passwd

Druga opcija za stvaranje pseudonima dobra je kada se morate nositi s različitim operativnim sustavima. Na primjer, stvorimo resurs koji opisuje datoteku sshd_config:

datoteka (sshdconfig:

ime => $operacijski sustav? (

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

zadano => "/etc/ssh/sshd_config"

U ovom smo primjeru suočeni s izborom. Datoteka za Solaris specificirana je zasebno, za sve ostale bit će odabrana datoteka /etc/ssh/sshd_config. Sada se ovom resursu može pristupiti kao sshdconfig, ovisno o operativnom sustavu odabire se željena staza. Na primjer, ukazujemo da ako je sshd demon pokrenut i primljena je nova datoteka, uslugu treba ponovno pokrenuti.

osigurati => istinito,

pretplatite se => Datoteka

Varijable se često koriste pri radu s korisničkim podacima. Na primjer, opisujemo lokaciju korisničkih početnih imenika:

$homeroot = "/home"

Sada se datotekama određenog korisnika može pristupiti kao

$(domaći korijen)/$name

Parametar $name bit će ispunjen imenom korisničkog računa. U nekim je slučajevima zgodno definirati zadanu vrijednost za neki tip. Na primjer, za tip exec, oni često označavaju direktorije u kojima treba tražiti izvršnu datoteku:

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

Ako trebate pokazati na nekoliko ugniježđenih datoteka i direktorija, možete koristiti parametar recurse.

datoteka ("/etc/apache2/conf.d":

izvor => “lutka:// lutka://server.domain.com/config/apache/conf.d”,

recurse => "true"

Više resursa može se kombinirati u klase ili definicije. Klase su potpuni opis sustava ili usluge i koriste se zasebno.

"/etc/passwd": vlasnik => korijen, grupa => korijen, način => 644;

"/etc/shadow": vlasnik => korijen, grupa => korijen, način => 440

Kao iu objektno orijentiranim jezicima, klase se mogu nadjačati. Na primjer, na FreeBSD-u grupni vlasnik ovih datoteka je wheel. Stoga, kako ne bismo potpuno prepisali resurs, stvorimo novu klasu freebsd, koja će naslijediti klasu linuxa:

klasa freebsd nasljeđuje linux (

Datoteka[“/etc/passwd”] ( grupa => kotačić );

Datoteka[“/etc/shadow”] ( grupa => kotač )

Radi praktičnosti, sve se klase mogu smjestiti u zasebnu datoteku, koja se može povezati pomoću direktive include. Definicije mogu uzeti više parametara kao argumente, ali ne podržavaju nasljeđivanje i koriste se kada trebate opisati objekte koji se mogu ponovno koristiti. Na primjer, definirajmo matični imenik korisnika i naredbe potrebne za kreiranje novog računa.

definirajte user_homedir ($group, $puno ime, $ingroups) (

korisnik("$name":

osigurati => prisutan,

komentar => "$puno ime",

gid => "$grupa",

grupe => $ingroups,

članstvo => minimum,

ljuska => "/bin/bash",

home => "/home/$name",

zahtijevati => Grupa[$group],

exec("$name homedir":

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

stvara => "/home/$name",

zahtijevati => Korisnik[$name],

Sada, za stvaranje novog računa, samo kontaktirajte user_homedir.

user_homedir("sergej":

grupa => "sergej",

puno ime => “Sergej Jaremchuk”,

ingroups => ["mediji", "admin]

Postoje zasebni opisi čvorova koji podržavaju nasljeđivanje poput klasa. Kada se klijent poveže s Puppet poslužiteljem, pretražit će se odgovarajući odjeljak čvora i bit će dostupne postavke specifične samo za ovo računalo. Za opis svih ostalih sustava možete koristiti zadani čvor. Opis svih tipova dat je u dokumentu “Type Reference” koji se u svakom slučaju mora pročitati, barem kako bi se razumjele sve mogućnosti jezika Puppet. Različite vrste omogućuju vam izvršavanje određenih naredbi, uključujući kada su ispunjeni određeni uvjeti (na primjer, mijenjanje konfiguracijske datoteke), rad s cron-om, korisničkim vjerodajnicama i grupama, računalima, resursima za montiranje, pokretanje i zaustavljanje usluga, instaliranje, ažuriranje i uklanjanje paketa , rad sa SSH ključevima, Solaris zonama i tako dalje. Ovako je lako natjerati popis paketa u distribucijama koje koriste apt da se ažuriraju svaki dan između 2 i 4 sata.

raspored (dnevno:

razdoblje => dnevno,

raspon =>

exec("/usr/bin/apt-get ažuriranje":

raspored => dnevno

Ažuriranje za to razdoblje će svaki sustav izvršiti samo jednom, nakon čega se zadatak smatra obavljenim i briše se s klijentskog računala. Puppet jezik podržava druge poznate strukture: uvjete, funkcije, nizove, komentare i slično.

Instaliranje lutke

Puppet zahtijeva Ruby (>= 1.8.1) s OpenSSL podrškom i XMLRPC bibliotekama, kao i bibliotekom Faster [ http://reductivelabs.com/projects/facter]. Repozitorij Ubuntu 7.04 koji je korišten za testnu instalaciju već je uključivao paket puppy.

$ sudo apt-cache lutka za pretraživanje

lutka — centralizirano upravljanje konfiguracijom za mreže

puppetmaster - centralizirani demon upravljanja konfiguracijom

Tijekom instalacije bit će instalirani svi potrebni paketi ovisnosti: facter libopenssl-ruby libxmlrpc-ruby.

$ sudo apt-get instalirajte lutku lutkar

Možete provjeriti dostupnost Ruby knjižnica s naredbom.

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

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

Ako se ne primi nijedna pogreška, onda je sve što trebate već uključeno. Datoteke koje opisuju željenu konfiguraciju sustava nazivaju se manifesti u terminologiji Puppet. Kada se pokrene, demon pokušava pročitati datoteku /etc/puppet/manifests/site.pp; ako nedostaje, prikazuje poruku upozorenja. Tijekom testiranja možete reći demonu da radi u izvanmrežnom načinu rada, u kojem slučaju manifest nije potreban

$ sudo /usr/bin/puppetmasterd --nonodes

Ako je potrebno, možete povezati druge datoteke sa site.pp, na primjer s opisima klasa. Za probni rad možete unijeti najjednostavnije upute u ovu datoteku.

datoteka("/etc/sudoers":

vlasnik => korijen,

grupa => korijen,

Sve konfiguracijske datoteke za poslužitelj i klijente nalaze se u /etc/puppet. Datoteka fileserver.conf o kojoj smo gore govorili nije obavezna i koristi se samo ako će Puppet raditi i kao poslužitelj datoteka. U Ubuntuu ova datoteka izvozi poddirektorij /etc/puppet/files. Poddirektorij ssl sadrži certifikate i ključeve koji će se koristiti za enkripciju prilikom povezivanja klijenata. Ključevi se stvaraju automatski prvi put kada pokrenete puppetmasterd; možete ih izraditi ručno pomoću naredbe.

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

Datoteke puppetd.conf i puppetmasterd.conf su slične. Oni pokazuju neke parametre za rad demona na klijentskom sustavu i poslužitelju. Datoteka klijenta razlikuje se samo u prisutnosti parametra poslužitelja, koji upućuje na računalo na kojem je pokrenut puppetmasterd.

poslužitelj = grinder.com

logdir = /var/log/lutka

vardir = /var/lib/lutka

rundir = /var/run

# poslati izvještaj poslužitelju

Kako biste izbjegli ručno upisivanje svega, možete stvoriti predložak koristeći sam puppetd.

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

Slično, možete stvoriti site.pp na poslužitelju.

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

Druga datoteka, tagmail.conf, omogućuje vam da navedete adrese e-pošte na koje će se izvješća slati. U najjednostavnijem slučaju možete koristiti jednu liniju.

svi: [e-mail zaštićen]

Konfiguracijske datoteke nisu dovoljne da se klijent poveže s poslužiteljem. Da biste to učinili, također morate potpisati certifikate. Prvo, da obavijestite poslužitelja o novom računalu na klijentskom sustavu, unesite naredbu:

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

info: Traženje certifikata

upozorenje: peer certifikat neće biti provjeren u ovoj SSL sesiji

obavijest: nije primljen certifikat

Ako se vrati druga linija, trebali biste provjeriti rad poslužitelja.

$ ps aux | grep lutka

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

Vatrozid mora omogućiti veze na portu 8140.

Na poslužitelju dobivamo popis certifikata koje je potrebno potpisati.

$ sudo lutka --popis

nomad.grinder.com

I potpisujemo potvrdu klijenta.

$ sudo puppetca –znak nomad.grinder.com

Sada se klijent može slobodno spojiti na poslužitelj i primiti postavke.

Nažalost, unutar članka jednostavno nije moguće prikazati sve mogućnosti Puppet-a. Ali kao što vidite, ovo je funkcionalan i fleksibilan alat koji vam omogućuje rješavanje većine problema istovremene administracije velikog broja sustava. Ako vaš posao zahtijeva postavljanje nekoliko sustava. I što je najvažnije, projekt je uspio okupiti malu, ali stalno rastuću zajednicu. Stoga se nadajmo da dobroj ideji neće biti dopušteno da umre ili ode u stranu.


Malo poezije.Čini se da bi ovaj članak trebao biti polazište za cijeli serijal, no ciljana publika su ipak iskusniji korisnici Open Source Puppet Labs proizvoda koji nisu zadovoljni pojedinačnim, slabo integriranim modulima s Puppet Forgeom. Kao i u svakom slučaju "knjižnica protiv okvira", cijena koju treba platiti je slijediti svjetonazor autora integriranog rješenja.

Malo o tome kako Puppet radi

Puppet je prvenstveno specifičan jezik za deklarativno specificiranje konačnog stanja sustava. Usporedbe radi, iznimno je pogodan GNU Makefile, gdje se osim izravnog opisa ovisnosti može maksimalno otkačiti.

Lutkarska apstrakcija je nešto poput ovoga ( razbijanje obrazaca - zaboravite sve što ste znali o terminima programiranja!).

  • Čvor je skup konfiguracija za određeni ciljni sustav. Zapravo, ovo je poseban slučaj klase.
  • Klasa je skup deklarativne logike koja je uključena u konfiguraciju čvora ili druge klase. Klasa nema ni instance ni metode, ali ima parametre i varijable definirane unutar logike. Zapravo, radi se o postupku koji može naslijediti drugi postupak jednostavnim dodavanjem koda i ne tako banalnim opsegom varijabli.
  • Tip- ali ovo više izgleda kao klasična klasa - pretpostavlja instance s imenom i definitivno navedenim parametrima, ali ništa više. Specifična implementacija tipa može se napisati kao Puppet skripta putem define, koja stvara instance drugih tipova, ili kao Ruby ekstenzija s maštom.
  • Resurs- ovo su zapravo imenovane instance tipova. Svaki naziv resursa jedinstven je unutar određene vrste unutar konfiguracije čvora (direktorija).
  • Varijable- pa, ukratko, to su konstante... Prije Puppet 4 stvari su bile još gore s njihovim opsegom. Sada je to prikladno: za korištenje izvan lokacije definicije, mora biti specificiran potpuno kvalificirani identifikator, osim u slučaju nasljeđivanja klase.
Puppet se može koristiti za lokalnu implementaciju bez mreže ili povezane infrastrukture. Ovo se može koristiti za stvaranje slika spremnika. Postoji čak i cijeli pokret koji zagovara napuštanje centraliziranog poslužitelja.

Na ideološki ispravan način, Puppet infrastruktura sastoji se od agenta - privilegirane usluge na ciljnom sustavu - i poslužitelja koji distribuira vrijedne upute u obliku deklarativnih direktorija resursa na zahtjev agenata. Sigurnost je implementirana na razini infrastrukture privatnog javnog ključa (X.509). Jednostavno rečeno, isti mehanizmi kao u HTTPS-u, ali s vlastitim CA-om i obaveznom provjerom klijentskog certifikata.

U pojednostavljenom obliku, postupak implementacije izgleda otprilike ovako:

  1. Obrada putem TLS-a i X.509 (uspostavljanje veze, ažuriranje CRL-a, provjera ograničenja certifikata itd.)
  2. Agent prima generatore činjenica od poslužitelja s predmemorijom i svime (točnije, sve se povlači iz lib/ foldera u modulima). Nije teško dodati vlastitu Ruby skriptu za prikupljanje informacija od interesa.
  3. Agent prikuplja činjenice o ciljnom sustavu i šalje ih na poslužitelj. Sve činjenice mogu se lako pregledati ručno putem lutkarskog poziva činjenica. Te su činjenice dostupne kao globalne varijable.
  4. Poslužitelj sastavlja katalog resursa i šalje ga agentu. Ispod toga leži cijeli sloj različitih koncepata.
  5. Agent povlači sve potrebno sa servera i dovodi sustav u zadani oblik. Sam agent ne zna što bi s resursima; on se oslanja na implementaciju pružatelja (semantički prijevod će biti "implementator", a ne dobavljač) određenih vrsta resursa. Neki pružatelji su standardni i uključeni su u Puppet pakete, dok ostali su izvučeni iz modula.
Za uživanje u svim delicijama tu su i dodatna peciva u obliku:
  • Modul- zbirka deklarativnih Puppet skripti, Ruby ekstenzija za Puppet, datoteka, predložaka datoteka, Hiera podataka i još mnogo toga. Ispravniji izraz bi bio "paket".
  • Okoliš- skup skripti, modula i Hiera podataka. Kako je infrastruktura postajala složenija, neizbježno je postalo potrebno podijeliti konfiguraciju dalje od standardne podjele po čvorovima. U osnovi, to je potrebno za pilot inovacije i banalnu kontrolu pristupa (kada svi administratori nemaju pristup svim čvorovima IT infrastrukture).
  • Hiera- hijerarhijska baza podataka. Ova formulacija može biti vrlo zastrašujuća. To je vjerojatno razlog zašto je promijenjen u dokumentaciji kasnijih verzija. Zapravo, ovo je iznimno jednostavan i praktičan mehanizam za izdvajanje konfiguracije iz YAML ili JSON datoteka. Hijerarhija je mogućnost određivanja redoslijeda čitanja više konfiguracijskih datoteka - tj. hijerarhija/prioritet ovih datoteka.
    • Osim dohvaćanja podataka pozivom funkcije, Puppet povlači zadane parametre klase, što je glavni vrhunac.
    • Naravno, Hiera podržava interpolaciju činjenica, pa čak i pozivanje posebnih funkcija.
    • U Puppet 4.3 ponovno smo implementirali istu funkcionalnost kako bismo podržali ne samo globalnu bazu podataka, već i lokalnu za Okruženje i Modul, iako je autor već pronašao nekoliko problema u njihovoj implementaciji (PUP-5983, PUP-5952 i PUP -5899), koje je odmah popravio Puppet Labs.
    • Podržano je nekoliko strategija za izdvajanje vrijednosti iz svih datoteka u hijerarhiji:
      • prvi - vraća se prva vrijednost pronađena po prioritetu
      • jedinstveno - prikuplja sve vrijednosti u jednodimenzionalni niz i uklanja duplikate
      • hash - kombinira sve pronađene YAML hashove. Duplicirani ključevi odabiru se prema prioritetu.
      • deep je u biti rekurzivna verzija hasha
    • Ljepota je u tome što se strategija uzorkovanja može specificirati i kada se poziva funkcija lookup(), jer iu bilo kojoj hijerarhijskoj datoteci putem posebnog ključa lookup_options, koji se aktivno koristi u cfnetwork modulu.
  • PuppetDB- u biti sloj poslovne logike oko relacijske baze podataka (PostgreSQL), koji vam omogućuje spremanje izvješća o činjenicama i izvršenim implementacijama i izvoz resursa za naknadni uvoz u direktorije na drugim čvorovima ili odabir putem posebnih funkcija. Tu je i web sučelje u obliku Puppet Dashboarda.
  • X.509 PKI- već spomenuta certifikatna infrastruktura, koja je izuzetno praktična za korištenje za druge usluge bez potrebe za upravljanjem zasebnom infrastrukturom.
  • MCollective- čini se korisnom stvarčicom za pokretanje zadataka na farmi poslužitelja na temelju događaja, ali autor ima određeno nepovjerenje u sigurnost određenog rješenja.
  • Kovačnica lutaka- otvorena platforma za objavljivanje i preuzimanje modula.
  • neke druge značajke u obliku upravljanja vanjskim uređajima kao što je Cisco oprema i implementacija na golom metalu, ali to je druga priča

Napomene o sigurnosti i pristupačnosti

Morate shvatiti da Puppet Server postaje ranjiva točka cijele IT infrastrukture, jer... određuje konačnu konfiguraciju svih sustava. U posebnim slučajevima ima smisla napraviti odvajanje - poseban poslužitelj za kritične elemente infrastrukture s izrazito ograničenim pristupom i ručnim ažuriranjem te drugi za sve ostalo.

Dostupnost Puppet Servera određuje sposobnost upravljanja cjelokupnom infrastrukturom. Ima smisla ugostiti Puppet Server na virtualnom računalu u pouzdanijem i brže nadoknadivom oblaku treće strane od vaših vlastitih mogućnosti. Ili biste trebali instalirati nekoliko poslužitelja.

U svakom slučaju, ne biste trebali instalirati druge usluge na sustav na kojem će biti postavljen Puppet Server sa zvonima i zviždaljkama. Virtualizacija i kontejnerizacija vam mogu pomoći.

Multi-master (nekoliko zasebnih Puppet poslužitelja)

  • U ovom slučaju, samo jedan poslužitelj djeluje kao CA (Certificate Authority) - njegova nedostupnost znači da je nemoguće dodati nove čvorove.
    • Puppet vam omogućuje korištenje X.509 infrastrukture treće strane ako ugrađena nije zadovoljavajuća.
  • Cijela konfiguracija (Okruženje) mora biti pohranjena u sustavu kontrole verzija i postavljena na svaki poslužitelj istovremeno.
  • Jedina zajednička stvar je PostgreSQL baza podataka, čija je organizacija visoke dostupnosti izvan okvira ovog članka.
  • Modul cfpuppetserver podržava instalacije kao primarni (s CA) i kao sekundarni poslužitelj.

Ono što se bitno promijenilo u odnosu na starije verzije

Proizvođač ima potpuni opis.
  • Sve usluge su prebačene na JVM, JRuby i Jetty. Unatoč očitim prednostima integracije, postoje i nedostaci u pogledu potrošnje memorije.
  • Dodane su lambda funkcije za obradu zbirki - sada nema potrebe za smanjivanjem štaka u Rubyju ili pervertiranjem putem create_resources()
  • Pojavio se alat za obradu EPP predložaka - u biti isti ERB, ali s Puppet DSL umjesto Ruby,
  • Zadana struktura direktorija konfiguracijskih datoteka značajno se promijenila
  • Dodana podrška za pružatelje podataka za okruženja i module (hakovi više nisu potrebni).
  • Umanjivanje uloge globalne Hiere. Nova i povezana naredba je traženje lutaka.

Montaža

Ovaj proces je prilično primitivan, ali zahtijeva praćenje određenog slijeda koraka. Budući da je to ručno raditi nezahvalan posao, autor će vas naučiti nečemu lošem, naime preuzimanju nerazumljivih skripti s interneta i pokretanju kao root na vašem sustavu.

Tri glavne komponente poslužitelja su sam Puppet Server, PuppetDB i PostgreSQL. Svi se mogu strpati u jedan čvor ili podijeliti u dva ili tri sustava. Puppet Server i Puppet DB mogu se pokrenuti više puta, ali PostgeSQL je jedna točka kvara. Postoje različiti pristupi PostgeSQL replikaciji i klasteriranju. Prikladan pristup u slučaju glavnog i sekundarnih poslužitelja bio bi Master + Read-Only Slave, koji je podržan u samom PuppetDB-u kao glavni i samo za čitanje čvor baze podataka, ali automatizacija takvog postavljanje zahtijeva vrijeme i stoga još nije dostupno uključeno u cfpuppetserver modul.

Sama konfiguracija se jednostavno može pohraniti u datotečni sustav zajedno s Puppet Serverom, ali to je kao pisanje skripti na borbenom web poslužitelju. Najprikladnije rješenje je git repozitorij. Uslužni program r10k može povući sve grane repozitorija i postaviti ih na Puppet Server kao zasebna okruženja. r10k je prilično loš u izvlačenju ovisnosti, pa se knjižničar-lutka koristi na vrhu. Odmah je vrijedno napomenuti da je glavni kanonski lutkarski okoliš "proizvodnja". Stoga bi repozitorij konfiguracije trebao koristiti granu pod nazivom "proizvodnja", a ne "master".

Zahtjevi sustava

Hardver je opisao sam proizvođač. Modul cfpuppetserver trenutno podržava samo Debian Jessie+ i Ubuntu Trusty+.

Konfiguracija u Gitu

Za sam r10k, lokacija repozitorija nije mnogo bitna - glavna stvar je njegova dostupnost. Na primjer, za potrebe testiranja, repozitorij se može nalaziti na istom sustavu i pristupati mu putem file://. Dobro mjesto za početak je primjer konfiguracije codingfuture/puppet-exampleenv.
  1. Kloniranje repozitorija: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. Postavili smo opće postavke za administratorski pristup koristeći savjete u komentarima:
    • $EDITOR data/common.yaml
  3. Kreirajmo konfiguraciju čvora:
    • $MY_DOMAIN - korijenski naziv domene (na primjer, example.org)
    • $HOST_NAME - ime hosta klijenta bez domene
    • mkdir podaci/$MOJA_DOMAIN
    • cp podaci/example.com/lutka.yaml podaci/$(MOJA_DOMAIN)/lutka.yaml
    • $EDITOR nano -w data/$(MOJA_DOMAIN)/puppet.yaml - postavljanje čvora s Puppet Serverom prema prijedlozima u komentarima
    • cp podaci/example.com/host.yaml podaci/$(MOJA_DOMAIN)/$(HOST_NAME).yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/$(HOST_NAME).yaml - postavljanje proizvoljnog čvora na temelju prijedloga u komentarima
  4. Guramo na vlastiti Git poslužitelj ili ga činimo dostupnim lokalno na čvoru s Puppet Serverom putem rsync ili scp. Lokalno spremište je prikladno kao međukorak dok se Git poslužitelj ne postavi iz samog Puppet-a. U određenom smislu, ovo podsjeća na sastavljanje kompilatora u nekoliko faza.

Instalacija od nule na čist sustav

Modul cfpuppetserver omogućuje vam da instalirate sve koristeći sam Puppet, ali za početnu instalaciju, osnovne operacije duplicira Bash skripta.

Na ciljnom sustavu:

  1. Preuzmite instalacijsku skriptu: wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. Gledamo kroz skriptu i mrštimo se: manje setup_puppetserver.sh
  3. Pokrenite: bash setup_puppetserver.sh lutka.$(MOJA_DOMAIN) .
    • Primjer s udaljenim spremištem: bash setup_puppetserver.sh ssh:// [e-mail zaštićen]/lutka-konf
    • Primjer s lokalnim: bash setup_puppetserver.sh file:///root/puppetconf/
  4. Vidimo kako se sustav napuhuje i ne instalira sve vrlo brzo.
  5. Ako je spremište udaljeno:
    • Napravite SSH ključ za root: ssh-keygen -t rsa -b 2048
    • Registriramo javni ključ /root/.ssh/id_rsa.pub na udaljenom Git poslužitelju...
    • ... i tamo smo postavili Git hook pozivom sljedeće naredbe: /usr/bin/ssh -T deploypuppet@puppet.$(MY_DOMAIN) ./puppetdeploy.sh
  6. Počinjemo ručno postavljati konfiguraciju: /etc/puppetlabs/deploy.sh
  7. Probajmo kako radi na samom poslužitelju: /opt/puppetlabs/bin/puppet agent --test
  8. Provjerite svoju mrežu, mrežni filter i postavke SSH pristupa

Dodavanje upravljanih čvorova

  1. Potpuno kvalificirano ime Puppet poslužitelja mora biti dostupno putem DNS-a na upravljanom hostu ili tvrdo kodirano u /etc/hosts.
    • Primjer: echo "128.1.1.1 lutka.example.com" >> /etc/hosts
  2. Na čvoru s Puppet Serverom pokrenite sljedeću skriptu /root/genclientinit.sh $(HOST_NAME).$(MY_DOMAIN) .
  3. Kopirajte cijeli rezultat i zalijepite ga u naredbeni redak na ciljnom sustavu.
  4. Čekamo kraj izvođenja i pokrećemo /opt/puppetlabs/bin/puppet agent --test . Prilikom prvog pokretanja generira se zahtjev za potpisivanje certifikata.
  5. Idemo na čvor Puppet Server da potpišemo certifikat.
    • puppet cert list - provjeravamo potpis certifikata radi dodatne paranoje.
    • marionetski cert znak $(HOST_NAME).$(MY_DOMAIN) - zapravo, mi potpisujemo certifikat.
  6. Vraćamo se na upravljani čvor i ponovno pokrećemo: /opt/puppetlabs/bin/puppet agent --test`. Ovo će prisilno pokrenuti postupak postavljanja.
  7. Čekamo da se dovrši implementacija putem Puppet Agenta.
  8. To je to, imate spremnu minimalnu Puppet infrastrukturu!

Primjer izlaza iz /root/genclientinit.sh

udarac</etc/cflocation fi if test ! -z ""; zatim echo -n >/etc/cflocationpool fi if test! -z "\$http_proxy"; zatim izvoz http_proxy izvoz https_proxy="\$http_proxy" izvoz HTTP_PROXY="\$http_proxy" izvoz HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! koji lsb-izdanje | čitati; zatim apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; then echo "Nije uspjelo otkrivanje ispravnog kodnog imena" izlaz 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(kodno ime).deb dpkg -i puppetlabs-release-pc1-\$(kodno ime) .deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf<lutka cert sign host.example.com" echo "Koristite CTRL+C za zaustavljanje ciklusa, ako ne uspije zbog različitih razloga" sleep 5 done EOT

Opis modula

Kompletan popis Bash parametara za početnu instalacijsku skriptu

~# ./setup_puppetserver.sh Upotreba: ./setup_puppetserver.sh [ [ [ [] ] ] ]
  • r10k_repo_url - URI Git repozitorija
  • certname - potpuno kvalificirani naziv domene hosta
  • cflocation - inicijalizacija činjenice cf_location
  • cflocationpool - inicijalizacija činjenice cf_location_pool
  • http_proxy - proxy poslužitelj za HTTP i HTTPS zahtjeve

Kompletan popis Bash parametara za inicijalizacijsku skriptu Puppet klijenta

~# /root/genclientinit.sh Upotreba: ./genclientinit.sh [ [ []]]
Značenje parametara je isto kao u prethodnoj skripti.

klasa cfpuppetserver

  • deployuser = "deploypuppet" - korisničko ime za automatsko postavljanje ažuriranja konfiguracije
  • deployuser_auth_keys = undef - popis ključeva za $deployuser
  • repo_url = undef - URI spremišta (primjer: ssh://user@host/repo ili file:///some/path)
  • puppetserver = true - treba li instalirati komponentu Puppet Server na ovaj čvor
  • puppetdb = true - treba li instalirati komponentu PuppetDB na ovaj čvor
  • puppetdb_port = 8081 - port za PuppetDB
  • setup_postgresql = true - treba li instalirati PostgreSQL komponentu na ovaj čvor (samo ako je omogućena instalacija PuppetDB)
  • service_face = "any" - naziv resursa cfnetwork::iface za prihvaćanje dolaznih veza
  • puppetserver_mem = auto - RAM za Puppet Server u megabajtima (minimalno 192 MB)
  • puppetdb_mem = auto - RAM za PuppetDB u megabajtima (minimalno 192 MB)
  • postgresql_mem = auto - RAM za PostgreSQL u megabajtima (minimalno 128 MB)

klasa cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - adresa baze podataka
  • postgresql_listen = $postgresql_host - vrijednost ide izravno na listen_addresses PostgreSQL direktivu
  • postgresql_port = 5432 - port baze podataka
  • postgresql_user = "puppetdb" - PuppetDB korisnik u bazi podataka
  • postgresql_pass = "puppetdb" - lozinka korisnika PuppetDB u bazi podataka
  • postgresql_ssl = false - omogući enkripciju veze na temelju Puppet PKI certifikata

klasa cfpuppetserver::puppetserver

  • autosign = false - NE SMIJE se koristiti u borbenom okruženju, osim možda u DMZ-u. Postoji isključivo za automatizaciju testiranja.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - staza do zadane Hiera konfiguracijske datoteke prema Puppet kanonima (prva komponenta je naziv modula, ostatak je staza ispod datoteka/mape u modulu)

Možete pomoći i dodijeliti neka sredstva za razvoj stranice



Prije nekog vremena popis poslužitelja u mojim knjižnim oznakama premašio je 200. Kako se broj poslužitelja povećava, uvođenje bilo kakve nove konfiguracije ili instaliranje novih paketa gubi ogromnu količinu vremena. Pa sam odlučio upotrijebiti lutku.
Lutka(engleski lutka) je višeplatformska aplikacija klijent-poslužitelj koja vam omogućuje centralizirano upravljanje konfiguracijom operativnih sustava i programa instaliranih na nekoliko računala. Puppet je napisan u programskom jeziku Ruby.

Kažu i da je puppet sustav za daljinsko upravljanje konfiguracijom, čiji su najpoznatiji predstavnici otvoreni sustavi Cfengine i Puppet.

Nakon čitanja recenzija, odlučio sam koristiti lutku.

Instalacija i konfiguracija Puppet poslužitelja:
Instaliranje lutkarskog poslužitelja:
Instalirajte poslužitelj lutaka na OpenSuSE 11.4:

zatvarač u lutkarskom poslužitelju

Promijenimo naziv poslužitelja u lutka:
/etc/HOSTNAME:

DNS zapis mora se razriješiti na 127.0.0.2
mačka /etc/hosts:

127.0.0.2 lutka.site lutka

Dajmo korisniku prava lutka:

Pokrenimo uslugu Puppet Master:

rcpuppetmasterd početak

Dodajmo pokretanje lutkarskog demona pokretanju:

chkconfig -mappetmasterd

Postavljanje lutkarskog poslužitelja:
Definirajmo direktorij u koji će biti pohranjene datoteke koje će marionetski poslužitelj prenijeti na klijentska računala u manifestima tipa datoteke.

vim /etc/puppet/fileserver


put /etc/puppet/files
dopustiti *

mkdir /etc/puppet/files

chown -R lutka:lutka /etc/lutka/datoteke

Izradit ćemo datoteku bilo kojeg sadržaja za implementaciju i testiranje na klijentima

dodir /etc/puppet/files/puppettesting

Ponovno pokrenimo lutkarski poslužitelj:

ponovno pokretanje rcpuppetmasterd

Lutka koristi vlastiti jezik za opisivanje konačnog stanja operacijskog sustava, uz pomoć kojeg administrator sustava ukazuje u koji oblik treba dovesti komponente OS-a kako bi on postigao željeno stanje. Stanje može značiti prisutnost određene datoteke, mape, pokrenutih usluga, instaliranih paketa, ažuriranja i više. Sve postavke stanja opisane su u datotekama ili manifestima koji se nalaze u direktoriju: /etc/puppet/manifests. Ove datoteke imaju imena poput *.pp.

Stvorimo najjednostavniji manifest:
/etc/puppet/manifests/1.file.pp:

file("/tmp/puppettetesting":
izvor => "lutka:///datoteke/testiranje lutke",
}

Za korištenje ovog manifesta:
lutka primijeniti 1.file.pp

Instaliranje i konfiguriranje lutkarskog klijenta:

patentni zatvarač u lutki

Dajmo prava lutke korisniku:

chown -R lutka.lutka /var/lib/lutka/

Kako bi uspostavio vezu s marionet poslužiteljem, lutka klijent šalje zahtjev za potvrdu certifikata, nakon što se ovaj zahtjev potvrdi na poslužitelju, lutka klijent će početi koristiti njemu namijenjene manifeste. Poslat ćemo zahtjev za potvrdu certifikata:

Na poslužitelju možemo vidjeti koji su zahtjevi za potvrdu na čekanju:

"puppet-client.localdomain" (B5:12 :69 :63 :DE:19 :E9:75 :32 :2B:AA:74 :06:F6:8E:8A)

Potvrđujemo:

lutka --znak "lutka-client.localdomain"

Vrijeme je da pogledamo najjednostavnije primjere stvaranja manifesta:
kreirajte datoteku /etc/puppet/manifests/site.pp:

zadani čvor (
file("/tmp/puppettetesting":
izvor => "lutka ///datoteke/testiranje lutaka",
}
usluga ("ntp":
osigurati => rad,
omogućiti => istinito,
}
paket("htop":
osigurati => instalirano,
}
}

zadano - odnosi se na sve klijente
datoteka - ovaj odjeljak govori o stvaranju ili prepisivanju datoteke /tmp/puppettetesting koja se nalazi na poslužitelju u direktoriju /etc/puppet/files
usluga: provjerite radi li usluga, ako ne radi, pokrenite je i dodajte je u startup
paket: provjerite je li paket htop instaliran na klijentu i ako nije, instalirajte ga.

Za provjeru pokrenite na klijentu:

Kao što vidite, na klijentu je ntp dodan u pokretanje, ntp demon je pokrenut, htop paket je instaliran, a puppettetesting datoteka je kopirana u direktorij /tmp/

info: Predmemoriranje kataloga za lutka-client.localdomain
info: Primjena verzije konfiguracije "1370163660"
obavijest: / Stage[ main] // Node[ default] / Service[ ntp] / secure: osigurajte promjenu "stopped" u "running"
obavijest: / Stage[ main] // Node[ default] / Package[ htop ] / secure: created
obavijest: / Stage[ glavni] // Čvor [ zadano] / Datoteka [ / tmp/ puppettesting] / osigurati: definiran sadržaj kao "(md5)f2171ac69ba86781bea2b7c95d1c8e67"
obavijest: gotov katalog za 3,95 sekundi

U sljedećem ću članku opisati složenije primjere kreiranja manifesta i web sučelja lutkarske nadzorne ploče.

Popularne vrste resursa za lutke
kron- upravljanje cron poslovima
izvrs- pokretanje skripti i naredbi
datoteka- upravljanje datotekama
spremište za datoteke- sigurnosna kopija datoteke
skupina- upravljanje grupom
domaćin- upravljanje unosima u datoteci /etc/hosts
sučelje- konfiguracija mrežnih sučelja
montirati- montiranje datotečnih sustava
obavijestiti- slanje poruke u log datoteku Puppet
paket- upravljanje paketima
servis- upravljanje uslugama
sshkey- SSH upravljanje ključem
uredan, cist- brisanje datoteka ovisno o uvjetima
korisnik- upravljanje korisnicima
zonama- Upravljanje Solaris zonom

Najbolji članci na temu