
Ansible ist ein Open-Source-Softwarebereitstellungs- und Konfigurationsverwaltungstool für Unix-ähnliche und Microsoft Windows-Betriebssysteme.
Im Gegensatz zu Puppet, Chef und CFEngine wird die Serversoftware auf einem Computer installiert, und Clientcomputer werden über die Agentensoftware verwaltet. Bei Ansible werden die Knoten verwaltet, indem der Knoten (Ansible-Server) über SSH gesteuert wird, sodass keine Agentensoftware auf verwalteten Knoten (Client-Server)-Maschinen ausgeführt wird.
Ansible kann die Bereitstellung und das Konfigurationsmanagement von Software auf Hunderten von Knoten mit SSH durchführen, der gesamte Vorgang wird normalerweise mit einem einzigen Befehl ansible ausgeführt. In einigen Fällen müssen Sie jedoch möglicherweise mehrere Befehle für die Bereitstellung ausführen.
Diese Anleitung hilft Ihnen bei der Installation von Ansible auf CentOS 8 / RHEL 8.
Umgebung
Hostname | IP-Adresse | Betriebssystem | Zweck |
---|---|---|---|
server.itzgeek.local | 192.168.0.10 | CentOS 8 / RHEL 8 | Steuermaschine |
node1.itzgeek.local | 192.168.0.20 | CentOS 8 | Verwalteter Knoten 1 |
node2.itzgeek.local | 192.168.0.30 | CentOS 7 | Verwalteter Knoten 2 |
Installieren Sie Ansible auf CentOS 8 / RHEL 8
Steuerknoten einrichten
Um Ansible zu installieren, müssen wir EPEL und das Ansible-Repository auf CentOS 8 bzw. RHEL 8 aktivieren.
### CentOS 8 ### yum install -y epel-release ### RHEL 8 ### subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
Installieren Sie Ansible mit dem Befehl yum.
yum install -y ansible
Überprüfen Sie nach der Installation von Ansible die Version von Ansible, indem Sie den folgenden Befehl ausführen.
ansible --version
Ausgabe:
ansible 2.8.5 config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Verwalteten Knoten einrichten
Clientcomputer sollten mindestens über Python 2 (Version 2.6 oder höher) oder Python 3 (Version 3.5 oder höher) verfügen.
### CentOS 8 / RHEL 8 ### yum install -y platform-python ### CentOS 7 / RHEL 7 ### yum install -y python
SELinux
Wenn Sie SELinux auf verwalteten Knoten aktiviert haben, müssen Sie das folgende Paket auf Knoten installieren, bevor Sie Kopier-/Datei-/Vorlagenfunktionen in Ansible verwenden können.
### CentOS 8 / RHEL 8 ### yum install -y python3-libselinux ### CentOS 7 / RHEL 7 ### yum install -y libselinux-python
SSH-Authentifizierung
Wie bereits erwähnt, verwendet Ansible natives OpenSSH für die Remotekommunikation. Ansible unterstützt sowohl die passwortlose als auch die Passwortauthentifizierung, um Befehle auf verwalteten Knoten auszuführen.
Hier habe ich für diese Demo passwortlose Kommunikation zwischen Ansible-Steuerknoten (Root) und den verwalteten Knoten (Root) verwendet. Ich werde Ihnen jedoch zeigen, wie Sie Ansible mit Passwortauthentifizierung verwenden.
SSH-Schlüsselauthentifizierung (passwortlose Authentifizierung)
Bei der SSH-Authentifizierung werden standardmäßig SSH-Schlüssel (passwortlose Authentifizierung) verwendet, um sich beim Remote-Rechner zu authentifizieren.
LESEN :So richten Sie die passwortlose SSH-Anmeldung unter CentOS 8 / RHEL 8 ein
LESEN :So richten Sie die passwortlose SSH-Anmeldung unter CentOS 7 / RHEL 7 ein
Wie Sie wissen, erfordern Softwarebereitstellung oder Konfigurationsänderungen, die Sie auf Knoten durchführen, Root-Berechtigungen oder root-äquivalente Berechtigungen (sudo). Richten Sie also der Einfachheit halber eine passwortlose Kommunikation zwischen dem Root-Benutzer des Ansible-Servers und dem Root-Benutzer der Knoten ein.Passwortauthentifizierung
Die Kennwortauthentifizierung kann bei Bedarf auch verwendet werden, indem die Option –ask-pass bereitgestellt wird. Diese Option erfordert sshpass zum steuernden Rechner.
yum install -y sshpass
Ansible-Inventar erstellen
Die Datei /etc/ansible/hosts enthält das Inventar der Remote-Hosts, mit denen sich Ansible über SSH/Winrm (Windows) verbindet, um sie zu verwalten. In diesem Moment werden wir nur sehen, wie die Konfigurationen des Remote-Linux-Knotens verwaltet werden.
Bearbeiten Sie die Bestandsdatei.
vi /etc/ansible/hosts
Geben Sie die IP-Adresse oder den Hostnamen eines oder mehrerer Remote-Systeme ein. Sie können Server mit [GROUP_NAME] gruppieren. Hier habe ich beide Maschinen zur Demoserver-Gruppe hinzugefügt.
Gruppen werden verwendet, um Systeme für eine bestimmte Verwendung zu klassifizieren. Wenn Sie keine Gruppe angeben, fungieren sie als nicht gruppierte Hosts.
[demoservers] 192.168.0.20 192.168.0.30
Überprüfen Sie die Ansible-Konnektivität
Lassen Sie uns die Konnektivität der Knoten überprüfen, indem Sie ping (Modul) von der steuernden Maschine verwenden. Dazu verwenden wir den Befehl ansible mit den Optionen -m (Modul laden) und all (alle Server) oder demoservers (eine Gruppe von Knoten).
Dieses Ping-Modul wird häufig verwendet, um Ansible-Konnektivitätsprobleme zu beheben.# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping all # All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server ansible -m ping -u raj all # All servers - If you use password authentication and the remote user is different from logged in user on Ansible server ansible -m ping all -u raj --ask-pass # Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping demoservers
Ausgabe:
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
Im obigen Beispiel haben wir gesehen, wie man das Ping-Modul mit dem ansible-Befehl verwendet, um alle oder eine Gruppe von Remote-Hosts mit passwortloser und Passwort-Authentifizierung zu pingen.
Auf die gleiche Weise können wir verschiedene Module mit Ansible-Befehlen verwenden. Verfügbare Module finden Sie hier.
Befehl auf Knoten ausführen
Dieses Mal werden wir das Befehlsmodul mit ansible-Befehl verwenden, um Remote-Maschineninformationen abzurufen.
Die folgenden Befehle werden unter der Annahme geschrieben, dass Sie eine passwortlose Kommunikation zwischen dem Kontrollknoten und den verwalteten Knoten haben. Ich verwende eine Demoserver-Gruppe, um Befehle auszuführen.Hostnamen prüfen
In unserem ersten Beispiel führen wir den Befehl hostname mit dem Befehlsmodul aus, um den Hostnamen von Remote-Knoten auf einmal zu erhalten.
ansible -m command -a "hostname" demoservers
Ausgabe:
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
Verfügbarkeit prüfen
Um die Betriebszeit von Knoten zu überprüfen.
ansible -m command -a "uptime" demoservers
Ausgabe:
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
Remote-Dateien lesen
Sie können auch den Inhalt einer bestimmten Datei anzeigen.
ansible -m command -a "cat /etc/hosts" demoservers
Ausgabe:
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
Dateiausgabe umleiten
Sie können die Ausgabe (auf dem Ansible-Server) auch in einer beliebigen Datei speichern, indem Sie die Umleitung verwenden.
ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file cat /tmp/ouput_file
Konfigurationsänderungen am Knoten vornehmen
Wir können das lineinfile-Modul verwenden, um Dateien auf Remote-Knoten zu bearbeiten. Um beispielsweise zusätzliche Nameserver hinzuzufügen, können wir den folgenden Befehl verwenden.
ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers
Sie können die Änderungen mit dem folgenden Befehl bestätigen.
ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers
Schlussfolgerung
Das ist alles. Sie haben Ansible jetzt erfolgreich auf CentOS 8 / RHEL 8 installiert. Sie können mit der Erstellung von Ansible-Playbooks zur Automatisierung Ihrer Aufgaben fortfahren.