Eine Einführung von Valentin Hoebel / @xenuser (Twitter)
ihr müsst eine Vielzahl an Systemen verwalten...
Ein Beispiel:
salt webserver1 pkg.install nginx
salt "*" file.append "/etc/motd" "Welcome."
salt |
"*" |
file.append |
"/etc/motd" "Welcome." |
Linux-Kommando | Zielangabe | modul.funktion | Parameter |
salt "database0*" pkg.version mysql-server
salt -G "site:frankfurt" user.add "praktikant"
salt -C "G@os:Fedora and client*" cmd.run "lastlog"
salt "*" user.add praktikant shell=/bin/bash
database01:
True
webserver01:
True
client01:
True
Auflistung von Grains auf einem Minion:
root@ubuntu:~# salt "ubuntu" grains.items
ubuntu:
----------
SSDs:
biosreleasedate:
07/02/2015
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- dts
- mmx
- fxsr
- sse
- sse2
- ss
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- arch_perfmon
- pebs
- bts
- nopl
- xtopology
- tsc_reliable
- nonstop_tsc
- aperfmperf
- eagerfpu
- pni
- pclmulqdq
- ssse3
- fma
- cx16
- pcid
- sse4_1
- sse4_2
- x2apic
- movbe
- popcnt
- tsc_deadline_timer
- aes
- xsave
- avx
- f16c
- rdrand
- hypervisor
- lahf_lm
- abm
- 3dnowprefetch
- ida
- arat
- pln
- pts
- dtherm
- hwp
- hwp_noitfy
- hwp_act_window
- hwp_epp
- fsgsbase
- tsc_adjust
- bmi1
- hle
- avx2
- smep
- bmi2
- invpcid
- rtm
- rdseed
- adx
- smap
- xsaveopt
- xsavec
- xgetbv1
cpu_model:
Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
cpuarch:
x86_64
domain:
fqdn:
ubuntu
fqdn_ip4:
- 127.0.1.1
fqdn_ip6:
gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
host:
ubuntu
hwaddr_interfaces:
----------
eno16777736:
00:0c:29:a7:cf:5a
lo:
00:00:00:00:00:00
id:
ubuntu
init:
systemd
ip4_interfaces:
----------
eno16777736:
- 192.168.126.129
- 192.168.126.132
lo:
- 127.0.0.1
ip6_interfaces:
----------
eno16777736:
- fe80::20c:29ff:fea7:cf5a
- 192.168.126.132
lo:
- ::1
ip_interfaces:
----------
eno16777736:
- 192.168.126.129
- fe80::20c:29ff:fea7:cf5a
- 192.168.126.132
lo:
- 127.0.0.1
- ::1
ipv4:
- 127.0.0.1
- 192.168.126.129
- 192.168.126.132
ipv6:
- ::1
- fe80::20c:29ff:fea7:cf5a
kernel:
Linux
kernelrelease:
4.2.0-16-generic
locale_info:
----------
defaultencoding:
UTF-8
defaultlanguage:
en_US
detectedencoding:
UTF-8
localhost:
ubuntu
lsb_distrib_codename:
wily
lsb_distrib_description:
Ubuntu 15.10
lsb_distrib_id:
Ubuntu
lsb_distrib_release:
15.10
machine_id:
2af64fc78adf4b8ba44c1b51f10371e2
manufacturer:
VMware, Inc.
master:
localhost
mdadm:
mem_total:
2991
nodename:
ubuntu
num_cpus:
2
num_gpus:
1
os:
Ubuntu
os_family:
Debian
osarch:
amd64
oscodename:
wily
osfinger:
Ubuntu-15.10
osfullname:
Ubuntu
osrelease:
15.10
osrelease_info:
- 15
- 10
path:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
productname:
VMware Virtual Platform
ps:
ps -efHww
pythonexecutable:
/usr/bin/python
pythonpath:
- /usr/bin
- /usr/lib/python2.7
- /usr/lib/python2.7/plat-x86_64-linux-gnu
- /usr/lib/python2.7/lib-tk
- /usr/lib/python2.7/lib-old
- /usr/lib/python2.7/lib-dynload
- /usr/local/lib/python2.7/dist-packages
- /usr/lib/python2.7/dist-packages
- /usr/lib/python2.7/dist-packages/PILcompat
- /usr/lib/python2.7/dist-packages/ubuntu-sso-client
pythonversion:
- 2
- 7
- 10
- final
- 0
saltpath:
/usr/lib/python2.7/dist-packages/salt
saltversion:
2015.5.3
saltversioninfo:
- 2015
- 5
- 3
- 0
serialnumber:
VMware-56 4d f9 5c be f4 5a ff-4b 98 af c7 fc a7 cf 5a
server_id:
1819121879
shell:
/bin/sh
systemd:
----------
features:
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD -IDN
version:
225
virtual:
VMware
zmqversion:
4.0.5
Eigene Grains können wie folgt definiert werden:
Module bieten ein Bündel an Funktionen für Remote-Execution an
Module beziehen sich auf ein Thema (z. B. User, Gruppen, Paket-Handling, MySQL)
Module abstrahieren das Arbeiten - "Meta-Befehle" (wie pkg.install) werden plattformspezifisch umgesetzt
Zahlreiche Module verfügbar..
Pkg | cron | DRBD | Apache | file | firewalld | git |
glusterfs | group | hadoop | haproxy | ilo | DRAC | ipmi |
kerberos | logrotate | LVM | LXC | memcached | munin | mysql |
nagios | oracle | postfix | postgres | rabbitmq | s3 | selinux |
splunk | sqlite | systemd | udev | useradd | win | cmd |
Module helfen auch beim Aufsetzen von Diensten
Module erlauben hohen Grad an Automatisierung
Module können in eigene Scripte eingebettet werden
root@ubuntu:~# salt "ubuntu" pkg.install htop
ubuntu:
----------
htop:
----------
new:
1.0.3-1
old:
root@ubuntu:~# salt "ubuntu" service.restart apache2
ubuntu:
True
root@ubuntu:~# salt "ubuntu" cron.set_job root "*" "*" "*" "*" "*" "mycommand"
ubuntu:
new
root@ubuntu:~# salt "ubuntu" cron.ls root
ubuntu:
----------
crons:
|_
----------
cmd:
mycommand
comment:
None
daymonth:
*
dayweek:
*
hour:
*
identifier:
None
minute:
*
month:
*
env:
pre:
special:
root@ubuntu:~# salt "ubuntu" mount.fstab
ubuntu:
----------
/:
----------
device:
overlay
dump:
0
fstype:
overlay
opts:
- rw
pass:
0
/tmp:
----------
device:
tmpfs
dump:
0
fstype:
tmpfs
opts:
- nosuid
- nodev
pass:
0
Inhalte fürs Config-Mgmt können direkt im Filesystem...
oder auch im Git liegen
States können manuell angewandt werden
oder automatisiert auf den Minions, z. B. via Cron
(Pillars sind selbstdefinierte Attribute, wie VHost- oder Benutzernamen)
(Im "Key:Value"-Format)
(Frei definierbar)
Verzeichnisstruktur unter /srv/salt auf dem Master-Server
root@ubuntu:~# tree /srv/salt/
/srv/salt/
├── pillars
│ ├── top.sls <-- Weist Attribute bestimmten Servern zu
│ └── webservers
│ ├── users.sls <-- Definiert Benutzer
│ └── vhosts.sls <-- Definiert VHosts
└── states
├── top.sls <--- Weist bestimmte States bestimmten Servern zu
├── users.sls <--- Legt Benutzer aus Pillars an
└── webservers
├── apache.sls <-- Installiert Apache
└── nginx.sls <-- Installiert Nginx
4 directories, 7 files
Anwendung:
salt "ubuntu" state.highstate
pillars/top.sls:
base:
"ubuntu":
- webservers.users
- webservers.vhosts
pillars/webservers/users.sls:
users:
- valentin.hoebel
- max.mustermann
- hans.wurst
- local.horst
pillars/webservers/vhosts.sls:
vhosts:
- hoebel.net
- xenuser.org
- localhost
Kontrolle:
root@ubuntu:/srv/salt/pillars/webservers# salt "ubuntu" pillar.items
ubuntu:
----------
users:
- valentin.hoebel
- max.mustermann
- hans.wurst
- local.horst
vhosts:
- hoebel.net
- xenuser.org
- localhost
states/top.sls:
base:
"ubuntu":
- users
- webservers.apache
states/users.sls:
{% for user in pillar['users'] %}
{{ user }}:
user.present:
- shell: /bin/bash
- home: /home/{{ user }}
{% endfor %}
states/webserver/apache.sls:
apache2:
pkg.installed
Ausführung:
root@ubuntu:/srv/salt/states# salt ubuntu state.highstate
ubuntu:
----------
ID: valentin.hoebel
Function: user.present
Result: True
Comment: New user valentin.hoebel created
Started: 12:07:22.116277
Duration: 17.248 ms
Changes:
----------
fullname:
gid:
1000
groups:
- valentin.hoebel
home:
/home/valentin.hoebel
homephone:
name:
valentin.hoebel
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1000
workphone:
----------
ID: max.mustermann
Function: user.present
Result: True
Comment: New user max.mustermann created
Started: 12:07:22.133608
Duration: 12.644 ms
Changes:
----------
fullname:
gid:
1001
groups:
- max.mustermann
home:
/home/max.mustermann
homephone:
name:
max.mustermann
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1001
workphone:
----------
ID: hans.wurst
Function: user.present
Result: True
Comment: New user hans.wurst created
Started: 12:07:22.146331
Duration: 8.521 ms
Changes:
----------
fullname:
gid:
1002
groups:
- hans.wurst
home:
/home/hans.wurst
homephone:
name:
hans.wurst
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1002
workphone:
----------
ID: local.horst
Function: user.present
Result: True
Comment: New user local.horst created
Started: 12:07:22.154930
Duration: 7.544 ms
Changes:
----------
fullname:
gid:
1003
groups:
- local.horst
home:
/home/local.horst
homephone:
name:
local.horst
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
1003
workphone:
----------
ID: apache2
Function: pkg.installed
Result: True
Comment: The following packages were installed/updated: apache2
Started: 12:07:22.304957
Duration: 4925.393 ms
Changes:
----------
apache2:
----------
new:
2.4.12-2ubuntu2.1
old:
apache2-api-20120211:
----------
new:
1
old:
apache2-bin:
----------
new:
2.4.12-2ubuntu2.1
old:
apache2-data:
----------
new:
2.4.12-2ubuntu2.1
old:
apache2-utils:
----------
new:
2.4.12-2ubuntu2.1
old:
httpd:
----------
new:
1
old:
httpd-cgi:
----------
new:
1
old:
Summary
------------
Succeeded: 5 (changed=5)
Failed: 0
------------
Total states run: 5
Load-Balancer-Umgebung
Leider kein veranschaulichendes Beispiel aus Zeit- und Platzgründen
Einrichtung MySQL-Replika
Einrichtung von Clustern
Technische Umsetzung von (komplexen) Workflows
Salt Cloud provisioniert und verwaltet Systeme in Cloud- und Virtualisierungsumgebungen
Unterstützt zahlreiche Anbieter und Lösungen, wie Amazon EC2, Azure, Digital Ocean, Google Compute, Joyent, Rackspace, OpenStack, VMWare..
Damit wird Salt zum Management-Werkzeug für hybride Clouds!
Daten von Minions werden auf Master gespeichert
Aktualisierung der Daten in kurzen Intervallen (anders als Grains)
Die Daten stehen überall in Salt zur Verfügung
Beispiel: Erfassung von Metriken
Erlaubt dynamisches Verhalten bei unterschiedlichen Werten
Salt Reactors lauschen auf spezifizierte Events...
.. und können dann Aktionen lostreten
Beispiele:
"Zwischen-Master" bzw. "Pass-Through-Master"
Eine Art Light-Minion für Kommunikation mit Drittgeräten...
... auf denen kein Salt-Minion laufen kann
Kommunikations-Interface muss i.d.R. selbst geschrieben werden
Beispiele für Drittsysteme: Netzwerk-Geräte, Lampen, IoT-Geräte, Smartphones
Voraussetzung: Ziel ist "irgendwie" über eine IP erreichbar
Mehr Infos hier.
Infrastruktur-Mgmt. | Config-Mgmt. | Automatisierung |
Standardisierung | Umsetzung von Workflows | Client-Verwaltung |
Eine Einführung von Valentin Hoebel
Quellen: Bilder/Fotos / Diagramme / SaltStack-Dokumentation
Präsentation erstellt mit Reveal.JS.
Download hier (https://github.com/xenuser/saltstackpresentation).