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


'*'


'testmasin-[0-9]+'


'testmasin-2'


või süsteemi omaduste abil (grains)


...

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


Formula on teatud viis kirjeldada sõltumatut olekut
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:

Installimiseks on funktsioon pkg.installed
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

  • 789