Comment mettre son grain de sel partout

Transcription

Comment mettre son grain de sel partout
Comment mettre son grain de sel partout
Aurélien Minet, ENS Cachan
Agenda
Introduction
Qu'est ce que SaltStack
Fonctionnement (& vocabulaire)
Utilisation
Cas pratiques & possibilités
Introduction
Disponibilité
software defined
update
Services
API
VM
Configuration
Cloud
manage
résilience
SLA
tests
Agile
orchestration
event driven containers
Deploy
CI
Ops
Microservices
automation
security
infrastructure
code
SSH
scalable
conformité
Qu'est ce que SaltStack : le pitch
SaltStack delivers a dynamic infrastructure
communication bus used for orchestration,
remote execution, configuration management
and much more
Qu'est ce que SaltStack :
- un logiciel libre (Apache version 2.0)
- création février 2011
- une société éponyme
- une communauté importante
- un des plus gros projets basé sur Python
Qu'est ce que SaltStack :
- un framework d’exécution distante (asynchrone)
- un gestionnaire de configuration (centralisé)
- un outil de provisionning VM & Cloud
- un système d'orchestration
- un logiciel extensible & flexible
Qu'est ce que SaltStack :
une boîte à outils
avec une documentation conséquente
avec une communauté réactive (GitHub, mailing list)
qui est « jeune » et qui bouge beaucoup
Fonctionnement : les composants
le master : le serveur qui gère le tout
les minions : les agents contrôlés par le master
les syndics : des minions servant d'intermédiaire
entre des minions et un master
les proxy-minions : « agents » spécifiques servant
d'interface entre le master et un équipement
sans possibilité d'y avoir un minion, ni ssh.
Fonctionnement : topologie
Fonctionnement : les composants
Les minions se connectent au master
→ ils doivent être acceptés (PKI)
→ la connexion est chiffrée AES
→ connectés ils sont sur un bus ZeroMQ
(PUB/SUB et REQ/REP)
Les minions peuvent être seuls : masterless (salt-call)
Fonctionnement : les composants
Fonctionnement : les éléments
- les states : déclaration de l'état d'un système
(fichiers .sls, par défaut YAML+Jinja)
- les grains : variables statiques d'un minion
- les pillars : variables pour des minions
Fonctionnement : les éléments
- la mine : collections de données générées par les
minions (ip…)
- les formulas : « super states » prêt à l'emploi
- les returners : ils permettent aux minions de retourner
la sortie vers un service externe (db, ...)
- les beacons : triggers sur les minions pour envoyer des
événements au master
Fonctionnement : les éléments
- les reactors : permet de définir des actions sur le
master en réaction à un événement
- les modules : pour l'exécution (~330)
pour les états (~190)
- les runners : modules (manage, job, orchestrate …)
s'exécutant sur le master (salt-run)
- la salt-api : interface REST
Utilisation : exécution
Comme SSH :
salt bob cmd.run "rm -rf /tmp/*"
Ou plus spécifique :
salt '*' disk.percent /var
(et plus pratique qu'un df avec cssh)
Utilisation : configuration
Pour appliquer toute la configuration d'un
système:
salt kevin state.highstate [test=True]
Pour n'appliquer qu'un état de la configuration :
salt stuart state.apply monfichier (sans .sls)
Utilisation : ciblage
salt '*.ens-cachan.fr' test.ping
salt -G 'cpuarch:x86_64' system.reboot
salt -C '[email protected]/24 and G@os:MacOS' \
desktop.say "Bonjour"
Utilisation : top.sls
Base:
'*' :
- commun
'^www.(prod|test).ens-cachan.fr$' :
- match: pcre
- php.fpm55
- apache.server24
'os:(RedHat|CentOS)':
- match: grain_pcre
- repos.epel
Fonctionnement : les éléments
Utilisation : fichier sls simple
installer apache:
pkg.installed:
- name: httpd
file.manage:
- name: /etc/apache2/httpd.conf
- source: salt://files/apache/httpd.conf.jinja
Utilisation : fichier sls avec jinja
vim:
pkg.installed
# fixme on Centos
Utilisation : fichier sls avec jinja
vim:
pkg.installed:
{% if grains['os_family'] == 'RedHat' %}
- name: vim-enhanced
{% elif grains['os_family'] == 'Debian' %}
- name: vim
{% endif %}
Utilisation : fichier sls plus complexe
Fichier /srv/pillar/users.sls
users:
bob:
uid: 1001
fullname: "Bob"
password: '...'
kevin:
uid: 1002
fullname: "Kevin"
key.pub: True
Utilisation : fichier sls plus complexe
{% for user, args in salt['pillar.get']('users', {}).iteritems() %}
{{ user }}:
user.present:
- uid: {{ args['uid'] }}
{% if 'password' in args %}
- password: {{ args['password'] }}
{% endif %}
{% if 'key.pub' in args and args['key.pub'] == True %}
{{ user }}_key.pub:
ssh_auth:
- present
- user: {{ user }}
- source: salt://files/users/{{ user }}/keys/key.pub
{% endif %}
{% endfor %}
Cas pratiques
Installer Oracle Database
→ pkg.installed pkg.pkgs
→ file.append file.manage file.directory
→ user.present group.present
→ cmd.run
+ cmd.wait & watch, require, unless & onlyif
Cas pratiques : formulas
Les formulas :
- installer et configurer HAProxy
- installer, configurer et gérer OpenSSH
(authorized_keys, known_hosts …)
Réalisation de modules :
- Kaspersky (exécution)
- « osxrepo »
Cas pratiques : salt-ssh
Gestion des bornes WiFi sous OpenWRT
→ fichier /etc/salt/roster (dns+jinja)
→ clé ssh
⇒ salt-ssh 'mc4-ap*.wifi.ens-*.fr' -r 'wifi reload'
Cas pratiques
Gestion de parc : script de bootstrap du minion
- Windows : utilisateurs, connexion au domaine,
GPO, logiciels (winrepo), base de registre …
- Mac OS : utilisateurs, modification de fichiers,
logiciels (cmd.run avec Homebrew & Cask)
Possibilités / « much more »
- Cloud : salt-cloud (et modules pour lxc, docker …)
- Interface Web : Saltpad (salt-api)
- Approche « validation continue » / mesure de la
conformité: salt-highstate-stats
- Monitoring par les minions : Saltmon
SaltStack : automatiser est un investissement
Data Defined Infrastructure :
→ versions
→ documentation
Event Driven :
→ orchestration
→ scalabilité
→ résilience
Test Driven :
→ mêmes méthodes (agiles) que pour le développement
Un dernier exemple
salt -C '*.attendees.2015.jres.org and
G@location:berlioz' ask.questions