oma serveriparve haldamine ühest kohast
Jaagup Irve
jaagup.irve@ttu.ee
@jaagupirve
Kuidas hallata rohkem kui üht arvutit ühest kohast?
Toshaan Bharvani http://www.vantosh.com/
füüsiline ligipääs
jadaporti ühenduv konsool
...
ssh
telnet
powershell
...
kirjutada masinat kirjeldav pakett
rpm
deb
...
mussh
clusterssh
pssh
...
Puppet
Chef
CFEngine
Bcfg2
...
Ansible
Salt
STAF
Ruby põhi
klient-server
kõrge abstraktsioonitase
manifestid: Puppeti oma keel või Ruby DSL
Linux, Unix, Windows
Ruby põhi
klient-server
kõrge abstraktsioonitase
kokaraamatud: Puppeti oma keel või Ruby DSL
pilv!
Linux, Unix, Windows
Pythoni põhi
klient-server
ZeroMQ ja SSH
Config: YAML, JSON, Jinja, Mako, Wempy, Python
Python
lihtsam seadistada
hea dokumentatsioon
kõik (algul) töötas
mõistlik
käskude jooksutamine
päringud süsteemi(de) kohta
testimine, kas üleval
faili/kataloogi kopeerimine
pakettide paigaldus/eemaldus
teenuste jälgimine
ZeroMQ
YAML
Jinja
...
API
kiire turvaline andmevahetus
väga hea tehniline lahendus
paralleelne
...
viis üsna inimloetaval moel andmeid üles märgendada
objekt:
- listisissekanne1
- listisissekanne2
- omadus: väärtus
- omadus: 'tühikuga väärtus'
- listiobjekt:
- alam-objekt1
- alam-objekt2
kasutatakse seadistamisel
teiseneb pythoni funktsiooniväljakutseks
...
mallikeel
teisendab teksti/seadistusfaile
{% for user in 'klaabu', 'nipi', 'kala' %}
{{user}}:
user.present
{% endfor %}
võimaldab korduvad YAMLi käsud asendada ühekordse for-tsükliga
klaabu:
user.present
nipi:
user.present
kala:
user.present
võimaldab seadistusfailide kohandamist konkreetsele serverile
pip install salt
$ sudo apt-add-repository ppa:saltstack/salt $ sudo apt-get update $ sudo apt-get install salt-master
olemas ka distropõhised paketid
http://docs.saltstack.com/topics/installation/index.html
/etc/salt/master
/etc/salt/minion
/etc/salt/minion.d/*.conf
pane master käima
ütle minionile kus aadressil master on
käivita minion
SALT KÄIVITAB ÜLE VÕRGU
PYTHONI FUNKTSIOONE
package.function(name='foo', arg1='bar')
(oluline ka seadistamise halduse mõistmiseks)
käsurealt antakse sihtmärk ja funktsioon ja argumendid
sihtmärk ütleb kes funktsiooni käivitavad
funktsioon ütleb, mis juhtub
argumendid täpsustavad
...
'*'
...
sisuliselt pythoni moodulid, mida käivitatakse
paar näidiskäsku
#salt '*' test.ping
#salt 'www.*' state.highstate
#salt 'www.lambda.ee' cmd.run 'netstat -l'
salt-master - server (isand)
salt-minion - klient (käsilane)
salt-key - võtab vastu minioni võtme
# salt-key -A # võtab vastu kõik võtmed
salt-call - kohalikeks käskudeks minioni tasemel
# salt-call grains.items
salt - käskude andmiseks
salt '*' disk.usage
arvutisüsteeme seadistavad olekud
lihtne, kiire, mõistetav
suur vabadus (hirmutavalt)
YAML, JSON, Python
vali mis tahad, kuni see on YAML :)
/srv/salt all
/srv/salt/top.sls
kirjeldab süsteemi seadistused kõige kõrgemal tasemel
base:
'*':
- core
- ssh
- users
'www.*':
- apache
- apache.php5
'neumann':
- nginx
- django
näiteks /srv/salt/apache/init.sls
apache2:
pkg:
- installed
service:
- running
file:
- managed
- name: /etc/apache2/httpd.conf
- source: salt://apache/httpd.conf
seisund on saavutatud, kui:
apache2:
pkg:
- installed
# ...
käivitab funktsiooni
salt.states.pkg.installed(name="apache2")
siis tuleb käivituv moodul
esimene argument funktsiooni nimi
alternatiivne kirjaviis (ühe funktsiooni puhul):
apache2:
pkg.installed
Thomas Hatch (autor):
Minu juurde on tulnud firmad, kes on kasutanud teisi süsteeme ja ütlevad, et neil kulus oma seadistuste puu ülesehitamiseks poolteist aastat. Salt läks peale kolme nädalaga.
tundub aus väide
("aga...")
/srv/pillar/
masinapõhised alternatiivseadistused
näeb ainult see masin, kellele info mõeldud on
(paroolid!)
analoogselt: top.sls fail ja YAML
struktuuri ja sisu eristamine (HTML/CSS analoog)
pillar - salajane; salt states - avalik
Avasta salt-formulas nimeline koodihoidla giti alt
Masteri all seadista gitfs-remotes alla retsept
https://github.com/saltstack-formulas/apache-formula
Loe läbi pillar.example ja kirjuta enda info pillari alla
http://docs.saltstack.com/
Tehke ülesanded ükshaaval: kõik korraga on liiga segane
Olekutes:
Masina nimega lehe jaoks ehitage olekute alla lehe prototüüp ja öelge, et too on Jinja mall; siis Jinja abil võtke Grainsist (appi, paanika, niikeeruline) masina nimi ja pange prototüüpi
Nipi ja kala kasutajate jaoks jälgige et pillar hoiaks parooli ja et .sls failis oleks see pillarist välja korjatud.