GNU/Linux >> Znalost Linux >  >> Linux

Úvod do konfiguračních souborů loutek s příklady v systému Linux

Puppet se používá k automatizaci několika rutinních úloh konfigurace správce systému.

Loutka v systému řízení konfigurace podnikové třídy.

Umožňuje vám definovat stav vaší IT infrastruktury. Jakmile je definován, bude Puppet automaticky průběžně vynucovat správný stav.

1. Loutková architektura

Puppet má obvykle jednu serverovou komponentu a více agentů. Musíte určit server ve vaší síti jako loutkového mistra a každý uzel ve vaší síti bude mít nainstalovaného loutkového agenta.

Nejběžnějším způsobem použití konfigurace loutky na klienta je použití démona loutkového hlavního démona (puppetmasterd) a démona loutkového klienta (puppetd). Manifesty můžete také použít ručně pomocí loutkového nástroje.

Konfigurace je definována na loutkovém masteru, zkompilována a poté automaticky odeslána loutkovým klientům, když se připojí.

Puppet podporuje širokou škálu různých platforem a operačních systémů a automaticky spustí příslušné příkazy pro použití vašeho manifestu v každém prostředí.

Manifest není nic jiného než podrobnosti o souborech, balíčcích, konfiguračních operacích napsaných v jazyce, kterému loutka rozumí.

Každý uzel Puppet kontaktuje mistra loutek ve výchozím nastavení každých 30 minut, aby potvrdil, že jeho konfigurace je aktuální. Pokud je konfigurace odlišná nebo je k dispozici nová konfigurace, je znovu zkompilována a poté aplikována na uzel loutky.

V tomto tutoriálu vysvětlíme, jak vytvořit některé základní manifesty a aplikovat je na klienty pomocí loutkového nástroje.

Většinu konfigurace systému lze zobrazit pomocí nástroje příkazového řádku loutka. Všechny konfigurační komponenty jsou uspořádány do zdrojů. Zdroje jsou seskupeny do kolekcí. Zdroje se skládají z typu, názvu a řady atributů.

2. Příklad souboru zdroje loutky

Následuje základní příklad, jak zobrazit zdroj loutky. V tomto případě je zdrojem loutky, který si prohlížíme, soubor (/etc/nsswitch).

# puppet resource file /etc/nsswitch.conf
file { '/etc/nsswitch.conf':
  ensure   => 'file',
  content  => '{md5}0d6009cdfd12646d251e86303bc0c48c',
  ctime    => 'Sun May 18 13:20:02 -0400 2014',
  group    => '0',
  mode     => '644',
  mtime    => 'Tue May 04 15:22:21 -0400 2010',
  owner    => '0',
  selrange => 's0',
  selrole  => 'object_r',
  seltype  => 'etc_t',
  seluser  => 'system_u',
  type     => 'file',
}

Puppet je standardně dodáván s řadou typů zdrojů, včetně typů pro správu souborů, služeb, balíčků, úloh cron a souborových systémů, mezi ostatními.

Ve výše uvedeném příkladu je soubor typ prostředku a /etc/nsswitch.conf je název prostředku, který má být spravován.

Vše ostatní jsou atributy typu prostředku a hodnoty přítomné v atributech. Můžete také rozšířit loutku a přidat své vlastní typy zdrojů.

Chcete-li zobrazit všechny dostupné typy zdrojů, použijte následující příkaz:

# puppet resource --types
augeas
computer
cron
exec
file
filebucket
group
host
nagios_hostdepend
..
..

3. Příklad souboru manifestu loutky

Podívejme se, jak vytvořit jednoduchý soubor manifestu a spustit příkaz puppet pro použití konfigurace na server.

Následující příklad vytvoří jednoduchý manifestový soubor site.pp v adresáři /etc/puppet/manifests, který vytvoří testovací soubor pod /var/tmp.

Zpočátku, jak vidíme níže, nemáme testovací soubor.

# ls -ld /var/tmp/testfile
ls: cannot access /var/tmp/testfile: No such file or directory

Následuje deklarace zdroje v souboru manifestu (site.pp):

# cat site.pp
file { "/var/tmp/testfile":
        ensure => "present",
        owner => "root",
        group => "root",
        mode => "664",
        content => "This is a test file created using puppet.
                    Puppet is really cool",
}

Pro účely ukázky spouštíme loutkáře a agenta na stejném uzlu.

Když poprvé spustíte příkaz puppet apply s volbou –noop, provede se suchý běh bez skutečného použití konfigurace.

# puppet apply site.pp --noop
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.06 seconds
Notice: /Stage[main]/Main/File[/var/tmp/testfile]/ensure: current_value absent, should be present (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.03 seconds

Výše se dozvíte, co nová konfigurace udělá, aniž byste skutečně provedli změny v uzlu.

Nyní spusťte příkaz bez možnosti –noop, abyste skutečně použili konfiguraci, jak je uvedeno níže.

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/File[/var/tmp/testfile]/ensure: created
Notice: Finished catalog run in 0.05 seconds

Jakmile bude úspěšně spuštěn, uvidíte, že nový dočasný soubor je vytvořen pod /var/tmp/testfile s obsahem definovaným v site.pp.

# ls -ld /var/tmp/testfile
-rw-rw-r--. 1 root root 69 Jun 26 14:25 /var/tmp/testfile

# cat /var/tmp/testfile
This is a test file created using puppet.
  Puppet is really cool

4. Ovládejte službu na vzdáleném uzlu pomocí Puppet

Zde je příklad změny služby ze stavu zastaveno na stav spuštěný na uzlech agenta.

Když je tento konfigurační manifest uložen na hlavním serveru pod konkrétním umístěním v adresáři konfigurace loutky, agent běžící na všech uzlech kontaktuje hlavní uzel a načte konfiguraci a aplikuje ji na všechny klientské uzly, takže služba bude spuštěna. na všech uzlech agentů po úspěšném provedení konfigurace loutky.

# puppet resource service multipathd
service { 'multipathd':
  ensure => 'stopped',
  enable => 'false',
}

V tomto příkladu budeme ovládat službu multipathd. Loutku můžete použít k ovládání všech služeb, které běží v systému. Například httpd, mysqld atd.

# puppet resource service multipathd > site.pp

Ujistěte se, že site.pp má následující hodnoty. Pokud ne, upravte jej podle toho.

# vi site.pp
service { 'multipathd':
  ensure => 'running',
  enable => 'true',
}

Nejprve proveďte zkušební provoz, abyste se ujistili, že funguje podle očekávání.

# puppet apply site.pp --noop
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/Service[multipathd]/ensure: current_value stopped, should be running (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Finished catalog run in 0.06 seconds

Nakonec použijte konfigurační soubor, který spustí službu (v tomto příkladu multipathd), pokud již není spuštěna.

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.com in environment production in 0.07 seconds
Notice: /Stage[main]/Main/Service[multipathd]/ensure: ensure changed 'stopped' to 'running'
Notice: Finished catalog run in 0.28 seconds

# puppet resource service multipathd
service { 'multipathd':
  ensure => 'running',
  enable => 'true',
}

# chkconfig --list | grep multipath
multipathd      0:off   1:off   2:on    3:on    4:on    5:on    6:off

5. Nainstalujte balíček na vzdálený uzel pomocí Puppet

Instalaci balíčku na všechny uzly agenta můžete provést vzdáleně pomocí loutky.

Následuje ukázkový soubor manifestu pro instalaci balíčku.

# cat site.pp
package { 'httpd':
  ensure => 'present',
}

V tomto příkladu nainstaluje balíček Apache httpd, pokud není přítomen na vzdáleném webu. Jak vidíte níže, nainstaloval balíček.

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.70 seconds
Notice: /Stage[main]/Main/Package[httpd]/ensure: created
Notice: Finished catalog run in 79.97 seconds

Ověřte, že je balíček správně nainstalován pomocí příkazu rpm.

# rpm -qa | grep -i httpd
httpd-2.2.15-39.el6.centos.x86_64
httpd-tools-2.2.15-39.el6.centos.x86_64

6. Dva typy sbírek loutek

Prostředky mohou konfigurovat charakteristiky jednotlivých konfiguračních položek na uzlech. Většina služeb a aplikací se však skládá z více zdrojů.

Například webový server se skládá ze softwarového balíku, uživatelů pro spouštění softwaru a různých konfiguračních, protokolovacích a dalších souborů.

Kolekce prostředků vám umožňuje shromáždit prostředky, přiřadit je ke kolekci a aplikovat kolekci na uzly agentů.

Existují 2 typy shromažďování zdrojů:

  1. Třídy
  2. Definice

7. Příklad sbírky loutkové třídy

Třída je kolekce prostředků, které představují jednu konfigurační položku na vašem uzlu, zatímco definice je kolekce konfiguračních položek, které mají ve vašem uzlu více reprezentací.

V předchozím příkladu se po instalaci balíčku služby standardně nespouštějí. Můžeme vytvořit jednoduchý manifest s třídou pro instalaci balíčku a spuštění služby po instalaci.

V následujícím příkladu jsme specifikovali vztah mezi dvěma zdroji pomocí atributu require.

# cat site.pp
class apache {
        package { 'httpd':
           ensure => 'present',
                }
        service {'httpd':
           ensure => 'running',
           require => Package["httpd"],
           }
}
include apache

Tím zajistíte, že podmínka je splněna dříve, než se použijí změny prostředků. V tomto případě služba httpd vyžaduje, aby byl nejprve nainstalován balíček httpd, než se bude moci pokusit spustit služby.

# puppet apply site.pp
Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.93 seconds
Notice: /Stage[main]/Apache/Package[httpd]/ensure: created
Notice: /Stage[main]/Apache/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
Notice: Finished catalog run in 32.82 seconds

# chkconfig --list | grep http
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off

# rpm -qa | grep -i http
httpd-2.2.15-39.el6.centos.x86_64
httpd-tools-2.2.15-39.el6.centos.x86_64

8. Příklad kolekce definice loutky

Definice je typ sbírky loutkových zdrojů.

Definice by se měly používat pro položky konfigurace, které mají více instancí na uzlu.

Například server httpd může mít definováno více virtuálních hostitelů. Můžete vytvořit definici pro konfiguraci virtuálních hostitelů a předat příslušné argumenty pro konfiguraci každého z nich. Dokud byla každá sada argumentů jiná, puppet konfiguroval nového virtuálního hostitele pokaždé, když byla definice vyhodnocena.

Následuje příklad jednoduchého manifestu s třídou a definicí.

# cat site1.pp
class testdefine {
    define testdefine ($data) {
      file {"$title":
        ensure  => file,
        content => $data,
      }
    }

    testdefine {'/var/tmp/puppetfile1':
      data => "The name of the file is puppetfile1 and it is created by puppet\n",
    }

    testdefine {'/var/tmp/puppetfile2':
      data => "The name of the file is puppetfile2 and it is created by puppet\n",
    }
    testdefine {'/var/tmp/puppetfile3':
      data => "The name of the file is puppetfile3 and it is created by puppet\n",
    }

}

include testdefine

Spusťte výše uvedenou třídu loutek a manifest definice, jak je uvedeno níže.

# puppet apply site1.pp
Notice: Compiled catalog for pemaster.mydomain.net in environment production in 0.24 seconds
Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile2]/File[/var/tmp/puppetfile2]/ensure: defined content as '{md5}9079bd9c7650ae7d503c7df1a68bb9f0'
Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile3]/File[/var/tmp/puppetfile3]/ensure: defined content as '{md5}75d495f0d3180b1f2dd052ac208d81fe'
Notice: /Stage[main]/Testdefine/Testdefine::Testdefine[/var/tmp/puppetfile1]/File[/var/tmp/puppetfile1]/ensure: defined content as '{md5}1fa93f1f2b82f8358866d58b2cb2f0b4'
Notice: Finished catalog run in 0.19 seconds

# ls -l /var/tmp/puppetfile*
-rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile1
-rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile2
-rw-r--r--. 1 root root 64 Jun 26 19:11 /var/tmp/puppetfile3

# cat /var/tmp/puppetfile*
The name of the file is puppetfile1 and it is created by puppet
The name of the file is puppetfile2 and it is created by puppet
The name of the file is puppetfile3 and it is created by puppet

9. Příklad konfiguračního souboru loutkového uzlu

Doposud jsme viděli definování zdrojů a kolekcí zdrojů ve formě tříd a definic.

Nyní je dalším krokem, jak tyto prostředky a kolekce přiřadit klientům.

Zde je příklad, jak jsou uzly definovány v node.pp.

Puppet používá tento soubor k určení, která třída (obsahuje prostředky) by měla jít na který server, například na klientovi 1 chcete spustit třídu httpd, která obsahuje prostředky jako balíček httpd, službu httpd a na klientovi 2 chcete třídu spustit. ngnix, který obsahuje zdroje jako balíček ngnix, služba ngnix a další konfigurační soubory ngnix.

Následující ukázkový soubor nodes.pp to vysvětluje:

node 'puppetclient1.mydomain.net' {
include httpd_class
}
node 'puppetclient2.mydomain.net' {
include ngnix_class
}
node default {
    package { "perl": 
       ensure => present }
}

Do definice uzlu můžete přidat prostředky, třídy a definice.

Třídy se přidávají pomocí funkce include.

Do puppetclient1.mydomain.net jsme zahrnuli httpd_class a do puppetclient2.mydomain.net jsme zahrnuli ngnix_class.

Můžete také zahrnout více tříd pomocí jedné funkce zahrnutí. Pokud neodpovídá žádná definice uzlu, převezme definované výchozí hodnoty. V tomto případě, pokud existují nějaké další uzly, nainstaluje pouze balíčky perl, pokud nejsou přítomny.

10. Import souborů Puppet Manifest

Prostředky, třídy a definice jsou uloženy v souborech manifestu.

Jádrem naší konfigurace je speciální soubor manifestu, zvaný site manifest.

Při spouštění hlavního démona Puppet musí být přítomen soubor manifestu webu, který se standardně nachází v /etc/puppet/manifests/site.pp.

Ve výše uvedených příkladech jsme použili site.pp pouze k vysvětlení, jak použít manifesty.

Ve skutečném loutkovém prostředí bude mít váš site.pp pouze níže uvedený obsah a z tohoto souboru se importují ostatní soubory ke spuštění.

# cat site.pp
import "templates.pp"
import "nodes.pp"
import "classes/*"
import "groups/*"
import "users/*"
import "os/*"

Zde je adresářová struktura loutkového manifestu:

  • /manifests/classes/ – Adresář obsahující všechny třídy
  • /manifests/site.pp – primární soubor manifestu
  • /manifests/templates.pp – Obsahuje uzly šablony
  • /manifests/nodes.pp – Obsahuje definice uzlů
  • /manifests/definitions/ – Obsahuje všechny definice
  • /manifests/groups/ – Obsahuje skupiny pro konfiguraci manifestů
  • /manifests/os/ – Obsahuje třídy určené ke konfiguraci uzlů s konkrétními operačními systémy
  • /manifests/users/ – Obsahuje uživatele konfigurující manifesty
  • /manifest/files/ – Obsahuje moduly souborového serveru pro distribuovatelné soubory Puppet

Linux
  1. Linux Tee Command s příklady

  2. Jak rozbalit soubory v Linuxu (s příklady)

  3. JQ Command v Linuxu s příklady

  1. wc Linux Command s příklady

  2. Linux řazení příkazů s příklady

  3. Linuxový příkaz rsync s praktickými příklady

  1. Echo Command v Linuxu (s příklady)

  2. man Command v Linuxu s příklady

  3. Příkaz AWK v Linuxu s příklady