Wir haben einen offiziellen Terraform-Anbieter für die Zusammenarbeit mit Selectel gestartet. Mit diesem Produkt können Benutzer das Ressourcenmanagement mithilfe der Infrastructure-as-Code-Methodik vollständig implementieren.
Der Anbieter unterstützt derzeit die Verwaltung von Serviceressourcen „Virtuelle private Cloud“ (im Folgenden VPC genannt). In Zukunft planen wir, das Ressourcenmanagement für andere von Selectel bereitgestellte Dienste hinzuzufügen.
Wie Sie bereits wissen, basiert der VPC-Dienst auf OpenStack. Da OpenStack jedoch keine nativen Tools für die Bereitstellung der öffentlichen Cloud bereitstellt, haben wir die fehlende Funktionalität in eine Reihe zusätzlicher APIs implementiert, die die Verwaltung komplexer zusammengesetzter Objekte vereinfachen und die Arbeit komfortabler machen. Einige der in OpenStack verfügbaren Funktionen sind für die direkte Nutzung gesperrt, stehen aber über zur Verfügung unsere API.
Der Selectel Terraform-Anbieter bietet jetzt die Möglichkeit, die folgenden VPC-Ressourcen zu verwalten:
Projekte und ihre Quoten;
Benutzer, ihre Rollen und Token;
öffentliche Subnetze, einschließlich überregionaler und VRRP;
Softwarelizenzen.
Der Anbieter nutzt unsere öffentliche Go-Bibliothek, um mit der VPC-API zu arbeiten. Sowohl die Bibliothek als auch der Anbieter selbst sind Open Source, ihre Entwicklung erfolgt auf Github:
Um andere Cloud-Ressourcen wie virtuelle Maschinen, Festplatten und Kubernetes-Cluster zu verwalten, können Sie den OpenStack Terraform-Anbieter verwenden. Die offizielle Dokumentation beider Anbieter ist unter den folgenden Links verfügbar:
Um zu beginnen, müssen Sie Terraform installieren (Anweisungen und Links zu Installationspaketen finden Sie unter die offizielle Seite).
Zum Betrieb benötigt der Anbieter einen Selectel-API-Schlüssel, der in erstellt wird Kontokontrollfelder.
Manifeste für die Arbeit mit Selectel werden mit Terraform oder mithilfe einer Reihe vorgefertigter Beispiele erstellt, die in unserem Github-Repository verfügbar sind: Terraform-Beispiele.
Das Repository mit Beispielen ist in zwei Verzeichnisse unterteilt:
Module, enthält kleine wiederverwendbare Module, die eine Reihe von Parametern als Eingabe verwenden und eine kleine Menge an Ressourcen verwalten;
Beispiele, mit Beispielen eines vollständigen Satzes miteinander verbundener Module.
Nachdem wir Terraform installiert, einen Selectel-API-Schlüssel erstellt und uns mit den Beispielen vertraut gemacht haben, gehen wir zu praktischen Beispielen über.
Ein Beispiel für die Erstellung eines Servers mit einer lokalen Festplatte
Im Ordner vars.tf Alle Parameter, die beim Aufruf von Modulen verwendet werden, werden beschrieben. Einige von ihnen haben Standardwerte, beispielsweise wird der Server in der Zone erstellt de-3a mit folgender Konfiguration:
Bei Bedarf können Sie einen anderen öffentlichen Schlüssel angeben. Der Schlüssel muss nicht als Dateipfad angegeben werden, Sie können den Wert auch als String hinzufügen.
Weiter in dieser Datei werden die Module gestartet project_with_user и server_local_root_disk, die die notwendigen Ressourcen verwalten.
Schauen wir uns diese Module genauer an.
Erstellen eines Projekts und eines Benutzers mit einer Rolle
Der erstellte Benutzer kann sich bei OpenStack anmelden und seine Ressourcen verwalten. Das Modul ist einfach und verwaltet nur drei Entitäten:
selectel_vpc_project_v2,
selectel_vpc_user_v2,
selectel_vpc_role_v2.
Erstellen eines virtuellen Servers mit lokaler Festplatte
Das zweite Modul befasst sich mit der Verwaltung von OpenStack-Objekten, die zum Erstellen eines Servers mit einer lokalen Festplatte erforderlich sind.
Sie sollten einige der Argumente beachten, die in diesem Modul für die Ressource angegeben werden openstack_compute_instance_v2:
Argument ignoriere_Änderungen ermöglicht es Ihnen, Attributänderungen zu ignorieren id für das Image, das zum Erstellen der virtuellen Maschine verwendet wird. Im VPC-Dienst werden die meisten öffentlichen Bilder einmal pro Woche automatisch aktualisiert und gleichzeitig ihre id ändert sich auch. Dies liegt an den Besonderheiten der OpenStack-Komponente Glance, in der Bilder als unveränderliche Einheiten gelten.
Wenn Sie einen vorhandenen Server oder eine vorhandene Festplatte erstellen oder ändern, ist dies ein Argument image_id benutzt id Wenn Sie ein öffentliches Image erstellt haben, wird nach der Aktualisierung dieses Images durch erneutes Ausführen des Terraform-Manifests der Server oder die Festplatte neu erstellt. Ein Argument verwenden ignoriere_Änderungen ermöglicht es Ihnen, eine solche Situation zu vermeiden.
Hinweis: Argument ignoriere_Änderungen erschien vor ziemlich langer Zeit in Terraform: pull#2525.
Argument ignore_resize_confirmation erforderlich, um die Größe der lokalen Festplatte, der Kerne oder des Serverspeichers erfolgreich zu ändern. Solche Änderungen werden über die OpenStack Nova-Komponente per Anfrage vorgenommen Größe. Standard Nova auf Anfrage Größe versetzt den Server in den Status überprüfen_resize und wartet auf eine zusätzliche Bestätigung des Benutzers. Dieses Verhalten kann jedoch geändert werden, sodass Nova nicht auf weitere Aktionen des Benutzers wartet.
Das angegebene Argument ermöglicht es Terraform, nicht auf den Status zu warten überprüfen_resize für den Server und seien Sie darauf vorbereitet, dass sich der Server nach der Änderung seiner Parameter in einem aktiven Status befindet. Das Argument ist ab Version 1.10.0 des OpenStack Terraform-Anbieters verfügbar: pull#422.
Ressourcen erstellen
Bevor Sie die Manifeste ausführen, beachten Sie bitte, dass in unserem Beispiel zwei verschiedene Anbieter gestartet werden und der OpenStack-Anbieter von den Ressourcen des Selectel-Anbieters abhängt, da es ohne die Erstellung eines Benutzers im Projekt nicht möglich ist, die dazugehörigen Objekte zu verwalten . Aus demselben Grund können wir den Befehl leider nicht einfach ausführen Terraform anwenden in unserem Beispiel. Wir müssen zuerst tun sich bewerben für Modul project_with_user und danach für alles andere.
Hinweis: Dieses Problem ist in Terraform noch nicht gelöst. Sie können die Diskussion auf Github unter verfolgen Ausgabe #2430 и Ausgabe #4149.
Nach der Ausführung des Befehls zeigt Terraform an, welche Ressourcen es erstellen möchte, und bittet um Bestätigung:
Plan: 3 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Sobald Projekt, Benutzer und Rolle erstellt wurden, können Sie mit der Erstellung der restlichen Ressourcen beginnen:
Sie können mit der erstellten virtuellen Maschine über SSH unter Verwendung der angegebenen IP arbeiten.
Bearbeiten von Ressourcen
Zusätzlich zur Erstellung von Ressourcen über Terraform können diese auch geändert werden.
Erhöhen wir beispielsweise die Anzahl der Kerne und des Speichers für unseren Server, indem wir die Werte für die Parameter ändern server_vcpus и server_ram_mb im Ordner Beispiele/vpc/server_local_root_disk/main.tf:
In unserem Beispiel-Repositories Sie können auch Manifeste zum Erstellen virtueller Maschinen mit Netzlaufwerken anzeigen.
Beispiel für die Erstellung eines Kubernetes-Clusters
Bevor wir mit dem nächsten Beispiel fortfahren, bereinigen wir die zuvor erstellten Ressourcen. Tun Sie dies im Stammverzeichnis des Projekts terraform-examples/examples/vpc/server_local_root_disk Führen wir den Befehl zum Löschen von OpenStack-Objekten aus:
In beiden Fällen müssen Sie das Löschen aller Objekte bestätigen:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
In diesem Beispiel werden ein Projekt, ein Benutzer mit einer Rolle im Projekt und ein Kubernetes-Cluster erstellt. Im Ordner vars.tf Sie können Standardwerte sehen, z. B. die Anzahl der Knoten, ihre Eigenschaften, die Kubernetes-Version usw.
Um Ressourcen ähnlich dem ersten Beispiel zu erstellen, beginnen wir zunächst mit der Initialisierung von Modulen und der Erstellung von Modulressourcen project_with_userund dann alles andere erstellen:
Wir werden die Erstellung und Verwaltung von Kubernetes-Clustern durch die OpenStack Magnum-Komponente übertragen. Weitere Informationen zur Arbeit mit einem Cluster finden Sie in einem unserer vorherige Artikelund so in Wissensbasis.
Bei der Vorbereitung des Clusters werden Festplatten und virtuelle Maschinen erstellt und alle notwendigen Komponenten installiert. Die Vorbereitung dauert etwa 4 Minuten. Während dieser Zeit zeigt Terraform Meldungen an wie:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Sobald die Installation abgeschlossen ist, zeigt Terraform an, dass der Cluster bereit ist, und zeigt seine ID an:
Um den erstellten Kubernetes-Cluster über das Dienstprogramm zu verwalten kubectl Sie müssen die Cluster-Zugriffsdatei erhalten. Gehen Sie dazu in der Projektliste Ihres Kontos auf das über Terraform erstellte Projekt:
Folgen Sie anschließend dem Link „Gefällt mir“. xxxxxx.selvpc.ruwelches unter dem Projektnamen erscheint:
Verwenden Sie für die Anmeldeinformationen den Benutzernamen und das Passwort, die Sie über Terraform erstellt haben. Wenn Sie nicht betrogen haben vars.tf oder main.tf In unserem Beispiel erhält der Benutzer den Namen tf_user. Sie müssen den Wert der Variablen als Passwort verwenden TF_VAR_user_password, die beim Start angegeben wurde Terraform anwenden früher.
Innerhalb des Projekts müssen Sie zur Registerkarte gehen Kubernetes:
Hier befindet sich der über Terraform erstellte Cluster. Datei herunterladen für kubectl Sie können auf der Registerkarte „Zugriff“:
Installationsanweisungen finden Sie auf derselben Registerkarte. kubectl und Nutzung der heruntergeladenen Dateien config.yaml.
Nach dem Start der kubectl und Festlegen der Umgebungsvariablen KUBECONFIG Sie können Kubernetes verwenden:
Wenn sich die Anzahl der Knoten ändert, bleibt der Cluster verfügbar. Nachdem Sie einen Knoten über Terraform hinzugefügt haben, können Sie ihn ohne zusätzliche Konfiguration verwenden:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4
Abschluss
In diesem Artikel haben wir uns mit den wichtigsten Arbeitsmethoden vertraut gemacht „Virtuelle private Cloud“ über Terraform. Wir freuen uns, wenn Sie den offiziellen Selectel Terraform-Anbieter nutzen und Feedback geben.
Alle im Selectel Terraform-Anbieter gefundenen Fehler können über gemeldet werden Github-Probleme.