Wir automatisieren und beschleunigen die Einrichtung von Cloud-Servern mit Ansible. Teil 1: Einführung

    Ansible ist ein beliebtes Tool zur Automatisierung der Konfiguration und Bereitstellung der IT-Infrastruktur.

    Die Hauptaufgaben, die Ansible löst:
    • Konfigurationsmanagement . Die schnellste und korrekte Serverkonfiguration entspricht der beschriebenen Konfiguration.
    • Vorsehung . Verwalten der Bereitstellung neuer Cloud-Server (z. B. über die API mit Docker oder LXC).
    • Bereitstellung . Installation und Aktualisierung Ihrer Anwendungen ohne Ausfallzeiten.
    • Orchestrierung . Koordinieren Sie Ihre Infrastrukturkomponenten für die Bereitstellung. Überprüfen Sie beispielsweise, ob der Webserver vom Load Balancer getrennt ist, bevor Sie die Software auf dem Server aktualisieren.
    • Überwachung und Benachrichtigungen .
    • Logging . Zentralisierte Protokollsammlung.



    Im Vergleich zu anderen gängigen Automatisierungstools für IT-Infrastrukturen muss für Ansible keine Clientanwendung auf Servern mit Wartung installiert werden. Dies kann die Einrichtungszeit vor der Bereitstellung der Infrastruktur verkürzen. Um zu funktionieren, stellt Ansible über SSH eine Verbindung zu bedienten Servern her.

    Die Bedeutung solcher Tools nimmt in der Cloud erst zu, wenn es möglich ist, schnell die erforderlichen Server zu erstellen, die erforderliche Software bereitzustellen, zu verwenden und zu löschen, wenn der Bedarf verschwunden ist, und nur für die verwendeten Ressourcen zu zahlen. In diesem Artikel werden die grundlegenden Ansible-Funktionen im Kontext der praktischen Verwendung auf Cloud-Servern in InfoboxCloud erläutert .

    Was müssen wir konfigurieren


    Wir hoffen, Sie haben bereits ein Konto bei InfoboxCloud . Wenn noch nicht, erstellen Sie eine .

    Damit Ansible funktioniert, benötigen wir einen Verwaltungsserver. Erstellen Sie es (es wird empfohlen, Ubuntu 14.04 oder CentOS 7 zu verwenden). Erstellen Sie außerdem mindestens ein paar Linux-Server, die mit Ansible konfiguriert werden. Die Daten für den Zugriff auf die Server werden an Ihre E-Mail-Adresse gesendet.

    Stellen Sie über SSH eine Verbindung zum Verwaltungsserver her .

    Installieren Sie Ansible


    Ubuntu 14.04 LTS

    Geben Sie zum Installieren auf dem Verwaltungsserver Folgendes ein:
    apt-key update && apt-get update && apt-get -y upgrade && apt-get -y install python-software-properties && apt-get -y install software-properties-common && apt-add-repository -y ppa:rquillo/ansible && apt-get update && apt-get -y install ansible
    

    CentOS 7

    Geben Sie zum Installieren auf dem Verwaltungsserver Folgendes ein:
    yum -y update && yum -y install epel-release && yum -y install ansible
    


    So funktioniert Ansible


    Die Hauptidee von Ansible ist das Vorhandensein eines oder mehrerer Steuerungsserver, von denen aus Sie Befehle oder Sätze von sequentiellen Anweisungen (Playbooks) an Remoteserver senden und über SSH eine Verbindung zu diesen herstellen können.


    Die Host-Inventardatei enthält Informationen zu den Servern, auf denen die Befehle ausgeführt werden. Eine sichtbare Konfigurationsdatei kann hilfreich sein, um Einstellungen für Ihre Umgebung festzulegen.

    Befehlssätze (Spielbücher)bestehen aus einer oder mehreren Aufgaben, die unter Verwendung der Funktionalität des Ansible-Kernelmoduls oder von Modulen von Drittanbietern beschrieben werden, die in bestimmten Situationen erforderlich sein können. Anweisungssätze für sich sind aufeinanderfolgende Anweisungssätze, die Bedingungsprüfungen enthalten können. Wenn die Bedingung nicht erfüllt ist, können bestimmte Anweisungen übersprungen werden.

    Sie können auch die Ansible-API verwenden , um Skripts auszuführen. Wenn das Wrapper-Skript möglicherweise das Playbook ausführen muss, kann dies über die API erfolgen. Die Playbooks selbst sind deklarativ im YAML- Format beschrieben . Ansible unterstützt Szenarien für die Bereitstellung neuer Cloud-Server und deren Konfiguration basierend auf Rollen. Ein Teil der Arbeit kann im lokalen Modus auf dem Verwaltungsserver und der Rest auf dem erstellten Server nach dem ersten Start ausgeführt werden. Derzeit wird an einem Bereitstellungsmodul für InfoboxCloud gearbeitet .

    Ansible Setup


    Die Konfigurationsdatei wird im INI-Format beschrieben . Sie können einen Teil oder die gesamte Konfiguration in den Playbook-Optionen oder Umgebungsvariablen überschreiben.
    Bei der Ausführung von Befehlen prüft Ansible, ob an folgenden Stellen eine Konfigurationsdatei vorhanden ist:
    1. Es wird die Umgebungsvariable ANSIBLE_CONFIG geprüft, die auf eine Konfigurationsdatei verweisen kann.
    2. ./ansible.cfg - im aktuellen Verzeichnis
    3. ~ / .ansible.cfg - im Home-Verzeichnis
    4. /etc/ansible/ansible.cfg - in dem Verzeichnis, das während der Installation von ansible über den Paketmanager erstellt wurde.

    Setzen durch Umgebungsvariablen

    Die meisten Konfigurationsparameter können über Umgebungsvariablen mit dem Präfix ANSIBLE_ vor dem Namen des Konfigurationsparameters (in Großbuchstaben) festgelegt werden.
    Zum Beispiel:
    export ANSIBLE_SUDO_USER = root
    Danach kann die Variable ANSIBLE_SUDO_USER im Playbook verwendet werden.

    Einstellung in ansible.cfg

    Ansible Konfigurationsmöglichkeiten sind zahlreich . Schauen wir uns einige an:
    • Hostdatei : Dieser Parameter zeigt auf den Pfad zur Inventardatei , die eine Liste der Hostadressen enthält, zu denen Ansible eine Verbindung herstellen kann.
      Zum Beispiel: hostfile = / etc / ansible / hosts
    • Bibliothek : Der Pfad zu dem Verzeichnis, in dem die Ansible-Module gespeichert sind. Zum Beispiel: library = / usr / share / ansible
    • forks : Die Anzahl der Prozesse, die Ansible erzeugen kann. Standardmäßig sind 5 Prozesse installiert.
      Zum Beispiel: gabeln = 5
    • sudo_user : Der Standardbenutzer, von dem Ansible Befehle auf Remoteservern ausführt .
      Zum Beispiel: sudo_user = root
    • remote_port : Port für SSH-Verbindung (Standard ist 22).
      Zum Beispiel: remote_port = 22
    • host_key_checking : Mit diesem Parameter können Sie die Überprüfung des SSH-Schlüssels auf dem Host deaktivieren. Standardmäßig wird die Überprüfung durchgeführt.
      Zum Beispiel: host_key_checking = False
    • Zeitüberschreitung : Der Zeitüberschreitungswert eines Verbindungsversuchs über SSH.
      Zum Beispiel: Timeout = 60
    • log_path : Der Pfad zum Speichern der Protokolldateien. Standardmäßig speichert Ansible sie nicht, aber durch Angabe dieses Parameters können Sie die Protokollierung aktivieren.
      Zum Beispiel: log_path = /var/log/ansible.log

    Wir schreiben die erste Ansible-Konfigurationsdatei

    Lassen Sie uns unsere erste Ansible-Konfigurationsdatei in InfoboxCloud erstellen. Stellen Sie über SSH eine Verbindung zum erstellten Verwaltungsserver her, auf dem Ansible installiert ist. Erstellen Sie ein Verzeichnis für unsere "aniblen" Experimente und navigieren Sie dorthin:
    mkdir ~/ansible
    cd ~/ansible
    

    Erstellen Sie außerdem einen Ordner zum Speichern von Ansible-Modulen und einen Ordner zum Speichern von Protokollen:
    mkdir ~/ansible/modules
    mkdir ~/ansible/logs
    

    Erstellen Sie eine ansible.cfg-Datei mit folgendem Inhalt:
    [defaults]
    hostfile = ~/ansible/inventory
    sudo_user = root
    log_path = ~/ansible/logs/ansible.log
    

    Wir geben die bedienten Server im Host-Inventar an

    Für Experimente haben wir zuvor einige Server erstellt, die wir konfigurieren werden. Sie müssen Ansible ihre Adressen mitteilen und sie gruppieren. Erstellen Sie dazu eine Inventardatei in unserem Verzeichnis ~ / ansible / inventory mit folgendem Inhalt:
    [experiments]
    ip_первой_машины
    ip_второй_машины
    

    Server-IP-Adressen können im InfoboxCloud- Kontrollfeld angezeigt werden .


    Beachten Sie, dass Sie zur Verwendung des Ansible-Verwaltungsservers mit Servern in derselben Region lokale IP-Adressen angeben und im internen Netzwerk arbeiten können.



    Auf dem Verwaltungsserver muss ein Schlüssel generiert werden, der für den Zugriff auf benutzerdefinierte Server verwendet wird.
    Dies geschieht mit dem Befehl:
    ssh-keygen
    

    Bei allen Fragen können Sie einfach die Eingabetaste drücken.

    Jetzt müssen Sie den öffentlichen Schlüssel auf die benutzerdefinierten Server kopieren. Dies kann mit dem Dienstprogramm ssh-copy-id vom Ansible-Verwaltungsserver für jeden benutzerdefinierten Server durchgeführt werden:
    ssh-copy-id root@ip_адрес_настраиваемого_сервера
    



    Sie können die Richtigkeit überprüfen, indem Sie sich vom Administrator über SSH beim benutzerdefinierten Server anmelden. Wenn das Passwort nicht mehr angefordert wird, ist alles in Ordnung.

    In InfoboxCloud können Sie neue Server mit dem bereits angegebenen öffentlichen Schlüssel erstellen. Erstellen Sie dazu einen sauberen Server. Kopieren Sie den öffentlichen SSH-Schlüssel, wie oben gezeigt. Als nächstes erstellen Sie ein Betriebssystem-Image:



    Klicken Sie nun im Abschnitt "Server-Images" des Control Panels bei Bedarf auf "Create Server" in unserem Image und bereiten Sie einen Computer für die Konfiguration für Ansible vor.



    Lassen Sie uns nun überprüfen, ob Ansible vollständig konfiguriert ist.
    Sie können die bedienten Server anpingen:
    ansible experiments -m ping
    



    oder an echo "Hallo Welt" senden:
    ansible experiments -a "/bin/echo Hello, World!"
    



    Konfigurationsmanagement


    Mit Spielbüchern arbeiten

    Das Ausführen von Playbooks ist eine der Kernaufgaben von Ansible. Playbooks enthalten Aufgabenlisten. Jede Aufgabe in Ansible verwendet ein Codemodul. Playbooks selbst werden im YAML-Format beschrieben, Module können jedoch in jeder Programmiersprache geschrieben werden. Es ist wichtig, dass das Nachrichtenformat der Module JSON ist.

    Yaml

    Playbook ist in YAML geschrieben. Schauen wir uns die Grundregeln zum Schreiben von YAML-Dateien an.

    Bei Ansible beginnt fast jede YAML-Datei mit einer Liste. Jedes Listenelement ist eine Liste von Schlüssel-Wert-Paaren, die oft als Wörterbuch bezeichnet werden.

    Alle YAML-Dateien müssen mit "---" beginnen. Dies ist Teil des YAML-Formats und markiert den Anfang des Dokuments.

    Alle Mitglieder der Liste müssen am Anfang der Zeile eingerückt sein und mit einem Leerzeichen oder "-" beginnen. Kommentare beginnen mit "#".
    Zum Beispiel:
    ---
    #Message
    - Hosting
    – Cloud
    

    Das Wörterbuch wird in Form von "key:" (Doppelpunkt und Leerzeichen) "value" angezeigt:
    ---
    #Message
    site: habr
    blog: infobox
    

    Bei Bedarf können Wörterbücher in Kurzform dargestellt werden:
    ---
    #Comment
    {site: habr, blog: infobox}
    

    Sie können einen logischen Wert (wahr / falsch) wie folgt angeben:
    ---
    need_access: no
    use_service: yes
    file_conf: TRUE
    read_value: True
    kill_process: false
    

    Unser gesamtes Beispiel einer YAML-Datei würde folgendermaßen aussehen:
    ---
    #About blog
    site: habr
    blog: infobox
    must_read: True
    themes:
     - hosting
     - cloud
     - it
     - geeks
    brands:
     - infobox
     - infoboxcloud
    

    Für Variablen verwendet Ansible "{{var}}". Wenn der Wert nach dem Doppelpunkt mit "{" beginnt, überlegt YAML, was zu sagen ist.
    Um Variablen zu verwenden, müssen Sie die Klammern in Anführungszeichen setzen:
    word: "{{ variable }}"
    

    Dies reicht aus, um mit dem Schreiben von Spielbüchern zu beginnen.

    Schreiben Sie unser erstes Spielbuch

    Playbooks können aus einer Liste von Servern, Benutzervariablen, Aufgaben, Handlern (Handlern) usw. bestehen. Die meisten Konfigurationseinstellungen können im Playbook überschrieben werden. Jedes Spielbuch besteht aus einer oder mehreren Aktionen (Spielen) in der Liste.

    Ziel des Spiels ist es, eine Gruppe von Hosts mit vordefinierten Rollen zu verknüpfen, die als Herausforderung für Ansible-Aufgaben dargestellt werden.

    Betrachten wir als Beispiel den Installationsprozess von nginx.
    Erstellen Sie ein Verzeichnis, in dem Playbooks gespeichert werden:
    mkdir ~/ansible/playbooks
    

    Erstellen Sie die Datei setup_nginx.yml im Verzeichnis playbooks mit folgendem Inhalt:
    ---
    - hosts: experiments
      tasks:
      - name: Install nginx package
        apt: name=nginx update_cache=yes
        sudo: yes
      - name: Starting nginx service
        service: name=nginx state=started
        sudo: yes
    

    Schauen wir uns den Inhalt an:
    • hosts : Die Liste der Hosts oder der Gruppe, auf denen Sie die Aufgabe ausführen. Dieses Feld ist erforderlich und muss in jedem Playbook vorhanden sein, mit Ausnahme von Rollen. Wenn eine Hostgruppe angegeben ist, sucht Ansible diese zuerst im Playbook und dann in der Inventardatei. Mit dem Befehl: tasks : Tasks können Sie herausfinden, auf welchen Hosts die Arbeit stattfinden soll . Alle Spielbücher enthalten Aufgaben. Eine Aufgabe ist eine Liste von Aktionen, die Sie ausführen möchten. Das Aufgabenfeld enthält den Namen der Aufgabe (Referenzinformationen zur Aufgabe für den Playbook-Benutzer), das auszuführende Modul und die für das Modul erforderlichen Argumente. Der Parameter "name" ist optional, wird jedoch empfohlen.ansible-playbook --list-host, где – путь к вашему playbook (playbooks/setup_nginx.yml).




    • Erfolgreiche Arbeit!

    Jetzt auch beliebt: