Manage multiple server & client computers with SaltStack (finnish)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

18 KiB

Palvelinten hallinta - Harjoitus 1

Disclaimer:

Tämä harjoitus on tehty osana Haaga-Helian Tietojenkäsittelyn koulutusohjelman kurssia Palvelinten hallinta (ICT4TN022, kevät 2018). Kurssin pitäjänä toimii Tero Karvinen, joka on määritellyt tämän harjoituksen tehtävänkuvaukset. Tehtävien vastaukset ovat Pekka Heleniuksen (allekirjoittanut) tuottamia.

SISÄLLYSLUETTELO

c) Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.

Vastaus:

sudo apt-get update && sudo apt-get install salt-common salt-master salt-minion salt-ssh ssh

Näistä salt-master ja salt-ssh (sekä ssh-palvelin) tulee asentaa isäntäkoneelle, salt-minion ja ssh-asiakasohjelma taas asiakaskoneelle. Tässä tapauksessa asennamme molemmat samalle koneelle.

Käynnistetään salt-master:

sudo systemctl enable salt-master.service
sudo systemctl start salt-master.service

Tarkistetaan salt-masterin status:

systemctl status salt-master.service

Käynnistetään salt-minion:

sudo systemctl enable salt-minion.service
sudo systemctl start salt-minion.service

Tarkistetaan salt-minionin status:

systemctl status salt-minion.service

Haetaan salt-masterin IP-osoite komennolla ifconfig*. IP-osoitetta indikoi tulosteen kohta inet.

*En käytä tässä Debian-pohjaisista jakeluista löytyvää hostname -I -komentoa, koska sitä ei ole muissa jakeluperheissä laajalti saatavilla oletuksena.

Kerrotaan salt-minionille salt-masterin IP-osoite (tai koneen nimi) luotuun salt-minionin konfiguraatiotiedostoon /etc/salt/minion. Lisätään minionille ID-tunnus "orja".

Lisätään seuraavat kentät (/etc/salt/minion):

master: 127.0.0.1
id: orja

Käynnistetään salt-minion uudelleen:

sudo systemctl restart salt-minion.service

Ajetaan master-koneella komennot:

sudo salt-key
sudo salt-key -A

Esimerkkituloste:

fincer@computer:~$ sudo salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
orja
Rejected Keys:
fincer@computer:~$ sudo salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
orja
Proceed? [n/Y] y
Key for minion orja accepted.

Käynnistetään vielä salt-minion uudelleen:

sudo systemctl restart salt-minion.service

Ajetaan esimerkkikomento:

fincer@computer:~$ sudo salt '*' cmd.run "ls /boot"
orja:
System.map-4.15.0-13-generic
abi-4.15.0-13-generic
config-4.15.0-13-generic
grub
initrd.img-4.15.0-13-generic
memtest86+.bin
memtest86+.elf
memtest86+_multiboot.bin
retpoline-4.15.0-13-generic
vmlinuz-4.15.0-13-generic

d) Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.

Vastaus:

Luodaan master-koneelle kansiopolku /srv/salt

sudo mkdir -p /srv/salt

Lisätään tiedosto /srv/salt/top.sls ja /srv/salt/firewall.sls

sudo touch /srv/salt/{top.sls,firewall.sls}

Lisätään firewall.sls:een seuraava sisältö (sudoedit /srv/salt/firewall.sls):

ufw:
pkg.installed
ufw-enable:
cmd.run:
- name: 'ufw --force enable'
- require:
- pkg: ufw

Lähde: joonaleppalahti - firewall.sls

Lisätään top.sls:een seuraava sisältö:

base:
'orja':
- firewall

missä 'orja' on minionin (tai minioneiden, jos regex) ID-tunnus verkossa, ja 'firewall' viittaa masterin kansiossa /srv/salt olevaan tiedostoon firewall.sls, jonka sisältö orjalle ajetaan.

Ajetaan masterilla komento:

sudo salt '*' state.highstate

jonka output on seuraavaa:

fincer@computer:~$ sudo salt '*' state.highstate
orja:
----------
ID: ufw
Function: pkg.installed
Result: True
Comment: All specified packages are already installed
Started: 13:28:16.290668
Duration: 858.482 ms
Changes:   
----------
ID: ufw-enable
Function: cmd.run
Name: ufw --force enable
Result: True
Comment: Command "ufw --force enable" run
Started: 13:28:17.190531
Duration: 843.309 ms
Changes:   
----------
pid:
10265
retcode:
0
stderr:
stdout:
Firewall is active and enabled on system startup
Summary for orja
------------
Succeeded: 2 (changed=1)
Failed:    0
------------
Total states run:     2
Total run time:   1.718 s

UFW-palomuuri oli jo orjakoneelle asennettuna, mutta ei kytkettynä päälle. Täten suoritettiin vain yksi muutos, joskin ajettiin kaksi komentoa orjalle.

e) Kerää laitetietoja koneilta saltin grains-mekanismilla.

Vastaus:

Kaikkien masterin hyväksymien minion-koneiden kaikki grains:t saa esille master-koneella ajettavalla komennolla:

sudo salt '*' grains.ls

Minioneiden salt:sta saa tietoja esimerkiksi seuraavasti (koskee kaikkia minion-koneita verkossa, ks. tähtimerkki):

fincer@computer:~$ sudo salt '*' grains.items | grep saltversion -C 4
- candidate
- 1
saltpath:
/usr/lib/python3/dist-packages/salt
saltversion:
2017.7.4
saltversioninfo:
- 2017
- 7
- 4
- 0

ja systemd:n pakettitietoja (flags) sekä versionumero:

fincer@computer:~$ sudo salt '*' grains.item systemd
orja:
----------
systemd:
----------
features:
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
version:
237

Jne.

f) Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).

Vastaus:

HUOM! Tehtävässä ei käytetty salt-ssh:ta!

Asetetaan kaksi konetta samaan verkkoon. Toinen koneista on master, toinen minion.

  • Master-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.101

  • Minion-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.102

  • IP-osoitteet määriteltiin koneille DHCP-palvelimella

Asennetaan Master ja Minion -konfiguraatiot kohdan c) -ohjeita mukaillen. Minion-koneella /etc/salt/minion -tiedostoon annetaan masterin IP-osoite ja orjakoneen ID muodossa

master: 10.11.11.101
id: orjakone

minkä jälkeen ajetaan master-koneella komennot (HUOM! minion-kone ei heti näy salt-key:n listauksessa):

sudo salt-key && sudo salt-key -A

Output:

fincer@master:~$ sudo salt-key && sudo salt-key -A
Accepted Keys:
Denied Keys:
Unaccepted Keys:
orjakone
Rejected Keys:
The following keys are going to be accepted:
Unaccepted Keys:
orjakone
Proceed? [n/Y] y
Key for minion orjakone accepted.

Asennetaan LAMP-ympäristö ja /var/www/html/index.php orjakoneelle. Ajetaan masterilla seuraavat komennot:

sudo mkdir -p /srv/salt
echo "<?php phpinfo(); ?>" | sudo tee /srv/salt/index.php
sudo wget https://raw.githubusercontent.com/joonaleppalahti/CCM/master/salt/srv/salt/lamp.sls -O /srv/salt/lamp.sls
sudo sed -i '14,18d; s/salt\:\/\/webserver\//salt\:\/\//' /srv/salt/lamp.sls
sudo salt 'orja*' state.apply lamp

Wget:llä ladattu tiedosto sisältää määritykset myös index.html:lle, joita ei tässä laiteta. Siksi kys. tiedostoa koskevat rivit poistetaan em. sed-komennolla. Sed-komennolla poistetaan myös viittaus alihakemistoon webserver.

Output onnistuneesta salt-komennosta (masterilla):

fincer@master:~$ cat /srv/salt/lamp.sls 
install_lamp:
pkg.installed:
- pkgs:
- apache2
- libapache2-mod-php
/var/www/html/index.php:
file:
- managed
- source: salt://index.php
- require:
- pkg: install_lamp
fincer@master:~$ sudo salt 'orja*' state.apply lamp
orjakone:
----------
ID: install_lamp
Function: pkg.installed
Result: True
Comment: 2 targeted packages were installed/updated.
Started: 15:07:24.960653
Duration: 50817.827 ms
Changes:   
----------
apache2:
----------
new:
2.4.29-1ubuntu4
old:
apache2-api-20120211:
----------
new:
1
old:
apache2-api-20120211-openssl1.1:
----------
new:
1
old:
apache2-bin:
----------
new:
2.4.29-1ubuntu4
old:
apache2-data:
----------
new:
2.4.29-1ubuntu4
old:
apache2-utils:
----------
new:
2.4.29-1ubuntu4
old:
httpd:
----------
new:
1
old:
httpd-cgi:
----------
new:
1
old:
libapache2-mod-php:
----------
new:
1:7.2+60ubuntu1
old:
libapache2-mod-php7.2:
----------
new:
7.2.3-1ubuntu1
old:
libapr1:
----------
new:
1.6.3-2
old:
libaprutil1:
----------
new:
1.6.1-2
old:
libaprutil1-dbd-sqlite3:
----------
new:
1.6.1-2
old:
libaprutil1-ldap:
----------
new:
1.6.1-2
old:
liblua5.2-0:
----------
new:
5.2.4-1.1build1
old:
php-calendar:
----------
new:
1
old:
php-cli:
----------
new:
1
old:
php-common:
----------
new:
1:60ubuntu1
old:
php-ctype:
----------
new:
1
old:
php-exif:
----------
new:
1
old:
php-fileinfo:
----------
new:
1
old:
php-ftp:
----------
new:
1
old:
php-iconv:
----------
new:
1
old:
php-json:
----------
new:
1
old:
php-opcache:
----------
new:
1
old:
php-pdo:
----------
new:
1
old:
php-phar:
----------
new:
1
old:
php-posix:
----------
new:
1
old:
php-readline:
----------
new:
1
old:
php-shmop:
----------
new:
1
old:
php-sockets:
----------
new:
1
old:
php-sysvmsg:
----------
new:
1
old:
php-sysvsem:
----------
new:
1
old:
php-sysvshm:
----------
new:
1
old:
php-tokenizer:
----------
new:
1
old:
php7.2-calendar:
----------
new:
1
old:
php7.2-cli:
----------
new:
7.2.3-1ubuntu1
old:
php7.2-common:
----------
new:
7.2.3-1ubuntu1
old:
php7.2-ctype:
----------
new:
1
old:
php7.2-exif:
----------
new:
1
old:
php7.2-fileinfo:
----------
new:
1
old:
php7.2-ftp:
----------
new:
1
old:
php7.2-gettext:
----------
new:
1
old:
php7.2-iconv:
----------
new:
1
old:
php7.2-json:
----------
new:
7.2.3-1ubuntu1
old:
php7.2-opcache:
----------
new:
7.2.3-1ubuntu1
old:
php7.2-pdo:
----------
new:
1
old:
php7.2-phar:
----------
new:
1
old:
php7.2-posix:
----------
new:
1
old:
php7.2-readline:
----------
new:
7.2.3-1ubuntu1
old:
php7.2-shmop:
----------
new:
1
old:
php7.2-sockets:
----------
new:
1
old:
php7.2-sysvmsg:
----------
new:
1
old:
php7.2-sysvsem:
----------
new:
1
old:
php7.2-sysvshm:
----------
new:
1
old:
php7.2-tokenizer:
----------
new:
1
old:
phpapi-20170718:
----------
new:
1
old:
----------
ID: /var/www/html/index.php
Function: file.managed
Result: True
Comment: File /var/www/html/index.php updated
Started: 15:08:15.783571
Duration: 67.439 ms
Changes:   
----------
diff:
New file
mode:
0644
Summary for orjakone
------------
Succeeded: 2 (changed=2)
Failed:    0
------------
Total states run:     2
Total run time:  50.885 s

Sekä:

fincer@master:~$ sudo salt 'orjakone' cmd.run 'dpkg --get-selections | grep apache'
orjakone:
apache2						install
apache2-bin						install
apache2-data					install
apache2-utils					install
libapache2-mod-php					install
libapache2-mod-php7.2				install