Automatisierung mit Terraform
Diese Anleitung ermöglicht es Ihnen, in weniger als 5 Minuten Ihre ersten Instanzen auf der Cloud of Trust zu deployen.
Voraussetzungen
- Ein Abonnement des Cloud Temple Angebots (IaaS-Angebot).
- Aktivierte Berechtigungen für den 'IaaS'-Objekttreiber
Bereitstellen einer virtuellen Maschine über Terraform
In diesem Abschnitt werden wir sehen, wie man in wenigen Minuten eine virtuelle Maschine auf der Cloud of Trust über den Cloud Temple Terraform Provider bereitstellt. Wenn Sie den Cloud Temple Provider noch nicht verwendet haben, folgen Sie den Anweisungen unter dieser Adresse, um ihn zu installieren und sich bei Ihrem Tenant zu authentifizieren.
Wir beginnen mit der Erstellung einer .tf-Datei, die die Instanz beschreibt, die wir bereitstellen möchten. Das folgende Skript ermöglicht es Ihnen, eine virtuelle Maschine von Grund auf neu zu erstellen.
data "cloudtemple_compute_virtual_datacenter" "dc" {
name = "DC-EQX6"
}
data "cloudtemple_compute_host_cluster" "flo" {
name = "clu002-ucs01_FLO"
}
data "cloudtemple_compute_datastore_cluster" "koukou" {
name = "sdrs001-LIVE_KOUKOU"
}
resource "cloudtemple_compute_virtual_machine" "scratch" {
name = "from-scratch"
memory = 8 * 1024 * 1024 * 1024
cpu = 2
num_cores_per_socket = 1
cpu_hot_add_enabled = true
cpu_hot_remove_enabled = true
memory_hot_add_enabled = true
datacenter_id = data.cloudtemple_compute_virtual_datacenter.dc.id
host_cluster_id = data.cloudtemple_compute_host_cluster.flo.id
datastore_cluster_id = data.cloudtemple_compute_datastore_cluster.koukou.id
guest_operating_system_moref = "amazonlinux2_64Guest"
tags = {
created_by = "Terraform"
}
}
Die in diesem Skript verwendeten Parameter sind wie folgt:
- datacenter_id (erforderlich): Rechenzentrum, in dem die virtuelle Maschine bereitgestellt wird
- host_cluster_id (erforderlich): Cluster, in dem die virtuelle Maschine bereitgestellt wird
- name (erforderlich): Name der Maschine
- memory: RAM, das der Maschine zu Beginn zugewiesen wird
- cpu: Anzahl der vCPUs, die der Maschine zu Beginn zugewiesen werden
- num_cores_per_socket: Anzahl der Kerne pro Socket
- datastore_cluster_id: Datastore, an den die Maschine angeschlossen ist
- guest_operating_system_moref: Betriebssystem der Maschine
Weitere Parameter können während der Bereitstellung auf eine virtuelle Maschine angewendet werden. Sie finden alle diese Parameter auf der folgenden Seite der Terraform-Dokumentation
Sobald die .tf-Datei erstellt und gespeichert ist, führen Sie den folgenden Befehl aus, um Ihren Code zu überprüfen:
terraform validate
Planen Sie dann die Bereitstellung und überprüfen Sie, ob der Plan dem entspricht, was Sie erreichen möchten:
terraform plan
Stellen Sie schließlich die virtuelle Maschine bereit, indem Sie den folgenden Befehl ausführen:
terraform apply
Verwendung von cloud-init zur Konfiguration einer vom Terraform-Provider bereitgestellten virtuellen Maschine
Das Tool 'cloud-init' ermöglicht es Ihnen, eine virtuelle Maschine oder eine Cloud-Instanz bei ihrem ersten Start anzupassen. Es handelt sich um einen weit verbreiteten Standard. Weitere Informationen finden Sie in der Dokumentation
Kompatibilität
Um eine vom Cloud Temple Terraform-Provider bereitgestellte virtuelle Maschine über cloud-init konfigurieren zu können, muss das für die Bereitstellung verwendete OVF mit cloud-init kompatibel sein.
Um die Kompatibilität Ihrer virtuellen Maschine mit cloud-init zu überprüfen, geben Sie den folgenden Befehl ein:
systemctl status cloud-init.service
Wenn cloud-init korrekt auf der Maschine installiert ist, sollten Sie eine Antwort wie diese sehen. (Siehe Screenshot unten)
Bei Bedarf können Sie cloud-init-kompatible Images im Internet finden (zum Beispiel Ubuntu Cloud Image) oder es selbst auf Ihrer Maschine installieren, bevor Sie sie in ein OVF umwandeln.
Bereitstellung
Nachdem Sie sicher sind, dass das bereitgestellte OVF mit cloud-init kompatibel ist, finden Sie hier ein Beispiel für eine Terraform-Datei (.tf), die Sie zur Konfiguration Ihrer virtuellen Maschine verwenden können. Hinweis: Alle hier gezeigten Beispiele finden Sie im Ordner examples des Cloud Temple Terraform Provider Repositories hier: Beispiele
main.tf
resource "cloudtemple_compute_virtual_machine" "ubuntu-cloud-init" {
name = "ubuntu-cloud-init"
memory = 8 * 1024 * 1024 * 1024
cpu = 2
num_cores_per_socket = 1
cpu_hot_add_enabled = true
cpu_hot_remove_enabled = true
memory_hot_add_enabled = true
datacenter_id = data.cloudtemple_compute_virtual_datacenter.TH3S.id
host_cluster_id = data.cloudtemple_compute_host_cluster.CLU001.id
datastore_id = data.cloudtemple_compute_datastore.DS003.id
content_library_id = data.cloudtemple_compute_content_library.local.id
content_library_item_id = data.cloudtemple_compute_content_library_item.ubuntu-cloudimg.id
power_state = "on"
backup_sla_policies = [
data.cloudtemple_backup_sla_policy.sla001-daily-par7s.id,
data.cloudtemple_backup_sla_policy.sla001-weekly-par7s.id,
]
cloud_init = {
network-config = filebase64("./cloud-init/network-config.yml")
user-data = filebase64("./cloud-init/user-data.yml")
}
}
network-config.yml
#cloud-config
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 172.16.100.192/24
gateway4: 172.16.100.1
nameservers:
addresses:
- 172.16.11.4
user-data.yml
#cloud-config
users:
- default
- name: terraform
primary_group: users
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
lock_passwd: false
plain_text_passwd: password
Das interessante Element hier ist das Vorhandensein der cloud-init-Eigenschaft, die, wie Sie sehen können, aus zwei Untereigenschaften besteht: network-config und user-data.
Diese gehören zu einer Gruppe von 7 Eigenschaften, die Sie zur Konfiguration Ihrer virtuellen Maschine mit cloud-init verwenden können.
- user-data: Dieser Wert muss base64-kodiert sein und enthält Konfigurationsinformationen für die Benutzerkonten der virtuellen Maschine. Sie können auch Skripte hinzufügen, um Pakete zu installieren oder zu aktualisieren.
- network-config: Dieser Wert muss base64-kodiert sein und enthält Netzwerkkonfigurationsinformationen für die virtuelle Maschine.
- public-keys: Gibt an, dass die Instanz die 'authorized_keys' des Standardbenutzers mit diesem Wert füllen soll.
- instance-id: Ermöglicht die Definition einer eindeutigen Instanz-ID für cloud-init.
- password: Wenn definiert, wird das Passwort des Standardbenutzers auf diesen Wert gesetzt, um eine passwortbasierte Anmeldung zu ermöglichen. Das Passwort ist nur für eine einzige Anmeldung gültig. Wenn der Wert 'RANDOM' ist, wird ein zufälliges Passwort generiert und auf der Konsole angezeigt.
- hostname: Gibt einen Hostnamen für die bereitgestellte Instanz an.
- seedfrom: Ermöglicht die Definition einer URL, von der cloud-init die zu verwendenden Konfigurationsdateien abruft. Weitere Informationen zur Funktionsweise von cloud-init finden Sie in der offiziellen Dokumentation
Ausführung
Um die erfolgreiche Ausführung von cloud-init zu überprüfen, sollten Sie sich mit dem Benutzer verbinden können, den Sie in der user-data.yml-Datei konfiguriert haben, oder sehen, dass sich der Hostname in den ändert, den Sie in 'hostname' festgelegt haben.
Bei Problemen können Sie die cloud-init-Logs mit dem folgenden Befehl überprüfen:
sudo cat /var/log/cloud-init-output.log
Sie sollten verschiedene Informationen über die Ausführung von cloud-init sehen. In dem folgenden Screenshot können wir sehen, dass die Netzwerkkonfiguration erfolgreich abgeschlossen wurde.
