Ansible gegen Marionette


Die heutigen Systemadministratoren und DevOps-Profis müssen im Durchschnitt eine viel größere Anzahl von Servern verwalten, auf denen eine viel größere Anzahl von Anwendungen gehostet wird, als ihre Kollegen aus den 90er Jahren. Schuld daran ist das exponentielle Wachstum des Computings für Unternehmen, gepaart mit dem Aufkommen neuer Technologien wie Virtualisierung und Cloud Computing.

So werden Tools wie Puppet und Ansible schnell zu unverzichtbaren Komponenten für die Verwaltung einer großen Anzahl von Servern, wie z. B. in einem Rechenzentrum. Sie werden häufig als Tools für Konfigurationsmanagement (CM) und Remoteausführung (RE) bezeichnet und überschneiden sich häufig mit Bereitstellungs- oder Orchestrierungstools. Diese mega-nützlichen Apps ermöglichen es dem Administrator beispielsweise, eine Aktion auf mehreren Servern gleichzeitig auszuführen, mehrere Apps mit einem einzigen Klick bereitzustellen und im Allgemeinen die Konfiguration und Wartung von Dutzenden, Hunderten oder sogar Tausenden von Servern zu vereinfachen.

Ansible vs Puppet: Übersicht

Puppet ist einer der größten Namen auf dem CM-Markt. Es gibt es schon seit 2005, was für CM Tools so ist, als gäbe es es schon seit Anbeginn der Menschheit. Mehrere namhafte Kunden betreiben ihre Rechenzentren mit Puppet - Google, Reddit, Dell, PayPal, Oracle, Los Alamos Labs und Stanford University; Solche Kunden an Bord zu haben, verleiht einem Produkt immer eine gewisse Glaubwürdigkeit. Puppet verfügt außerdem über die ausgereifteste Benutzeroberfläche und läuft auf allen wichtigen Betriebssystemen - Linux, Windows, Unix und sogar Mac OS X. Nach dem Vorbild der verschiedenen Linux-Versionen handelt es sich um eine Open-Source-App (entwickelt mit Ruby), aber es gibt auch eine große, gut etablierte Support- und Sponsorenfirma namens PuppetLabs, die professionellen Support und eine kommerzielle Unternehmensversion der Software anbietet. Puppet bietet auch eine einfache Installationsroutine und mehrere Tools für Aufgaben wie die schnelle Bereitstellung auf Client-Servern. Zusätzlich zur GUI gibt es eine Ruby-basierte CLI. Tatsächlich müssen Sie sich für die meisten fortgeschrittenen Aufgaben höchstwahrscheinlich auf die CLI verlassen, wobei die GUI eine Anzeige-, Verwaltungs- und Überwachungsschnittstelle ist. Das bedeutet, dass Sie neben der Sysadmin-Arbeit auch Ruby lernen müssen.

An dieser Stelle denkst du vielleicht: "Das klingt alles super! Gibt es Nachteile oder kann ich Puppet sofort kaufen? " Nun, die Begeisterung in den CM-Diskussionsforen ist, dass Puppet, wie viele andere Software-Giganten, ein Opfer seines eigenen Erfolgs und seiner Größe geworden ist. "Flink" und "agil" sind keine Worte, die man verwenden kann, um Puppet zu beschreiben - Dinge wie gemeldete Fehler brauchen zu lange, um behoben zu werden, und das Ignorieren neuer Funktionswünsche. Es gibt auch einiges Murren darüber, dass PuppetLabs seine Kunden aggressiv dazu drängt, die kommerzielle Version zu übernehmen. Und schließlich, obwohl Puppet sowohl reines Ruby als auch sein angepasstes DSL auf der CLI unterstützt, ist die reine Ruby-Unterstützung veraltet. Das ist eine schlechte Nachricht für diejenigen, die nur Ruby und nicht das hauseigene DSL gelernt haben.

Ansible hat Puppet überholt und mit einem führenden Anteil von 26,5 % den größten Marktanteil in der Konfigurationsmanagement-Branche erobert, gefolgt von den alten Hasen MSCCM und Puppet. Es wurde erstmals Anfang 2012 veröffentlicht und ist auch eine Open-Source-Version, die von einer Muttergesellschaft unterstützt wird - in diesem Fall von AnsibleWorks. Es wurde in Python entwickelt, nicht in Ruby, was es spirituell näher an Salt (einem weiteren neuen CM-Tool) als an Puppet macht. Der andere Vorteil von Python besteht darin, dass es heutzutage in die meisten Unix- und Linux-Bereitstellungen integriert ist, sodass es schneller einsatzbereit ist. Das Alleinstellungsmerkmal von Ansible ist die geringe und schnelle Bereitstellung. Tatsächlich werden nicht einmal bereitbare Agenten für die Master-Client-Kommunikation verwendet. Stattdessen werden alle Funktionen über SSH ausgeführt. Für Konfigurationen, die Root-SSH nicht unterstützen, kann Ansible 'sudo' als root verwenden. Ansible kann über die CLI ohne Verwendung von Konfigurationsdateien für einfache Aufgaben ausgeführt werden, z. B. zum Sicherstellen, dass ein Dienst ausgeführt wird, oder zum Auslösen von Updates und Neustarts. Bei komplexeren Aufgaben wird die Ansible-Konfiguration über die YAML-Syntax in Konfigurationsdateien, den sogenannten Playbooks, gehandhabt. Ansible-Befehle können in fast jeder Programmiersprache geschrieben und als universelle JSON-Module verteilt werden, was eindeutig ein Vorteil gegenüber der Auswahl einer einzigen Sprache ist.

Ansible ist aufgrund seines neuen Ansatzes viel beliebter geworden, und immer mehr Unternehmen setzen Ansible für große Rechenzentrumsbereitstellungen ein. Ansible und die begeisterte Community arbeiten natürlich hart daran, an diesen Erfolg anzuknüpfen - indem sie die Anzahl der unterstützten Geräte erhöhen, eine bessere Windows-Unterstützung integrieren, das Ökosystem verbessern und so weiter.

Ansible vs. Puppet: Unterschiede bei der Einrichtung

Die Unterschiede zwischen Ansible und Puppet werden bereits beim Einrichten der Tools deutlich. Da die Tools unterschiedlichen Architekturparadigmen folgen, ist ihre Einrichtung unterschiedlich. Ansible hat das ausdrückliche Ziel, die Einrichtung so einfach wie möglich zu gestalten, und dies zeigt sich in der Benutzererfahrung.

Um Ansible einzurichten, sollten Sie einen einzelnen Knoten als Steuerungsknoten festlegen. In Wirklichkeit kann jeder Ihrer Knoten der Kontrollknoten sein. Installieren Sie Ansible auf diesem Knoten mit dem neuesten Ansible-Paket aus den Paket-Repositories Ihrer Distribution. Es ist nicht erforderlich, Client-Software auf Ihren anderen Knoten einzurichten. Erstellen Sie ein SSH-Schlüsselpaar auf Ihrem Steuerungsknoten und kopieren Sie es dann auf den Rest Ihrer Knoten. Erstellen Sie eine Inventardatei für Ihre Ansible-Knoten. Normalerweise wird dies in /etc/ansible/hosts auf Linux-Betriebssystemen wie Red Hat Linux, Ubuntu und Debian gespeichert. So einfach sind Sie jetzt, Ansible zu verwenden, um Playbooks sowohl auf Ihrem Kontrollknoten als auch auf dem Rest Ihres Inventars auszuführen. Ansible verwendet SSH-Verbindungen zu Ihren kontrollierten Knoten, um Ihre Playbooks für das Konfigurationsmanagement auszuführen.

Bei Puppet ist die Einrichtung etwas komplizierter, aber es gibt viele Online-Dokumentationen, die Ihnen helfen, falls Sie nicht weiterkommen. Sie müssen Ihre Master- und Agent-Knoten so konfigurieren, dass alle dieselbe Zeit und Zeitzone haben. Melden Sie sich als root beim Master-Server an und installieren Sie die Puppet-Server-Software. Konfigurieren Sie die Datei /etc/hosts des Puppet-Masters so, dass alle verwalteten Clients aufgelöst werden. Starten Sie den PuppetServer-Dienst und aktivieren Sie ihn für den Empfang von Clientverbindungen über Port 8140. Da Puppet auf einer Agent-Software basiert, die auf jedem Minion ausgeführt wird, müssen Sie die Puppet-Agent-Software auf jedem Client installieren. Sie müssen auch die IP-Adresse des Masters in /etc/hosts hinzufügen, um sicherzustellen, dass der Client eine Verbindung zu Ihrem Master herstellen kann. Starten und aktivieren Sie den Puppet-Agent-Dienst auf jedem Client. Damit Minions mit dem Master kommunizieren können, müssen Sie SSL-Zertifikate generieren, da Puppet für die Master-Client-Kommunikation auf HTTPS angewiesen ist.

Bei beiden Setups sollten Sie eine ordnungsgemäße Serverhärtung durchführen, um sicherzustellen, dass nicht autorisierte Verbindungen nicht zulässig sind.

Ansible vs. Puppet: Skalierbarkeit und Transportmechanismen

Sowohl Ansible als auch Puppet können sehr gut skaliert werden, aber sie verwenden unterschiedliche Transportmechanismen, um dieses Ziel zu erreichen. Unabhängig davon, ob Sie ein paar hundert oder bis zu Zehntausende von Knoten verwalten müssen, gibt es in Wirklichkeit Optimierungen und Strategien, die Sie auf jeder Plattform anwenden können, um bequem auf dieses Niveau zu skalieren.

Ansible verwendet den Transportmechanismus-Standardwert "smart", der in der Regel in SSH aufgelöst wird. Ansible analysiert zunächst Ihre Playbooks und ermittelt das betroffene Inventar. Anschließend wird eine SSH-Verbindung geöffnet und ein temporäres Verzeichnis erstellt. Nach dem Schließen dieser Verbindung öffnet Ansible eine zweite Verbindung zum Kopieren des Ansible-Modulcodes und des Ansible-Boilerplate-Codes, die ausgeführt werden sollen. Ansible schließt diese Verbindung, bevor eine dritte, letzte Verbindung zum Ausführen des Codes geöffnet wird. Dieses Setup eignet sich für die meisten Zwecke, kann jedoch angepasst werden, wenn Sie Ihr Inventar skalieren.

Die erste Funktion, die Ansible verwenden kann, heißt ControlPersist und basiert auf persistenten Sockets, um den Zeitaufwand und den Handshake zu reduzieren, die bei mehreren Verbindungen erforderlich sind. Ansible unterstützt auch "Pipelining", eine Konfiguration, die die Anzahl der erforderlichen Verbindungen von drei auf eine reduziert. Schließlich kann Ansible so konfiguriert werden, dass eine größere Anzahl von Inventarknoten gleichzeitig verarbeitet wird, indem die Forks-Variable in der Ansible-Konfiguration angepasst wird. Standardmäßig ist dies auf 5 festgelegt, aber Sie können es auch höher einstellen, um eine schnellere Verarbeitung zu erzielen.

Der Transportmechanismus von Puppet ist HTTPS, der über SSL-Zertifikate verwaltet wird. Ein einzelner Puppet-Server verarbeitet Konfigurationsanfragen aus Ihrem Bestand an Puppet-Clients. Jeder Client sendet Puppet-Fakten an den Master und sendet eine Anforderung für einen Puppet-Katalog. Der Master sendet dann einen Katalog als Antwort. Der Client verarbeitet dann den Katalog und überprüft jede Ressource anhand des gewünschten Konfigurationsstatus, der im Katalog angegeben ist. Wenn sich eine Ressource nicht im gewünschten Zustand befindet, aktualisiert der Puppet-Client die Ressource auf diesem Client-Rechner so, dass sie dem angegebenen gewünschten Zustand entspricht. Nach Abschluss der Aktualisierungen sendet der Client einen Bericht an den Puppet-Server zurück.

Insbesondere ordnet das Verarbeitungsmodell von Puppet einen JRuby-Thread aus einem Threadpool zu, um jede eingehende Clientverbindung zu verarbeiten. Wenn die Anzahl der Knoten groß wird, können Sie Puppet so optimieren, dass es besser skaliert werden kann, indem Sie die Anzahl der im Pool verfügbaren JRuby-Threads erweitern. Sie können dies tun, indem Sie den Wert der Puppet-Konfigurationseinstellung "max-active-instances" auf einen Wert festlegen, der höher ist als der Standardwert (1). Sie können sie im Allgemeinen so hoch einstellen wie die Anzahl der CPU-Kerne auf dem Computer, beachten Sie jedoch, dass dadurch mehr CPU-RAM verwendet wird. In der Regel müssen Sie auch eine höhere "maximale Heap-Größe" für die JVM Ihres Puppet-Servers festlegen, um sicherzustellen, dass Ihre zusätzlichen JRuby-Threads zugewiesen werden können, ohne einen "out of memory"-Fehler für Java Virtual Machine zu verursachen. Seien Sie vorsichtig, wenn Sie diese Optimierung durchführen, da Sie auf verschiedene potenzielle Leistungsfallen stoßen können.

Beispiel für einen Ansible CM-Code

Für die tägliche Konfigurationsarbeit ist das Schreiben von Ansible-Code dank einer Kombination aus zwei Faktoren überraschend einfach: der Verwendung des YAML-Formats für die Playbooks und einem deklarativen Konfigurationsmanagementstil, der die heiklen Details abstrahiert. Dies ist wichtig, um Ihre DevOps-Teams schnell produktiv zu machen und Ihren Code auch bei komplexen Konfigurationsaufgaben überschaubar zu halten.

Ansible-Code ist idempotent. Das bedeutet, dass Sie die Playbooks sicher immer wieder gegen Ihr Inventar ausführen können, ohne Ihre Server durcheinander zu bringen. Ansible ändert Ressourcenzustände nur auf Servern, auf denen diese Zustände außerhalb des gewünschten Zustands liegen. Wenn Ihr Playbook beispielsweise die Installation eines Pakets und die Erstellung einer bestimmten Konfigurationsdatei auf der Festplatte erfordert, installiert Ansible nur dieses Paket und erstellt die Konfigurationsdatei, die Sie angegeben haben, wenn das Playbook zum ersten Mal auf einem Knoten ausgeführt wird. Bei nachfolgenden Ausführungen der Playbooks bleibt das Paket automatisch unverändert, bis eine Änderung eintritt, die die angegebene Datei- oder Paketkonfiguration entfernt oder ändert. Dadurch bleiben Ihre Knoten in einem hochgradig vorhersehbaren, deterministischen Zustand mit geringer bis gar keiner Wahrscheinlichkeit von Konfigurationsabweichungen.

Im Folgenden finden Sie ein Codebeispiel für ein Ansible-Playbook, das den Tomcat-Webserver auf Ihren Knoten installiert. Dies ist ein Ansible-Beispiel aus dem offiziellen Ansible-Beispiel-Repository, das Sie durchsuchen können, um sich mit idiomatischem Ansible vertraut zu machen:

---
- name: Install Java 1.7
yum: name=java-1.7.0-openjdk state=present

- name: add group "tomcat" group: name=tomcat

- name: add user "tomcat" user: name=tomcat group=tomcat home=/usr/share/tomcat createhome=no become: True become_method: sudo

- name: Download Tomcat get_url: url=http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.61/bin/apache-tomcat-7.0.61.tar.gz dest=/opt/apache-tomcat-7.0.61.tar.gz

- name: Extract archive command: chdir=/usr/share /bin/tar xvf /opt/apache-tomcat-7.0.61.tar.gz -C /opt/ creates=/opt/apache-tomcat-7.0.61

- name: Symlink install directory file: src=/opt/apache-tomcat-7.0.61 path=/usr/share/tomcat state=link

- name: Change ownership of Tomcat installation file: path=/usr/share/tomcat/ owner=tomcat group=tomcat state=directory recurse=yes

- name: Configure Tomcat server template: src=server.xml dest=/usr/share/tomcat/conf/ notify: restart tomcat

>

- name: Configure Tomcat users template: src=tomcat-users.xml dest=/usr/share/tomcat/conf/ notify: restart tomcat

- name: Install Tomcat init script copy: src=tomcat-initscript.sh dest=/etc/init.d/tomcat mode=0755

- name: Start Tomcat service: name=tomcat state=started enabled=yes

- name: deploy iptables rules template: src=iptables-save dest=/etc/sysconfig/iptables when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '6'" notify: restart iptables

- name: insert firewalld rule for tomcat http port firewalld: port={{ http_port }}/tcp permanent=true state=enabled immediate=yes when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7'"

- name: insert firewalld rule for tomcat https port firewalld: port={{ https_port }}/tcp permanent=true state=enabled immediate=yes when: "ansible_os_family == 'RedHat' and ansible_distribution_major_version == '7'"

- name: wait for tomcat to start wait_for: port={{http_port}}

Diese spezielle Ansible-Aufgabe lädt Apache Tomcat zusammen mit seiner Abhängigkeit, dem Java JDK 1.7, herunter und installiert es. Anschließend wird die Tomcat-Installation konfiguriert, gestartet und gesichert. Wie Sie sehen können, können Dateien, die von Ansible verwaltet werden, Jinja-Vorlagen enthalten, was die Berechnung von Werten erleichtert und Ihre Konfiguration flexibler macht. Der YAML-Code ist sowohl für Systemadministratoren als auch für Entwickler einfach zu lesen und zu schreiben. Dies führt dazu, dass Ansible sowohl für fortgeschrittene als auch für Anfänger ein zugängliches Konfigurationsmanagementsystem ist.

Puppet CM-Codebeispiel

Die domänenspezifische Sprache von Puppet hat ihre Wurzeln in Ruby, aber die Syntax ist viel näher an imperativen Sprachen im C-Stil wie Perl, Java und C++. Dieser Ansatz ist ein Mittelweg zwischen Entwicklern, die mit Ruby vertraut sind, und solchen, die mit der Sprache nicht vertraut sind. Das hat zur Folge, dass Sie überhaupt keine Ruby-Kenntnisse haben müssen, um die Puppet DSL zu erlernen und damit hochproduktiv zu werden.

Dieses Puppet-Beispielmanifest aus dem PuppetLabs MySQL Puppet-Modulrepository installiert das MySQL-Clientpaket und konfiguriert es:

Gültige Werte sind "present", "absent" oder "x.y.z".
# @param package_manage
# Ob das MySQL-Client-Paket verwaltet werden soll. Der Standardwert ist 'true'.
# @param package_name# Der Name des MySQL-Client-Pakets
, das installiert werden soll.
#
class mysql::client (
$bindings_enable=$mysql::p arams::bindings_enable,
$install_options=undef,
$package_ensure=$mysql::p arams::client_package_ensure,
$package_manage=$mysql::p arams::client_package_manage,
$package_name=$mysql::p arams::client_package_name,
) erbt mysql::p arams {

include '::mysql::client::install'

if $bindings_enable {
class { 'mysql::bindings':
java_enable => true,
perl_enable => true,
php_enable => true,
python_enable => true,
ruby_enable => true,
}
}

# Workaround für Ankermuster, um Ressourcen von mysql::client::install zu
vermeiden# "float off" außerhalb von mysql::client
anchor { 'mysql::client::start': }
-> Class['mysql::client::install']
-> anchor { 'mysql::client::end': }
}

Ein wichtiger Vorteil des Ansatzes von Puppet besteht darin, dass die Puppet DSL im Gegensatz zu den oben aufgeführten imperativen Programmiersprachen deklarativ ist, ähnlich wie XML sowie der YAML-Code aus dem obigen Ansible-Codebeispiel. Der deklarative Ansatz von Puppet und Ansible kommt in beiden Codebeispielen besonders gut zur Geltung. Aus der Perspektive der Codierung sind sie ähnlich und näher beieinander als Tools wie Chef. Allerdings bietet die deklarative Sprache, die Puppet verwendet, auch Ruby-ähnliche Konstrukte wie Bedingungen und Iterationen, wiederum in einem mittelmäßigen Stil, der Ruby-Benutzer und Nicht-Benutzer nicht gleichermaßen verprellt.

Ansible vs. Puppet: Benutzerfreundlichkeit

Benutzerfreundlichkeit sollte Teil der Kriterien eines DevOps-Teams für die Bewertung von Konfigurationsmanagement-Tools sein. Angesichts der Tatsache, dass Ansible sich explizit auf die Einfachheit der Nutzung als größten treibenden Wert konzentriert, ist dies ein Bereich, in dem es außergewöhnlich gut abschneidet. Nicht nur die Einrichtung, sondern auch Entscheidungen wie der Codestil und die Knotenverwaltung zeigen einen thematischen Ansatz, der den DevOps-Ingenieuren eine einfache Schnittstelle bietet, unabhängig davon, ob sie aus einem Entwickler- oder Systemadministrator-Hintergrund kommen.

Das soll nicht heißen, dass Puppet schwer zu bedienen ist, nicht ganz. Puppet bietet viel Leistung und sein eigenwilliger Ansatz für das Konfigurationsmanagement macht die meisten Dinge offensichtlich, solange Sie dem Puppet-Weg folgen, um Ihre Infrastruktur zu automatisieren. An dieser Front hilft Puppet immens, indem es jede Ressource explizit modelliert und Module mit Standardverhaltensweisen bereitstellt, die Sie in Ihren Manifesten verwenden können.

Unter dem Gesichtspunkt der Lernkurve sind beide Plattformen einfach zu bedienen, aber Ansible hat einen leichten Vorteil. Der deklarative YAML-Stil ist leicht zu erlernen, und Ansible-Code wird nie zu komplex. Puppet hat in der Zwischenzeit einige der Herausforderungen erkannt, die mit der Kombination von Daten und Code in denselben Quelldateien verbunden sind. Dies hat den Aufstieg von Puppet Hiera vorangetrieben, einer Datenspeicherlösung, die das YAML-Format verwendet, um Schlüssel-Wert-Paare von Konfigurationsdaten zu speichern. Hiera trägt wesentlich zur Vereinfachung und Optimierung der DevOps-Erfahrung von Puppet bei. Das YAML-Format hat sich für Anwendungsfälle des Konfigurationsmanagements als beliebt erwiesen, wobei auch Salt von Saltstack das Format verwendet.

Puppet und Ansible verfügen beide über Funktionen zum Überprüfen und Testen Ihres Konfigurationsmanagements, von Syntaxprüfungen bis hin zur Integration Ihres Infrastructure-as-Code-Codes.

Ansible vs. Puppet: Lizenzierung und Unternehmenskosten

Als Open-Source-Tools haben Ansible und Puppet viele Gemeinsamkeiten, wenn es um die Lizenzierung geht.

Zunächst einmal steht die Open-Source-Version von Ansible völlig kostenlos zur Verfügung. Unternehmen, die mehr an Sicherheit, Stabilität und Zuverlässigkeit verlangen, können ein Upgrade auf Ansible Engine durchführen, eine unterstützte, gehärtete Version der Enterprise-Klasse, die von Red Hat bereitgestellt wird. Die Lizenzierungskosten für die Ansible Engine liegen in der Regel zwischen 47,50 und 70 US-Dollar pro Jahr und Knoten und variieren je nach bevorzugtem Setup.

Es lohnt sich auf jeden Fall, sich die Enterprise-Version zu holen, wenn Sie die Verfügbarkeit von kostenpflichtigem Support in Betracht ziehen und wie dieser Ihnen helfen kann, Probleme zu beheben und sie viel schneller zu lösen. Ansible Tower, ein Enterprise-Management-Tool, ist auch als Servicepaket erhältlich und bietet Ihrem Team mehr Funktionen rund um Wissen, Kontrolle und Auftragsplanung über ein GUI-Dashboard.

Genau wie Ansible ist auch die Open-Source-Version von Puppet kostenlos verfügbar. Für mehr Unternehmensfunktionen und Support können Unternehmen ein Upgrade auf Puppet Enterprise durchführen, das etwa 112 bis 199 US-Dollar pro Jahr und Knoten kostet. Puppet Enterprise bietet ein Paket mit mehreren Puppet-Tools auf Unternehmensebene in einer Installation, zusammen mit Berichts- und Überwachungstools der Enterprise-Klasse, neben anderen Vorteilen gegenüber der Open-Source-Version.

Ansible vs Puppet: Gemeinschaft

Puppet, das 2005 auf den Markt kam, ist das ältere dieser beiden DevOps-Tools und hatte daher mehr Zeit, seine Community und Benutzerbasis aufzubauen. Ansible, das 2012 auf den Markt kam, konnte jedoch aufgrund seines neuartigen Ansatzes in dieser Zeit ein noch größeres Publikum anziehen und eine sehr lebendige Benutzer- und Mitwirkenden-Community schaffen. Zu den Puppet-Benutzern gehören Unternehmen wie Uber, Salesforce und PayPal. Zur Ansible-Community gehören hingegen Unternehmen wie Digital Ocean, 9GAG und TypeForm.

Die Ansible-Community auf Github, gemessen an den Mitwirkenden, ein wichtiger Indikator in der Open-Source-Community, ist jetzt größer als die von Ansible, mit über 4.800 Mitwirkenden an den 527 von Puppet. Die Dynamik von Ansible in den letzten Jahren war sehr schnell und bahnbrechend. Dies spiegelt sich in dem halsbrecherischen Tempo wider, in dem die Anzahl der Benutzer, die Ansible-Rollen teilen, in Ansibles Community-Repository für gemeinsam genutzten Ansible-Code, Ansible Galaxy, explodiert ist. Dies deutet darauf hin, dass die Ansible-Community das Tool angenommen hat und darauf bedacht ist, ihren Code zu teilen und einen Beitrag zur Community zu leisten.

In der Zwischenzeit hat die Puppet-Community, obwohl sie sich langsamer und stabiler bewegt, die Infrastruktur aufgebaut, um es einfach zu machen, Lösungen für Ihre Puppet-Bedürfnisse mit dem Rest der Community zu finden. Puppet Forge bietet von der Community bereitgestellte Module zur Durchführung allgemeiner Konfigurationsmanagementaufgaben für die Puppet-Community.

Beide Tools verfügen über erstklassige Befehlszeilentools, die eine präzise Kontrolle über den gesamten Lebenszyklus eines Konfigurationsmanagementprojekts ermöglichen. Beide lassen sich gut in andere weit verbreitete DevOps-Systeme wie Docker, Kubernetes und Jenkins oder Cloud-Computing-Plattformen wie AWS und Azure integrieren.

Ist Ansible oder Puppet besser?

Welches dieser beiden Tools für Sie am besten geeignet ist, ist eine Frage, die nur Sie selbst bestimmen können. Der deklarative Stil von Ansible und Puppet bedeutet, dass diese Tools mehr gemeinsam haben als mit einer Reihe anderer Konfigurationsmanagement-Tools. Um jedoch die beste Auswahl für Ihr Team zu treffen, müssen Sie besonders darauf achten, wie Ihre Bedürfnisse mit dem Design und den Stärken des Tools übereinstimmen.

Ansible sollte besser für Teams geeignet sein, die ein gewisses Interesse an der Konfiguration im YAML-Stil haben und mit der Philosophie von Ansible übereinstimmen. Diese Philosophie legt Wert darauf, sehr einfach zu sein und eine minimale Lernkurve zu haben, während sie darauf abzielt, Maschinen sehr schnell und parallel zu verwalten. Darüber hinaus ist dieser Ansatz agentenlos und zielt darauf ab, vorhandene SSH-Funktionen zu verwenden, anstatt benutzerdefinierte Agenten zu erstellen.

Puppet hingegen sollte besser für Teams geeignet sein, die eine DSL wünschen, die Systemressourcen auf konsistente, wiederholbare Weise modelliert. Das ist es, was Puppet DSL erreicht, zusammen mit einem ganzen Ökosystem von Tools, die die Arbeit mit großen Teams vorhersehbar und einfach machen.

Welche dieser beiden Beschreibungen besser zu Ihrem Team passt, können nur Sie selbst sagen. Wenn ja, sollte die Wahl leicht sein.

Zusammenfassung

Sollten Sie sich also für Ansible oder Puppet entscheiden? Darauf gibt es keine einfache Antwort - es hängt von Ihren Bedürfnissen ab.

ProfisNachteile
Marionette
  • Ausgereifte Lösung
  • Gute GUI
  • Unterstützung für alle gängigen Betriebssysteme
  • Einfache Installation
  • Langsam, um auf Kundenanliegen einzugehen
  • Ruby-basiert, Leistung fragwürdig im Vergleich zu Python-basierten CM-Tools
  • Bald müssen alle Kunden die Puppet DSL lernen
Ansible
  • Hervorragende Leistung, agentenlose Installation und Bereitstellung
  • Geringer Overhead, Playbook-basiert
  • Basierend auf der allgegenwärtigen Python-Sprache
  • CLI akzeptiert Befehle in fast jeder Sprache
  • Noch sehr neu; noch nicht von vielen erprobt und getestet
  • Keine Unterstützung für Windows
  • GUI ist in Arbeit

Verwandte Artikel