saltstack - heinlein support › sites › default › ... · thorsten kramm | berlin juni 2015...

57
Thorsten Kramm | Berlin Juni 2015 Saltstack

Upload: others

Post on 10-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Saltstack

Page 2: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …
Page 3: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …
Page 4: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Page 5: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Kreativität Innovation

Trail & Error Prototyping

Page 6: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Präzision Reproduzierbarkeit

Geschwindigkeit Automation

Page 7: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Computersysteme

EinheitOrdnung

Automatisierung

Page 8: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Was macht Saltstack?

Einer beherrscht sie alle.root@salt-­‐master:#  full-­‐controll

Page 9: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Was macht Saltstack?

Einer beherrscht sie alle.

Befehle parallel ausführen. Systeme und Software installieren. Systemstatus sicher stellen. Konfigurationen erzeugen und bearbeiten.

root@salt-­‐master:#  full-­‐controll

!

!

!

!

Page 10: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Warum Saltstack?… es gibt doch schon

PuppetcfEngineChefansible…

Page 11: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

KISS

einfach zu lernen einfach zu installieren einfach zu pflegen

!

!

!

Page 12: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Saltstack ist einfach …

… aber nicht beschränkt!

Page 13: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Salt-Master installierenHinzufügen des Saltstack Software Repositories

# /etc/apt/sources.list.d/saltstack.list deb http://debian.saltstack.com/debian jessie-saltstack main

!

Importieren des Schlüsselswget -q -O- "http://debian.saltstack.com/debian-salt-team-

joehealy.gpg.key" | apt-key add -

!

Master installieren

apt-get update && apt-get install salt-master

!

Page 14: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Minions installierenFüge DNS- oder Hosts-Eintrag hinzu

root@minion2:~# cat /etc/hosts

127.0.0.1 localhost

127.0.1.1 minion2.lab4.org minion2

10.129.163.163 salt.lab4.org salt

!

Minion installieren

apt-get update && apt-get install salt-minion

!

Page 15: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

„Master, ich will der folgen“

Page 16: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

„Du gehörst mir!“

Page 17: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

„Seit ihr alle da?“

Page 18: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

AES"

AES"

AES"Minion 2

Minion 3

Minion 1

bidirektionale Kommunikation

hinter den Kulissen

Salt-Master

TCP 4506 ZeroM

Q M

essaging

Page 19: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Befehlen - Salt Module

Page 20: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Ein Befehl - mehrere „Sprachen“

Debian/ Ubuntu: apt-get update && apt-get -y upgrade

CentOS/ RedHat: yum update

Page 21: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Beispiel: Benutzer anlegen

salt * user.add thorsten

! Benutzer auf allen Systemen anlegen

salt '*' ssh.set_auth_key thorsten AAAAB3NzaC1y…p8cow==

enc='rsa' comment='[email protected]

! Einen öffentlichen SSH-Schlüssel hinterlegen

salt '*' user.chshell thorsten /bin/bash

! Standard-Shell ändern

Page 22: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

289 Module

Page 23: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Salt ModulesSalt-Master

Abstraktionsschicht mit einheitlichen Kommandos

Arch Linux Debian Fedora Gentoo

RHEL & Clones Solaris Ubuntu SUSE

Windows OS X FreeBSD

!

!

!

!

!

!

!

!

!

!

!

Page 24: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Minions adressieren

Grain (Oberflächenbild)

Page 25: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

unter der Oberfläche

Page 26: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

States definieren# /etc/salt/master

Page 27: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Die Kommandobrücke: top.sls/srv/salt/top.sls

Page 28: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Benutzer verwalten/srv/salt/create_user.sls

Page 29: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Push & PullMinions holen sich alle States ab:

Master schickt einen State:

root@master:~# salt minion1.lab4.org state.sls create_user

#

root@minion2:~# salt-call state.highstate

# Pull

Master schickt alle Sates (top.sls):

root@master:~# salt minion1.lab4.org state.highstate

#

Push

Page 30: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …
Page 31: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …
Page 32: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

dynamische Dateien mit Jinja

{% set domain = 'example.com' %}

gw:

host.present:

- ip: 192.168.152.10

- names:

- gw

- gw.{{domain}}

mail:

host.present:

- ip: 192.168.152.7

- names:

- mail

- mail.{{domain}}

etc-hosts.sls

Page 33: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

dynamische Dateien mit Jinja

{% for usr in 'moe','larry','curly' %}

{{ usr }}:

group:

- present

user:

- present

- gid_from_name: True

- require:

- group: {{ usr }}

{% endfor %}

users.sls

Page 34: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

dynamische Dateien mit Jinja

apache:

pkg.installed:

{% if grains['os'] == 'RedHat' %}

- name: httpd

{% elif grains['os'] == 'Ubuntu' %}

- name: apache2

{% endif %}

apache.sls

Page 35: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Dateien zentral verwalten

burp:

pkg:

- installed

/etc/burp/burp.conf:

file.managed:

- source: salt://files/all/etc/burp/burp.conf

- mode: 0600

- user: root

- group: root

- requiere: burp

burp-backup.sls

Page 36: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

cname = {{ grains['fqdn'] }}

Dateien kopieren & bearbeitenburp:

pkg:

- installed

/etc/burp/cname.conf:

file.managed:

- source: salt://burp-backup/files/cname.conf

- template: jinja

- mode: 0600

- user: root

- group: root

- requiere: burp

burp-backup.sls

Page 37: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Pillars: der Datenspeicher

pillar_roots:

base:

- /srv/pillar

Aktivieren Sie Pillars in /etc/salt/master:!

Legen Sie eine top.sls base:

'*':

- static

- packages

!

Page 38: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Pillars definieren Variablen

statisch

# /srv/pillar/static.sls

company : Meine Firma

smtp_relay: 192.168.4.100

dynamisch

# /srv/pillar/packages.sls

{% if grains['os'] == 'RedHat' %}

apache: httpd

git: git

{% elif grains['os'] == 'Debian' %}

apache: apache2

git: git-core

Page 39: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Pillars in States verwenden

# /srv/sates/linux/apache.sls

apache:

pkg.installed:

- name: {{ pillar['apache'] }}

apt-get install apache2

yum install httpd

Page 40: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Virtuelle Maschinen und die Cloud

apt-get install salt-cloud

Cloud-Verwaltung installieren!

salt-cloud -p debian@digitalocean vm4711.cloud

virtuelle Maschinen erzeugen!

Page 41: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

voilà!

Page 42: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Hinter den Wolken

Page 43: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Unterstütze Plattformen

Joyent Linode Rackspace SoftLayer Vexxhost Scaleway

OpenStack Parallels Proxmox VMWare LXC

Aliyun Azure DigitalOcean EC2 GoGrid Google Compute HP Cloud

Public Privat

!!!!!!!

!!!!!

!!!!!

!

Page 44: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Wolken konfigurieren

Zugangsdaten zu einem Cloud-Provider eintragen

# /etc/salt/cloud.providers.d/digital_ocean.conf

digital_ocean_cfg:

provider: digital_ocean

personal_access_token: XYZ

ssh_key_file: /root/.ssh/id_rsa

ssh_key_names: my_salt_master,Thorsten Kramm

location: ams2

!

Page 45: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Wolken konfigurieren

VM-Templates auf Angebote „mappen“

# /etc/salt/cloud.profiles.d/digital_ocean.conf

debian@digitalocean:

provider: digital_ocean_cfg

image: debian-8-x64

size: 512MB

location: ams2

private_networking: False

!

Page 46: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Versionskontrolle mit git

Warum man ein VCS nutzen sollte: Änderungen protokollieren Arbeiten im Team ermöglichen Rollouts kontrollieren Qualitätssicherung „vorschalten“

!

!

!

!

Page 47: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Arbeiten mit VCS Version 1

Salt-Master/srv/salt/states  /srv/salt/pillar

commit svn git …

deploy

$ssh + vi

ups…vergessen.

Page 48: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Arbeiten mit VCS Version 2

Salt-Master/srv/salt/states  /srv/salt/pillar

deploy

$git push -u origin master

Page 49: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Arbeiten mit VCS Version 3

Salt-Master/srv/salt/states  /srv/salt/pillar

deploy

$

%$

Pullrequest

Fork Merge to Master

Page 50: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Salt-Gitfs

Page 51: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Salt-Sates & Gitfs # /etc/salt/master

fileserver_backend:

- git

gitfs_remotes:

- [email protected]:getsalted/salt-states.git:

- user: getsalted

- pubkey: /root/.ssh/id_rsa.pub

- privkey: /root/.ssh/id_rsa

- root: states

Page 52: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Salt-Pillar & Gitfs # /etc/salt/master

pillar_roots:

base:

- /srv/salt/pillar-empty

ext_pillar:

- git: master https://user:[email protected]/getsalted/salt-

states.git root=pillar

Authentifizierung per SSH-Key leider noch nicht möglich.

Page 53: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Update von Konfiguration per Curl

curl http://salt:2379/v2/keys/my_key/\

-XPUT -d value="some data"

# /etc/salt/master

my_etcd_config:

etcd.host: 127.0.0.1

etcd.port: 2379

ext_pillar:

- etcd: my_etcd_config

dynamische Pillars

Page 54: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Beispiel: Webcluster1 Loadbalancer

N Backends

&1 Salt-Master

Page 55: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

Last der Backends überwachen

salt-master:~# salt '*.backends.local' status.loadavg

!

Neue VM erzeugen

salt-master:~# salt-cloud -p lxc-ubuntu 4.backends.local

!

Mache die neue VM zum Backend

salt-master:~# salt 4.backends.local state.sls web-backend

!

Schwitz! Die Last ist zu hoch.

Page 56: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm | Berlin Juni 2015

nginx:      service.running:          -­‐  enable:  True          -­‐  reload:  True          -­‐  watch:              -­‐  file:  loadbalancer.conf

nginx.sls

http  {          upstream  myapp1  {                  {%  for  key,  value  in  pillar['backends'].iteritems()  %}                      server  {{key}};              {%  end  for  %}  

           }

loadbalancer.conf

Master aktualisiert die Loadbalancer-Konfiguration

salt-master:~# salt loadbalancer.local state.sls nginx

!

Neues Backend klinkt sich in Cluster ein

4.backends:~# curl http://salt:2379/v2/keys/backends/\ $(hostname -f) -XPUT -d value="online"

!

Page 57: Saltstack - Heinlein Support › sites › default › ... · Thorsten Kramm | Berlin Juni 2015 Warum Saltstack? … es gibt doch schon Puppet cfEngine Chef ansible …

Thorsten Kramm [email protected]