kaughaldus
oma serveriparve haldamine ühest kohast
Jaagup Irve
jaagup.irve@ttu.ee
@jaagupirve
Probleemist
Kuidas hallata rohkem kui üht arvutit ühest kohast?
Toshaan Bharvani http://www.vantosh.com/
Ühe arvuti haldamine
füüsiline ligipääs
jadaporti ühenduv konsool
...
Ühe masina haldamine eemalt
ssh
telnet
powershell
...
haldamine paketihalduse tasemel
kirjutada masinat kirjeldav pakett
rpm
deb
...
Kaug-käivitus
mussh
clusterssh
pssh
...
Seadistuste haldamine
Puppet
Chef
CFEngine
Bcfg2
...
Seadistus & kaughaldus
Ansible
Salt
STAF
puppet
Ruby põhi
klient-server
kõrge abstraktsioonitase
manifestid: Puppeti oma keel või Ruby DSL
Linux, Unix, Windows
Chef
Ruby põhi
klient-server
kõrge abstraktsioonitase
kokaraamatud: Puppeti oma keel või Ruby DSL
pilv!
Linux, Unix, Windows
Salt
Pythoni põhi
klient-server
ZeroMQ ja SSH
Config: YAML, JSON, Jinja, Mako, Wempy, Python
miks salt?
Python
lihtsam seadistada
hea dokumentatsioon
kõik (algul) töötas
mõistlik
võimalusi
käskude jooksutamine
päringud süsteemi(de) kohta
testimine, kas üleval
faili/kataloogi kopeerimine
pakettide paigaldus/eemaldus
teenuste jälgimine
tehnoloogiast
ZeroMQ
YAML
Jinja
...
ZeroMQ
API
kiire turvaline andmevahetus
väga hea tehniline lahendus
paralleelne
...
yaml
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
...
jinja
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
paigaldamine
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
Seadistamine
/etc/salt/master
/etc/salt/minion
/etc/salt/minion.d/*.conf
pane master käima
ütle minionile kus aadressil master on
käivita minion
Põhireegel
SALT KÄIVITAB ÜLE VÕRGU
PYTHONI FUNKTSIOONE
package.function(name='foo', arg1='bar')
käivitamine eemalt
(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
...
Sihtimine
'*'
...
Funktsioonid
sisuliselt pythoni moodulid, mida käivitatakse
Näide
paar näidiskäsku
#salt '*' test.ping
#salt 'www.*' state.highstate
#salt 'www.lambda.ee' cmd.run 'netstat -l'
programme
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
Olekud
arvutisüsteeme seadistavad olekud
lihtne, kiire, mõistetav
suur vabadus (hirmutavalt)
YAML, JSON, Python
vali mis tahad, kuni see on YAML :)
/srv/salt all
top.sls
/srv/salt/top.sls
kirjeldab süsteemi seadistused kõige kõrgemal tasemel
base:
'*':
- core
- ssh
- users
'www.*':
- apache
- apache.php5
'neumann':
- nginx
- django
olekumoodulid
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 pakett on paigaldatud
- apache2 pakett jookseb
- fail httpd.conf serveris on identne failiga olekupuus
Täpsemalt
apache2:
pkg:
- installed
# ...
käivitab funktsiooni
salt.states.pkg.installed(name="apache2")
esimene klausel on "name" argumendi väärtus
siis tuleb käivituv moodul
esimene argument funktsiooni nimi
alternatiivne kirjaviis (ühe funktsiooni puhul):
apache2:
pkg.installed
olekute kirjutamine
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...")
Pillar
/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
komponendid
- Module - moodul, mis "oskab" midagi teha
-
Grain - rebootide vahel muutumatu info , masinavalikuks
- Renderer - tõlgendab .sls faili andmeteks
- Returner - suunab väljundit kuskile mujale, näiteks baasi
- Runner - tööriistad ja raportid
- State - (mooduleid jooksutav) olek
3 aastat hiljem
Avasta salt-formulas nimeline koodihoidla giti alt
Kui minionile on formula seadistatud, siis ta paigaldab vastava programmi vaikimisi seadistustega
Peenhäälestust tehakse pillari alt
salt-Formula
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
Dokumentatsioon
http://docs.saltstack.com/
Vihjeid
Tehke ülesanded ükshaaval: kõik korraga on liiga segane
Olekutes:
Jooksmise kontrolliks on service.running
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.
Kaughaldus 2007: salt
By irve
Kaughaldus 2007: salt
- 863