Palvelinten hallinta – PuppetMaster ja Herra & orja-arkkitehtuuri

Tehtävänanto:

h3. Anna orjalle määräyksiä master-slave arkkitehtuurilla (käytten puppetmaster:ia. Jos käytössäsi on vain yksi kone, voit asentaa herran ja orjan samalle koneelle. )
Bonus: vaihda oletustaustakuva. Kannattaa päällekirjoittaa tiedosto ja käyttää file-resurssia.
Bonus & kilpailu: kuka kurssilainen onnistuu hallitsemaan suurinta määrää orjia puppetilla? Raportoi.

Tehtävien ohje otettu: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016

Harjoituksessa käytetty laitteisto/ohjelmisto:

  • 16GB Kingston DataTraveler 100 G3 USB 3.0 muistitikku
  • Tietokone (Asus Z170-A, i7-6700K , 16GB DDR4 3200MHz, Evga 1070 sc)
  • Oheishärpäkkeet
  • Xubuntu 16.04.1 LTS

Alustavat valmistelut:

Seuraavat toimet suoritan aina, kun alan tekemään linux-harjoitusten eri osioita.
Boottasin Xubuntu-livetikulle valitsemalla USB-muistitikun käynnistyksen yhteydessä bootattavaksi levyksi.  Kun kysyttiin haluanko testata Xubuntua vaiko asentaa sen, valitsin vaihtoehdon “Try Xubuntu without installing“. Lyhyen latauksen päästä pääsin työpöydälle.
Yhdistin heti kotini langattomaan verkkoon työpöydän oikeasta yläkulmasta sekä muutin näppäimmistön layoutin suomiversioksi komennolla terminaalin komennolla “$ setxkbmap fi”.
Seuraavaksi syötin komennon “$ sudo apt-get update“. Kyseinen komento päivittää pakettivarastot, ja se kannattaa suorittaa aina ennen kuin hyödyntää paketinhallintaa mihinkään.

Hostnimen vaihtaminen

Aloitin harjoituksen vaihtamalla koneen hostnimen Tero Karvisen ohjeiden mukaisesti: http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04
$ sudo hostnamectl set-hostname markus
Tämän jälkeen lisäsin uuden nimen /etc/-kansion hosts-tiedostoon sudoeditillä.
$ sudoedit /etc/hosts
Kirjoitin uuden hostnimen xubuntun viereen tähän malliin ja tallensin:
Screenshot_2016-11-02_18-26-32.png
Nimenvaihdon jälkeen tuli käynnistää avahi-demoni uudelleen.
$ sudo service avahi-daemon restart
Kokeilin pingata markus.localin:
$ ping markus.local

PING markus.local (192.168.1.15) 56(84) bytes of data.
64 bytes from 192.168.1.15: icmp_seq=1 ttl=64 time=0.027 ms
64 bytes from 192.168.1.15: icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from 192.168.1.15: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 192.168.1.15: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 192.168.1.15: icmp_seq=5 ttl=64 time=0.015 ms
64 bytes from 192.168.1.15: icmp_seq=6 ttl=64 time=0.014 ms
...
--- markus.local ping statistics ---
43 packets transmitted, 43 received, 0% packet loss, time 42000ms
rtt min/avg/max/mdev = 0.011/0.030/0.039/0.008 ms

Uusi hostnimi näyttäisi pingauksen perusteella toimivan.

PuppetMasterin asennus

Seuraavaksi asensin Puppetin ja PuppetMasterin komennoilla:
$ sudo apt-get install puppet
$ sudo apt-get install puppetmaster

Herran ja orjan konfigurointi

Koska teen harjoitusta yhdellä tietokoneella, asensin herran ja orjan samalle koneelle. Sammutin puppetmasterin komennolla $ sudo service puppetmaster stop, jonka jälkeen poistin sertifikaatit:
$ sudo rm -r /var/lib/puppet/ssl
Nyt vanhemmat mahdolliset ssl-avaimet pitäisi olla poistettu.
Tämän jälkeen muokkasin sudoeditillä puppet.conf tiedostoa sijainnissa /etc/puppet/puppet.conf.
$ sudoedit /etc/puppet/puppet.conf
Laitoin herran master-tagin alle ja orjalle tein agent-tagin.

[master]
dns_alt_names = markus.local, markus
[agent]
server = markus.local

Eli conf-file näyttää nyt kokonaisuudessaan tältä:
Screenshot_2016-11-02_19-25-13.png
Tallensin muutokset ja käynnistin puppetmasterin uudelleen komennolla:
$ sudo service puppetmaster start
Tämän jälkeen määräsin puppet orjani toimimaan herran alaisuudessa ja käynnistin puppetin uudelleen:
$ sudo puppet agent –enable (kaksi väliviivaa)
$ sudo service puppet restart

Sertifikaatit

Hain sertifikaatin komennolla $ sudo puppet cert –list (kaksi väliviivaa)
Kyseinen komento ei kuitenkaan tulostanut yhtään mitään, joten yritin poistaa sertifikaatit uudelleen komennolla $ sudo rm -r /var/lib/puppet/ssl.
Kokeilin uudelleen hakea sertifikaatin
$ sudo puppet cert –list (kaksi väliviivaa)
johon sain vastaukseksi:

Notice: Signed certificate request for ca

Mkay… En tiedä onnistuiko asia toivotusti. Luulin, että tässä pitäisi saada, jokin tarkempi tuloste, joka sitten hyväksytään sudo puppet cert — sign – komennolla.
Kokeilin käynnistää puppetin uudelleen, jonka jälkeen kokeilin uudestaan sertin listausta.
$ sudo service puppet restart
$ sudo puppet cert –list (kaksi väliviivaa)
Nyt sain vastaukseksi:

"markus" (SHA256) "avaimen pitkä rimpsu"

Hyväksytään sertifikaatti:
$ sudo puppet cert –sign markus (kaksi väliviivaa)
Vastaukseksi sain:

Notice: Signed certificate request for markus
Notice: Removing file Puppet::SSL::CertificateRequest markus at '/var/lib/puppet/ssl/ca/requests/markus.pem'

Oletan, että se toimi oikein?

Moduuli

Navigoin kansioon $ cd /etc/puppet/modules/.

xubuntu@xubuntu:/etc/puppet/modules$ pwd
/etc/puppet/modules

Kyseiseen kansioon tein uuden kansion nimeltä “apache2” komennolla $ sudo mkdir apache2. Kyseisen kansion sisään tein toisen kansion nimeltä “manifests”: $ sudo mkdir manifests, johon tein sudoeditillä init.pp nimisen tekstitiedoston, joka tulee sitten sisältämään apachemoduulini.
Eli siis /etc/puppet/modules/apache2/manifests/init.pp
Init.pp sisälle tein simppelin apachen asentavan moduulin:

class apache2 {
 package {apache2:
 ensure => "installed",
 allowcdrom => "true",
 }
 file {"/var/www/html/index.html":
 content => "markuksen apachetesti"
 }
}

Lopuksi tein vielä site.pp tiedoston sijaintiin /etc/puppet/modules/apache2/manifests komennolla $ sudoedit site.pp.
Tiedoston sisään ei tullut muuta kuin:

include apache2

Moduuli on valmis, joten testataan seuraavaksi koko kokonaisuuden toimivuutta.
Ajoin komennon $ sudo service puppet restart
Ja sitten $ sudo puppet agent –test (kaksi väliviivaa)
Vastaukseksi sain:

Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Info: Retrieving pluginfacts
Error: /File[/var/lib/puppet/facts.d]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve file metadata for puppet://markus.local/pluginfacts: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Info: Retrieving plugin
Error: /File[/var/lib/puppet/lib]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Error: /File[/var/lib/puppet/lib]: Could not evaluate: Could not retrieve file metadata for puppet://markus.local/plugins: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Error: Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
Error: Could not send report: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [self signed certificate in certificate chain for /CN=Puppet CA: markus]

Huoh. Ainakin sertifikaatti kusee.
Pengoin toisten opiskelijoiden raportteja ja testasin Jarkko Kosken raportista (https://jarkkokoski.wordpress.com/palvelinlinux-3/) seuraavaa:
$ sudo puppet agent –test –debug (kaksi väliviivaa)
Komennosta seurasi seuraava näkymä:
Screenshot_2016-11-02_20-38-59.png
Koko lista ei kuvaan mahtunut, mutta monta erroria löytyy seasta.
Pysäytin puppetin ja puppetmasterin, jonka jälkeen poistin taas kaikki sertifikaatit. Sitten käynnistin puppetit uudelleen.
$ sudo service puppet stop
$ sudo service puppetmaster stop
$ sudo rm -r /var/lib/puppet/ssl
$ sudo service puppetmaster start
$ sudo service puppet start
Yllä mainittujen komentojen jälkeen kokeilin uudestaan debug-komentoa:
$ sudo puppet agent –test –debug
Nyt ei tullut yhtään erroreita:
Screenshot_2016-11-02_20-41-58.png
Kokeilin nyt komentoa $ sudo puppet agent –test
Vastaukseksi sain:

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for markus
Info: Applying configuration version '1478118886'
Notice: Finished catalog run in 0.01 seconds

Kokeilin avata localhostin selaimessa, mutta se ei toiminut.
Screenshot_2016-11-02_20-45-23.png
Huomasin tässä vaiheessa, että moduulissani oli syntaksivirhe file-kohdassa. Testaan nyt, että toimiiko moduuli ylipäätänsä.
$ sudo puppet apply -e ‘class {apache2:}’

Notice: Finished catalog run in 7.08 seconds

screenshot_2016-11-02_20-56-00
Moduuli ainakin asentaa apachen, mutta en nyt tiedä onko herra ja orja edes konfiguroitu oikein. Sertifikaatit eivät varmasti toimi. En oikein tiedä, mistä jatkaa tässä vaiheessa. Kello alkaa olemaan melko paljon, joten menen nukkumaan.

Yhteenveto

Haastava tehtävä. Aluksi harjoitus tuntui menevän ihan hyvin, mutta sertifikaatti kohta tuotti ongelmia, ja siitä lähtien harjoitus kulki aikalailla alamäkeä.

Lähteet:

Harjoituksen ohjeet
URL: http://terokarvinen.com/2016/aikataulu-palvelinten-hallinta-ict4tn022-1-5-op-uusi-ops-loppusyksy-2016
PuppetMaster
http://terokarvinen.com/2012/puppetmaster-on-ubuntu-12-04
Katsoin myös Jooel Nurmen ja Jarkko Kosken raporteista hieman ohjausta. En ollut maanantaina tunnilla, ja viime torstai tunnilla asia käytiin turhan nopeasti läpi.
https://jooelnurmi.wordpress.com/2016/11/01/h3-palvelinten-hallinta/
https://jarkkokoski.wordpress.com/palvelinlinux-3/

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 3 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html” Markus Pyhäranta

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top