Table of Contents

Ansible ist ein Open-Source-Automatisierungswerkzeug, mit dem Systemadministratoren die Verwaltung der IT-Infrastruktur automatisieren können. Es bietet eine einfache Sprache, um den gewünschten Zustand der Infrastruktur zu beschreiben, und setzt diesen Zustand automatisch durch. Dies reduziert den Zeit- und Arbeitsaufwand für die Verwaltung großer, komplexer Systeme.

Wenn Sie Ansible noch nicht kennen, erhalten Sie in diesem Artikel eine Einführung in das Tool, einschließlich der grundlegenden Konzepte und der ersten Schritte bei seiner Verwendung.

Einführung in Ansible

Ansible wurde 2012 von Michael DeHaan entwickelt und 2015 von Red Hat übernommen. Seitdem hat es sich zu einem der beliebtesten Automatisierungstools in der Branche entwickelt.

Ansible verwendet eine einfache, deklarative Sprache namens YAML (kurz für “YAML Ain’t Markup Language”), um den gewünschten Zustand der Infrastruktur zu definieren. Dadurch ist es auch für Nicht-Programmierer leicht zu lesen und zu verstehen.

Ansible kann für die Automatisierung einer Vielzahl von Aufgaben verwendet werden, darunter:

  • Konfigurationsmanagement
  • Anwendungsbereitstellung
  • Kontinuierliche Bereitstellung
  • Bereitstellung
  • Sicherheitskonformität**
  • Orchestrierung**

Erste Schritte mit Ansible

Um mit Ansible zu beginnen, müssen Sie es auf Ihrem System installieren. Ansible kann auf einer breiten Palette von Betriebssystemen installiert werden, darunter Linux, macOS und Windows.

Um Ansible unter Linux, in diesem Fall Ubuntu, zu installieren, können Sie die folgenden Befehle verwenden:

sudo apt-get update
sudo apt-get install ansible -y

Andernfalls können Sie die folgenden Anleitungen zur Installation von Ansible verwenden:

Sobald Ansible installiert ist, können Sie mit folgendem Befehl überprüfen, ob es funktioniert:

ansible --version

Dies sollte die Version von Ansible anzeigen, die Sie installiert haben.

Ansible Inventory

Der erste Schritt bei der Verwendung von Ansible besteht darin, ein Inventar zu definieren. Ein Inventar ist eine Liste von Servern, die von Ansible verwaltet werden. Ein Inventar kann in einer Vielzahl von Formaten definiert werden, darunter INI, YAML und JSON.

Hier ist ein Beispiel für eine Inventarisierungsdatei im INI-Format:

[webservers]
webserver1.example.com
webserver2.example.com

[databases]
dbserver1.example.com
dbserver2.example.com

Diese Inventardatei definiert zwei Gruppen von Servern, “Webserver” und “Datenbanken”, und führt die Hostnamen der Server in jeder Gruppe auf.

Ansible Playbooks

Nachdem Sie ein Inventar definiert haben, besteht der nächste Schritt darin, ein Playbook zu definieren. Ein Playbook ist eine YAML-Datei, die eine Reihe von Aufgaben beschreibt, die Ansible auf den Servern im Inventar ausführen soll.

Hier ist ein Beispiel für ein einfaches Playbook:

name: Install Nginx
hosts: webservers
become: yes

tasks:
    - name: Install Nginx package
        apt:
        name: nginx
        state: present

Dieses Playbook installiert den Nginx-Webserver auf allen Servern der Gruppe “webservers”.

Die hosts Parameter gibt an, auf welcher Gruppe von Servern das Playbook ausgeführt werden soll. Der become Parameter gibt an, dass die Aufgaben mit erweiterten Rechten ausgeführt werden sollen (mit sudo oder su

Die tasks Abschnitt listet die einzelnen Aufgaben auf, die das Playbook ausführen soll. In diesem Fall gibt es nur eine Aufgabe, die das Nginx-Paket unter Verwendung der apt Modul.

Ansible-Module

Ansible-Module sind wiederverwendbare Code-Einheiten, die zur Ausführung bestimmter Aufgaben verwendet werden können. Ansible verfügt über eine breite Palette an eingebauten Modulen, und es sind auch viele Module von Drittanbietern verfügbar.

Hier sind einige Beispiele für integrierte Module:

  • apt - Verwalten von Paketen auf Debian-basierten Systemen
  • yum - Verwalten von Paketen auf Red Hat-basierten Systemen
  • file - Verwalten von Dateien
  • service - Verwalten von Systemdiensten
  • user - Verwalten von Benutzern und Gruppen
  • copy - Kopieren von Dateien vom Kontrollrechner auf die verwalteten Server

Eine vollständige Liste der eingebauten Module finden Sie in der Ansible documentation

Ansible-Rollen und -Ordnerstruktur

Eine Ansible-Rolle ist eine Möglichkeit, gemeinsame Aufgaben und Konfigurationen zu organisieren und wiederzuverwenden. Sie ist eine Verzeichnisstruktur, die Aufgaben, Handler, Vorlagen, Dateien und andere Ressourcen enthält.

Hier ist ein Beispiel für eine einfache Ansible-Rolle für die Installation und Konfiguration von Nginx:

roles/
└── nginx/
    ├── tasks/
    │   ├── main.yml
    ├── handlers/
    │   ├── main.yml
    ├── templates/
    │   ├── nginx.conf.j2
    ├── files/
    ├── vars/
    ├── defaults/
    ├── meta/

In diesem Beispiel ist die nginx-Rolle ein Verzeichnis, das mehrere Unterverzeichnisse enthält, von denen jedes einen bestimmten Zweck erfüllt:

  • tasks: enthält die Aufgaben, die von der Rolle ausgeführt werden sollen.
  • Handler**: enthält die Handler, die von den Aufgaben benachrichtigt werden können.
  • templates: enthält die Jinja2-Vorlagen, die zur Erzeugung der Konfigurationsdateien für Nginx verwendet werden.
  • files: enthält alle statischen Dateien, die von der Rolle benötigt werden.
  • vars: enthält Variablen, die für die Rolle spezifisch sind.
  • defaults: enthält die Standardvariablen für die Rolle.
  • meta: enthält Metadaten über die Rolle, wie z.B. ihre Abhängigkeiten.

Rollen können problemlos gemeinsam genutzt und in mehreren Playbooks und Projekten wiederverwendet werden.

Hier ist ein Beispiel für eine main.yml-Datei im Verzeichnis tasks:

---
- name: Install Nginx
  apt:
    name: nginx
    state: present
  notify: restart nginx

- name: Enable Nginx
  systemd:
    name: nginx
    enabled: yes
    state: started

Diese Aufgabe installiert Nginx mithilfe des apt-Moduls und aktiviert und startet den Nginx-Dienst mithilfe des systemd-Moduls. Sie benachrichtigt auch den Handler restart nginx, der Nginx neu startet, wenn Änderungen an der Konfiguration vorgenommen wurden.

Die Verwendung einer Ansible-Rolle wie dieser kann den Prozess der Verwaltung und Konfiguration von Software über mehrere Server oder Umgebungen hinweg vereinfachen. Durch die Trennung von Tasks, Handlern, Vorlagen und anderen Ressourcen in einer einzigen Verzeichnisstruktur können Sie diese Komponenten in verschiedenen Playbooks und Projekten einfacher verwalten und wiederverwenden.

Best Practices für Ansible

Im Folgenden finden Sie einige Best Practices, die Sie bei der Verwendung von Ansible beachten sollten:

1. Versionskontrolle verwenden

Die Speicherung Ihrer Ansible-Playbooks und -Rollen in einem Versionskontrollsystem wie Git ist ein bewährtes Verfahren, das Ihnen hilft, Änderungen zu verfolgen und mit anderen zusammenzuarbeiten. Die Versionskontrolle bietet eine Historie der an Ihrer Codebasis vorgenommenen Änderungen und ermöglicht es Ihnen, bei Bedarf zu früheren Versionen zurückzukehren. Außerdem erleichtert sie die Zusammenarbeit mit anderen durch die gemeinsame Nutzung von Code und die Verwaltung von Konflikten.

2. Verwenden Sie Rollen, um Ihre Playbooks zu organisieren

Rollen sind eine leistungsstarke Möglichkeit, Ihre Ansible-Playbooks und -Aufgaben zu organisieren. Indem Sie verwandte Aufgaben in Rollen zusammenfassen, können Sie Ihre Playbooks modularer und wiederverwendbar machen. Rollen erleichtern auch die gemeinsame Nutzung von Code in verschiedenen Projekten.

Hier ist ein Beispiel für ein Playbook, das eine Rolle zur Installation und Konfiguration von Nginx verwendet:

name: Install and configure Nginx
hosts: webservers
become: yes
roles:
  - nginx

Dieses Playbook verwendet eine Rolle namens “nginx” zur Installation und Konfiguration von Nginx auf der “Webserver”-Gruppe von Hosts.

3. Verwenden von Tags zum Gruppieren von Aufgaben

Tags können verwendet werden, um verwandte Aufgaben in Ihren Ansible-Playbooks zu gruppieren. Dies erleichtert die Ausführung bestimmter Teile eines Playbooks, insbesondere bei der Arbeit mit großen, komplexen Playbooks.

Hier ist ein Beispiel für die Verwendung von Tags in einem Ansible-Playbook:

name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
    tags: nginx_install

  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    tags: nginx_config

Dieses Playbook hat zwei Aufgaben, eine für die Installation von Nginx und eine für die Konfiguration von Nginx. Jeder Aufgabe ist ein Tag zugeordnet, so dass Sie nur die benötigten Aufgaben ausführen können.

4. Verwenden Sie Variablen, um Playbooks flexibler zu gestalten

Variablen können verwendet werden, um Ihre Ansible-Playbooks flexibler und wiederverwendbar zu machen. Durch die Verwendung von Variablen können Sie Ihre Playbooks allgemeiner gestalten und an verschiedene Umgebungen anpassen.

Im Folgenden finden Sie ein Beispiel für die Verwendung von Variablen in einem Ansible-Playbook:

name: Install and configure Nginx
hosts: webservers
become: yes

vars:
nginx_port: 80
nginx_user: www-data

tasks:
  - name: Install Nginx
    apt:
    name: nginx
    state: present
  - name: Configure Nginx
    template:
    src: nginx.conf.j2
    dest: /etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service:
    name: nginx
    state: restarted

Dieses Playbook verwendet Variablen zur Angabe des Ports, den Nginx abhören soll, und des Benutzers, der Nginx ausführen soll. Dadurch wird das Playbook flexibler und kann an verschiedene Umgebungen angepasst werden.

5. Testen Sie Ihre Playbooks

Das Testen Ihrer Ansible-Playbooks ist eine bewährte Praxis, die Ihnen helfen kann, Fehler zu erkennen und sicherzustellen, dass Ihre Playbooks wie erwartet funktionieren. Ein beliebtes Tool zum Testen von Ansible-Playbooks ist Molecule.

Molecule ist ein Test-Framework, mit dem Sie Ihre Playbooks auf konsistente und automatisierte Weise testen können. Molecule kann virtuelle Maschinen erstellen, Ihr Playbook anwenden und dann überprüfen, ob alles wie erwartet funktioniert. Auf diese Weise können Sie Fehler erkennen und sicherstellen, dass Ihre Playbooks vor der Bereitstellung in der Produktion korrekt funktionieren.

Hier sehen Sie ein Beispiel für die Verwendung von Molecule zum Testen einer Ansible-Rolle:

molecule init role myrole
cd myrole
molecule test

Schlussfolgerung

In diesem Artikel haben wir Ansible vorgestellt, ein leistungsstarkes Automatisierungstool, das Ihnen bei der Verwaltung komplexer IT-Infrastrukturen helfen kann. Wir haben die grundlegenden Konzepte von Ansible behandelt, darunter Inventare, Playbooks, Module und Rollen.

Wir haben auch bewährte Verfahren für die Verwendung von Ansible erörtert, einschließlich der Verwendung der Versionskontrolle, der Organisation von Playbooks mit Rollen, der Verwendung von Tags und Variablen und des Testens Ihrer Playbooks.

Wenn Sie neu in Ansible sind, empfehlen wir Ihnen, zunächst mit einigen einfachen Playbooks zu experimentieren und Ihre Fähigkeiten und Kenntnisse im Laufe der Zeit schrittweise auszubauen. Mit etwas Übung werden Sie in der Lage sein, selbst die komplexesten Infrastrukturaufgaben mit Leichtigkeit zu automatisieren!