Einführung in Ansible: Automatisierung der IT-Infrastrukturverwaltung
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 Systemenyum
- Verwalten von Paketen auf Red Hat-basierten Systemenfile
- Verwalten von Dateienservice
- Verwalten von Systemdienstenuser
- Verwalten von Benutzern und Gruppencopy
- 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!