34
Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst. Serverprovisioning in einer dynamischen Infrastruktur Systemmanagement LinuxTag 2012 vorgestellt am 23.05.2012 Alexander Pacnik inovex GmbH

Serverprovisioning in einer dynamischen Infrastruktur

Embed Size (px)

Citation preview

Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.

Serverprovisioning in einer dynamischen Infrastruktur Systemmanagement LinuxTag 2012

vorgestellt am 23.05.2012

Alexander Pacnik inovex GmbH

24.05.12 2

... was wollen wir erreichen?

Einleitung

Ziele beim Einsatz von Tools

•  Automatisierung •  Transparenz & Nachvollziehbarkeit •  KISS •  Ein Tool ist ein Werkzeug

24.05.12 3

... was bedeutet Serverprovisionierung

Einleitung

Provision (Bereitstellung)

•  Firmeware •  Virtualisierung •  Betriebssystem •  Konfigurationen •  Applikationen •  Daten

24.05.12 4

... was bedeutet Serverprovisionierung

Einleitung

Provision (Bereitstellung)

•  Firmeware •  Virtualisierung •  Betriebssystem •  Konfigurationen •  Applikationen •  Daten

Konfigurationsverwaltung

24.05.12 5

Zustand

Puppet

Configure Build Manage Develop

24.05.12 6

... Puppet

Konfigurationsverwaltung

Maßnahmen am Beispiel Puppet

•  Konfigurationen werden regelmäßig von den Clients angewendet •  Konfigurationen in einem zentralen VCS verwalten

•  pre-commit: Syntax und Style überprüfen •  post-commit: Code automatisch verteilen

•  Puppet Klassen modular aufbauen

24.05.12 7

... Puppet Best Practices

Konfigurationsverwaltung

Puppet Environments

•  Verschiedene Environments für Umgebungen und Entwickler

24.05.12 8

... Puppet Best Practices

Konfigurationsverwaltung

Puppet Environments

•  Verschiedene Environments für Umgebungen und Entwickler [production] modulepath = $repo/services:$repo/modules manifest = $repo/manifests/production_environment.pp

24.05.12 9

... Puppet Best Practices

Konfigurationsverwaltung

Puppet Environments

•  Verschiedene Environments für Umgebungen und Entwickler [production] modulepath = $repo/services:$repo/modules manifest = $repo/manifests/production_environment.pp [john_doe] modulepath = $repo/john_doe:$repo/services:$repo/modules

24.05.12 10

... Puppet Best Practices

Konfigurationsverwaltung

Modularisierung

•  mehrstufiges Vorgehen •  Basismodule so atomar wie möglich •  Servicemodule die den eigentlichen Dienst beschreiben •  Benötigte Module in der Node-Definition zusammenführen

24.05.12 11

... Puppet Best Practices

Konfigurationsverwaltung

Beispiel: JBoss-Modul

class jboss { define service ( $wrapper={} ) { # Einmalig Pakete installieren require jboss::server # Weitere Aktionen } }

24.05.12 12

... Puppet Best Practices

Konfigurationsverwaltung

Beispiel: JBoss-Modul

class jboss { define service ( $wrapper={} ) { # Einmalig Pakete installieren require jboss::server # Weitere Aktionen } }

24.05.12 13

... Puppet Best Practices

Konfigurationsverwaltung

Beispiel: JBoss-Modul anwenden

jboss::service {“jboss-01": wrapper => { # Allgemeine Einstellungen instance_dir => "/var/lib/my-jboss", # JVM Einstellungen jvm_maxpermsize => "64m", jvm_initmemory => "128m", jvm_maxmemory => "512m",

# [ ... ]

24.05.12 14

... Puppet Best Practices

Konfigurationsverwaltung

Beispiel: JBoss-Modul anwenden

jboss::service {“jboss-01": wrapper => { # Allgemeine Einstellungen instance_dir => "/var/lib/my-jboss", # JVM Einstellungen jvm_maxpermsize => "64m", jvm_initmemory => "128m", jvm_maxmemory => "512m",

# [ ... ]

24.05.12 15

... Puppet Best Practices

Konfigurationsverwaltung

Beispiel: Templates <%= wrapper.has_key?("jvm_initmemory") ? wrapper['jvm_initmemory'] : '128' %>

Paketverwaltung

24.05.12 16

Zustand

Puppet

Configure

Pakete

FPM

Build Manage Develop

24.05.12 17

... die Welt ist ein Paket

Paketverwaltung

Ziele

•  schnelle und konsistente Verteilung •  Integrität gewährleisten •  einfache Anwendung und Integration in die Buildumgebung •  Optional: Abhängigkeiten verwalten

24.05.12 18

... die Welt ist ein Paket

Paketverwaltung

Ruby Version Manager (RVM) •  Verwaltet getrennte Ruby Versionen, Gem Sets etc.

Package Management mit FPM •  Ruby Tool zum erstellen von Paketen

24.05.12 19

... als erstes rvm, ruby und fpm installieren

Paketverwaltung

# Stabile RVM Version systemweit installieren $ curl -L get.rvm.io | sudo bash -s stable # RVM Environment laden $ source /usr/local/rvm/scripts/rvm # Build-Anforderungen anzeigen $ rvm requirements # Ruby bauen $ rvmsudo rvm install 1.9.1-p431 # FPM als Gem systemweit installieren $ rvmsudo rvm all do gem install fpm

24.05.12 20

... als nächstes die Pakete erstellen

Paketverwaltung

# Ruby Environment auswählen $ source /usr/local/rvm/scripts/rvm $ rvm use ruby-1.9.1-p431

24.05.12 21

... als nächstes die Pakete erstellen

Paketverwaltung

# Ruby Environment auswählen $ source /usr/local/rvm/scripts/rvm $ rvm use ruby-1.9.1-p431 # Paket erstellen $ fpm -s dir -t deb \ -a x86_64 \ -n apache-tomcat-6.0.35 -v 6.0.35 \ -d openjdk-6-jre \ --description "Apache Tomcat Application Server" \ --prefix /usr/share/tomcat/6.0.35 \ -C /tmp/tmp.J2yIc34ECN bin/{tomcat-juli.jar,bootstrap.jar} lib

24.05.12 22

... als nächstes die Pakete erstellen

Paketverwaltung

# Ruby Environment auswählen $ source /usr/local/rvm/scripts/rvm $ rvm use ruby-1.9.1-p431 # Paket erstellen $ fpm -s dir -t deb \ -a x86_64 \ -n apache-tomcat-6.0.35 -v 6.0.35 \ -d openjdk-6-jre \ --description "Apache Tomcat Application Server" \ --prefix /usr/share/tomcat/6.0.35 \ -C /tmp/tmp.J2yIc34ECN bin/{tomcat-juli.jar,bootstrap.jar} lib Ergebnis: apache-tomcat-6.0.35_6.0.35_amd64.deb

Server-Orchestration

24.05.12 23

Zustand

Puppet

Configure

Pakete

FPM

Build

Zugriff

Rex

Manage Develop

24.05.12 24

... Server remote steuern

Server-Orchestration

Ziele

•  Fehlertoleranz •  Nachvollziebarkeit Maßnahmen

•  Notwendige Aufgaben Skripten (nicht lokal auf den Servern arbeiten) •  Skripte in einem VCS verwalten •  Vernünftiges Logging implementieren

24.05.12 25

... mit Rex

Server-Orchestration

desc "test connection"; task "test", group => “portal", sub { say run "uptime"; say run "hostname"; };

Das Zusammenspiel

24.05.12 26

... Der verschiedenen Tools

Zustand

Puppet

Configure

Pakete

FPM

Build

Zugriff

Rex

Manage

Transparenz

VCS

Develop

24.05.12 27

... der automatisierte Buildprozess

Jenkins

Was ist Jenkins? •  Continuous Integration Server

24.05.12 28

... der automatisierte Buildprozess

Jenkins

Was ist Jenkins? •  Continuous Integration Server Vorteile

•  Integration von Rex •  Integration von fpm •  Zentrale Steuerung des Buildprozesses •  Viele Plugins verfügbar, z.B. für die Integration verschiedener Tools (z.B. xtrigger)

24.05.12 29

... Puppet Verwaltung und mehr

The Foreman

Was ist The Foreman?

•  Tool zur Serververwaltung

24.05.12 30

... Puppet Verwaltung und mehr

The Foreman

Was ist The Foreman?

•  Puppet Verwaltung und grafische Darstellung •  Systeminventarisierung (Facter, Reports) •  Grafische Übersichten zum aktuellen Status •  Optional: Verwaltung der Infrastruktur (DNS, DHCP, TFTP) die für die Installation

ab dem Betriebssystem benötigt wird

24.05.12 31

... die Puppet IDE

Geppetto

Was ist Geppetto? •  IDE zur Puppet Entwicklung auf Basis von Eclipse Vorteile •  Syntax Highlighting •  Code-Verfollständigung

Fragen?

24.05.12 32

Zustand

Puppet

The Foreman

Configure

Pakete

FPM

Jenkins

Build

Zugriff

Rex

Manage

Transparenz

VCS

Geppetto

Develop

Wir nutzen Technologien, um unsere Kunden glücklich zu machen. Und uns selbst.

inovex GmbH Pforzheim Karlsruher Straße 71 D-75179 Pforzheim

München Valentin-Linhof-Straße 2 D-81829 München

Köln Kaiser-Wilhelm-Ring 27-29 D-50672 Köln

Vielen Dank für Ihre Aufmerksamkeit!

24.05.12 34

... wo sie in Ruhe nachlesen können

Quellen

Quellen •  http://www.puppetlabs.com •  https://github.com/rodjek/puppet-lint •  https://www.rvm.io •  https://github.com/jordansissel/fpm •  http://rexify.org •  http://cloudsmith.github.com/geppetto •  http://jenkins-ci.org •  http://theforeman.org

Lizenz •  Creative Commons - by-nc-nd