Navigator’s Guide: Erstes Setup der Umgebung

[.Hinweis]##

Note: Dies ist eine frühe Version des Inhalts des Navigator-Handbuchs, ein Angebot der DigitalOcean Solutions Engineers. Ziel des Buches ist es, Geschäftskunden bei der Planung ihrer Infrastrukturanforderungen zu unterstützen, Arbeitsbeispiele bereitzustellen sowie technische Details und das „Warum“ zu berücksichtigen, mit dem einige Entscheidungen besser als andere getroffen werden.

Das Buch und der zugehörige Code werden öffentlich in einem GitHub-Repository verfügbar sein. Da es sich um eine frühe Version handelt, ist das Buch noch nicht vollständig und das Repository noch nicht öffentlich, aber bleiben Sie dran!

Dies ist der erste praktische Teil des Buches.

Zunächst gehen wir auf die Tools ein, die wir verwenden werden, wie sie zusammenpassen und wie sie für Sie von Nutzen sein können, wenn Sie beginnen, Ihre Infrastruktur auf DigitalOcean zu erstellen und zu verwalten. Danach richten wir ein einzelnes Droplet ein, das wir als Controller verwenden, um den Rest unserer Tools auszuführen und zu verwenden.

Unser Werkzeuggürtel

Wir werden hauptsächlichTerraform,Ansible,terraform-inventory undGit verwenden.

Terraform

Terraform ist ein Open-Source-Tool, mit dem Sie Ihre Infrastruktur einfach als Code beschreiben können. Dies bedeutet, dass Sie Ihre Ressourcen auf die gleiche Weise wie beim Schreiben eines Programms versionskontrollieren können, sodass Sie bei Auftreten eines Fehlers in den Betriebszustand zurückkehren können.

Terraform verwendet eine deklarative Syntax (HCL), die für Mensch und Computer gleichermaßen leicht verständlich ist. Mit HCL können Sie Ihre Änderungen zur Überprüfung planen und Infrastrukturabhängigkeiten automatisch für Sie bearbeiten.

Wir werden Terraform fürcreateunserer Infrastruktur verwenden, dh Droplets, Floating IPs, Firewalls, Block Storage Volumes und DigitalOcean Load Balancer erstellen, aber wir werden es nicht fürconfigure dieser Infrastruktur verwenden Ressourcen. Hier kommt Ansible ins Spiel.

Es gibt einige Ressourcen, die wir empfehlen, wenn Sie mehr über Terraform erfahren möchten:

Ansible

Ansible ist einconfiguration management-Tool, mit dem Sie Änderungen an einem System systematisch so behandeln können, dass seine Integrität über einen längeren Zeitraum erhalten bleibt. Die Standard-Modulbibliothek von Ansible ist umfangreich und die Architektur ermöglicht es Ihnen, auch Ihre eigenen Plugins zu erstellen.

Ansible Playbooks sind YAML-Dateien, die die zu verwaltende Automatisierung definieren. Wie bei Terraform können Sie Ihre Playbooks versionieren. Im Gegensatz zu Terraform erfordert eine Änderung der Konfiguration einer Ressource nicht die Zerstörung und Neuerstellung dieser Ressource. Ansible überträgt Konfigurationen an Ihre Infrastruktur.

Ansible verwendet SSH-Verbindungen, sodass Sie keinen Agenten auf den Zielknoten installieren müssen, um ihn zu verwenden. Dies bedeutet jedoch, dass Ansible wissen muss, zu welchen Endpunkten eine Verbindung hergestellt werden soll. Dies wird normalerweise mit einer Inventardatei definiert. Da für die Bereitstellung Terraform verwendet wird und der Infrastrukturstatus in einer Datei beibehalten wird, verwenden wir Terraform-Inventar, um die Liste der Zielcomputer von Ansible dynamisch zu füttern.

Ansible Playbooks rufen Module auf, um Konfigurationsänderungen vorzunehmen oder Befehle auszuführen. Ansible verfügt über zahlreiche integrierte Module zur Steuerung beliebter Software- oder Cloud-Anbieter, einschließlich DigitalOcean. Wenn Sie in der Befehlszeile arbeiten, können Sie mit dem Befehlansible-docauf einfache Weise die Optionen und Details für Module überprüfen. Ein Beispiel wäreansible-doc -l, um die Module aufzulisten, oder ein bestimmtes Modul, um die Dokumentation zu sehen,ansible-doc digital_ocean. Playbooks können Pakete als Rollen zum einfachen Teilen sein. Das wichtigste öffentliche Repository für Rollen istAnsible Galaxy. Die Codebeispiele in diesem Buch verwenden mehrere Rollen zum Anwenden von Konfigurationen.

Es ist erwähnenswert, dass Ansible den Status nicht erzwingt. Beim Ausführen eines Playbooks werden nur die Befehle im Playbook ausgeführt. Wenn Sie Änderungen direkt an den von Ansible verwalteten Servern vornehmen, kann dies zu unbeabsichtigten Konsequenzen führen.

Es gibt einige Ressourcen, die wir empfehlen, wenn Sie mehr über Ansible erfahren möchten. Red Hat besitzt das Ansible-Projekt und bietet Schulungsoptionen an. Dies beinhaltet eine großartige kostenlose Einführungsvideoklasse sowie weiterführende Kurse:

terraform-inventar

terraform-inventory ist ein dynamisches Inventarskript, das Ressourceninformationen aus der Terraform-Statusdatei abruft und auf eine Weise ausgibt, mit der Ansible bestimmte Hosts bei der Ausführung von Playbooks ansprechen kann. Es wird etwas komplizierter, aber der entscheidende Punkt ist, dassterraform-inventory es Ihnen einfacher macht, Terraform und Ansible zusammen zu verwenden.

Git

Wir werden Git als unser Versionskontrollsystem verwenden. Sie benötigen keine detaillierten Git-Kenntnisse, sondern müssencommitting changes, tracking, and cloning verstehen. Da wir unsere Terraform- und Ansible-Dateien versionskontrollieren können, können wir Tests für verschiedene Versionen unserer Infrastruktur ausführen, indem wir eine Version eines Terraform-Moduls oder einer Ansible-Rolle angeben.

Das Repository für dieses Buch wird aufGitHub gehostet. Sie können jedoch jeden Git-Hosting-Dienst für Ihre eigenen Bereitstellungen verwenden, z. B. GitHub,GitLab oderBitbucket.

Optionale Werkzeuge

Das DigitalOcean CLI-Dienstprogrammdoctl ist häufig hilfreich, um über die API schnell auf Ihr Konto zuzugreifen und Ressourceninformationen zu erstellen oder abzurufen. Anweisungen zum Einrichten vondoctl inthe project README und vollständige Verwendungsinformationen finden Sie inofficial documentation.

Einrichten des Controller-Droplets

Unsere Controller-Maschine ist der Server, auf dem wir unsere Tools ausführen. Wir verwenden ein Ubuntu 18.04 x64-Droplet (Bionic Beaver), das wir so konfigurieren, dass alle Tools installiert werden, die wir beim Erstellen des Droplets benötigen.

Note: Wenn Sie mit einem anderen Betriebssystem (wie macOS auf Ihrem lokalen Computer) besser vertraut sind, können Sie dies stattdessen tun, solangeAnsible’s system requirements erfüllt ist.

Zu Beginn benötigen Sie:

Wenn Sie die Option Benutzerdaten auswählen, wird ein Textfeld geöffnet. User data sind beliebige Daten, die ein Benutzer zur Erstellungszeit einem Droplet bereitstellen kann. Benutzerdaten werden von CloudInit normalerweise beim ersten Start eines Cloud-Servers verwendet, um Aufgaben auszuführen oder Skripts als Root-Benutzer auszuführen.

Wir verwenden ein Cloud-Konfigurationsskript, um Python 2.7,pip (ein Python-Paketmanager), Git,zip, Terraform,terraform-inventory und Ansible zu installieren.

Note: Sie können diese Software auch manuell installieren, wenn Sie dies bevorzugen. Terraform undterraform-inventory sind Go-Binärdateien, die innerhalb Ihrer$PATH platziert werden müssen. Wir empfehlen, Ansible mit Pip anstelle eines Systempaketmanagers wie APT zu installieren, da es auf dem neuesten Stand bleibt und Sie es innerhalb vonvirtualenv installieren können.

#cloud-config
# Source:  https://git.io/nav-guide-cloud-config

package_upgrade: true

packages:
  - python
  - python-pip
  - git
  - zip
  - jq

runcmd:
  - [curl, -o, /tmp/terraform.zip, "https://releases.hashicorp.com/terraform/0.11.7/terraform_0.11.7_linux_amd64.zip"]
  - [unzip, -d, /usr/local/bin/, /tmp/terraform.zip]
  - [curl, -L, -o, /tmp/terraform-inventory.zip, "https://github.com/adammck/terraform-inventory/releases/download/v0.7-pre/terraform-inventory_v0.7-pre_linux_amd64.zip"]
  - [unzip, -d, /usr/local/bin/, /tmp/terraform-inventory.zip]
  - [pip, install, -U, pip, ansible]
  - [git, clone, "https://github.com/digtialocean/navigators-guide.git"]

Klicken Sie hier aufCreate. Das Droplet selbst ist schnell einsatzbereit, aber die Befehle in den Benutzerdaten benötigen etwas Zeit, um ausgeführt zu werden. Sie könnenlog into the Droplet und/var/log/cloud-init-output.log anzeigen, um den Status zu überprüfen.

Der letzte Schritt besteht darin, einen SSH-Schlüssel für das Controller-Droplet zu erstellen. Wir werden dies später auf jedem der Knoten in unserer Infrastruktur platzieren. Sie können diesen Einzeiler ausführen, wenn Sie auf Ihrem Server angemeldet sind, um einen Schlüssel zu erstellen und ihn mit dem Hostnamen Ihres Droplets zu kommentieren:

ssh-keygen -t rsa -C $(hostname -f)

Sie können das öffentliche und das private Schlüsselpaar in/home/your_username/.ssh/ sehen.

Was kommt als nächstes?

Ihr Controller-Droplet ist eingerichtet, dh Sie können mit der Verwendung der Tools beginnen. Im nächsten Kapitel zeigen wir Ihnen, wie Sie mit diesen Tools eine hochverfügbare Infrastruktur erstellen. Dabei werden Sie den Unterschied zwischen Ansible und Terraform bemerken.