Automatisierte infrastruktur mit ansible

Post on 16-Jun-2015

662 views 0 download

description

Ansible hilft bei der Automatisierung des Configuration Managements. Welche Vorteile Ansible gegenüber manueller Installation bietet und auf welchen Grundprinzipien es aufbaut beschreibt dieser Talk. Gehalten am 15.01.2014 bei der OpenTechSchool Dortmund.

Transcript of Automatisierte infrastruktur mit ansible

INFRASTRUKTUR MITANSIBLE

( ) 15. Januar 2014 bei der .Stephan Hochhaus @yauh OpenTechSchool Dortmund

WIE SIEHT EURE IT-INFRASTRUKTUR AUS?Wer hat einen eigenen (Web-)Server?Welches Betriebssystem?Wie viele Server sind es?Wie oft setzt ihr sie neu auf?Wie lange dauert das Aufsetzen?Wer hat schonmal ein Tutorial verfasst?

MEIN LEBEN VOR ANSIBLE1. Grundsystem per Hand installieren2. Ggf. ausgefeilte shell-Skripte für Pakete ausführen3. Manuelles Anpassen von Konfigurationsdateien4. Fertiges System5. Ausprobieren von neuer Software/Konfiguration,

andere Entwickler auf dem Server/Tests6. Zerschießen des funktionierenden Systems

GEEKS SIND GEWINNERTYPEN

VORTEILE VON AUTOMATISIERUNGBeliebige (und leichte) WiederholbarkeitHohe Geschwindigkeit von DeploymentsWiederherstellen von bekannten ZuständenKeine tiefen Systemkenntnisse notwendig

UND GANZ KONKRETSchneller Aufbau von TestsystemenLeichter ProviderwechselContinuous-Integration-Workflows realisieren"Zerschossene" Systeme wiederherstellen

WIESO NICHT SHELL/PERL-SKRIPTE?Skripte werden schnell extrem komplexIdempotenz - Unabhängig vom Ausgangszustand wird eindefinierter Endzustand hergestellt(mehrfache Ausführung möglich)Bessere Übersichtlichkeit und Struktur durch AbstraktionPortabilität (z.B. verschiedene Linux Distros)Deklarativer Ansatz erlaubt höhere Produktivität alsimperatives Vorgehen(wie soll das Ergebnis aussehen vs. was soll getan werden)Teilen von Playbooks mit Community

CONFIGURATION MANAGEMENT 2014

Stand: 13. Januar 2014 auf github

Leistungsfähige automation engine aus Basis von PlaybooksKeine Agents auf Zielsystemen notwendig(SSH-Zugriff reicht)Standardmäßig push-Architektur, pull möglichKeine Programmierkenntnisse notwendig(statt dessen YAML und Jinja2)Aber funktional erweiterbar in beliebigenProgrammiersprachenKein Management von Windows oder Mac OS XIntegration in Amazon EC2, Rackspace, OpenStack, VMWare,Vagrant, u.a.AWX (Web-GUI)

ARCHITEKTURÜBERBLICK

KERNBESTANDTEILE VON ANSIBLEInventory - Beschreibt die InfrastrukturModule - Stellen Funktionen zur VerfügungPlaybooks - Führen Aktionen in Infrastruktur durch

INVENTORYHosts - Zielsysteme (Linux)Gruppen Organisatorische Zuordnung (z.B. geografisch, nachFunktion oder als Mischung)

BEISPIEL HOSTS-DATEI[webserver]apache.example.orglamp.example.org

[dbserver]db.example.orglamp.example.org

[test]lamp.example.org

[production]apache.example.orgdb.example.org

INI-Format

ES GIBT MODULE FÜRMonitoring Net Infrastructure NetworkNotification Packaging Source ControlSystem Utilities Web InfrastructureCloud Commands DatabaseFiles Internal InventoryMessaging

SYSTEM: PING

EIGENE MODULEEigene Module können in Python oder einer beliebigen anderen

Programmiersprache(!) verfasst sein.

PLAYBOOKSPlaybooks sind deklarative Beschreibungen in YAML(Leerzeichen sind wichtig!)Tasks beschreiben den gewünschten ZustandKönnen Variablen und Schleifen verwendenTemplates und Dateien lassen sich nutzen

NUTZER ANLEGEN UND LÖSCHEN---- hosts: all user: root

tasks: # Add the user 'kaylee' with a primary group of 'admin' - user: name=kaylee comment="Kaywinnet Lee Frye" group=user

# Create a 2048-bit SSH key for user kaylee - user: name=kaylee generate_ssh_key=yes ssh_key_bits=2048

# Remove the user 'kaylee' - user: name=kaylee state=absent remove=yes

PLAY IT!

VARIABLEN FÜR TASKSTasks können Variablen nutzen

---- hosts: all user: root

vars: user: stephan user_pwd: $1$$$UMYDU6b06auQqgJWoSx2.1

tasks: - name: "Init | Set up an account" user: name={{ user }} password={{ user_pwd }} shell=/bin/bash

SCHLEIFEN MIT ITEMtasks: - name: "Init | Some software should be installed" action: apt pkg={{ item }} state=latest with_items: - sudo - openssh-server - ssh

TEMPLATES UND DATEIENDas Template-Modul erlaubt dynamische Anpassungen anKonfig-DateienMit Copy lassen sich Dateien 1:1 kopierentemplate: src=templates/msmtprc.j2 dest=/etc/msmtprccopy: src=templates/backup.sh dest=/usr/local/bin/backup.sh

VARIABLEN IN TEMPLATESJinja2 als Template-Sprache

my.cnf.j2

[client]user=rootpassword={{ mysql.root_password }}

HANDLERSVerhalten sich ähnlich zu Tasks

handlers: - name: restart mysql action: service name=mysql state=restarted

TAGS UND ROLESTags bündeln Tasks und lassen sich gezielt ausführenRoles erlauben höhere Modularität in Playbooks

tasks: - name: LAMP should be installed action: apt pkg={{ item }} state=latest with_items: - apache2 - mysql - php5 tags: lamp

ANSIBLE INSTALLIERENMAC OS X

LINUX$ brew install ansible

$ pip install pyyaml jinja2 paramiko$ pip install ansible

BEI BEDARF AUCH MIT GUI

Bis zu 10 Hosts lassen sich kostenlos mit managen.AWX

WEITERE RESSOURCEN - Die Webseite von Ansible

- Plattform für AnsiblePlaybooks/Roles

- Generelle Infos

ansibleworks.comgalaxy.ansibleworks.com

Configuration Management 101

ALTERNATIVENEs gibt eine Vielzahl von Tools für

automatisiertes Configuration Management:

AnsiblePuppetChefcfenginesalt

AUTOMATE ALL THE THINGS

Ich blogge unter ,tweete als ,

+1 als und pushe als .

FORK ME!yauh.de

@yauhStephanHochhaus

perlmonkey