Terraform ist eine deklarative Sprache, die als Blaupause für die Infrastruktur dient, die Sie aufbauen.
Nachdem ich eine Zeit lang über eine OpenStack-Produktionsumgebung und ein Heimlabor verfügte, wurde mir klar, wie wichtig die Bereitstellung und Verwaltung von Workloads sowohl aus Administrator- als auch aus Mandantensicht ist.
Terraform ist ein Open-Source-Softwaretool zum Verwalten von Infrastruktur als Code und zum Erstellen von Infrastrukturplänen über eine deklarative Sprache. Es unterstützt Git-Management und ist für GitOps geeignet.
In diesem Artikel werden die Grundlagen der Verwendung von Terraform zur Verwaltung von OpenStack-Clustern vorgestellt. Ich habe das OpenStack-Demoprojekt mit Terraform neu erstellt.
Ich verwende CentOS als Sprungbrett, um Terraform auszuführen. Der offiziellen Dokumentation zufolge besteht der erste Schritt darin, das Hashicorp-Repository hinzuzufügen:
$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
Als nächstes installieren Sie Terraform:
$ sudo dnf install terraform -y
Installation überprüfen:
$ terraform –version
Wenn Sie die zurückgegebene Versionsnummer sehen, dann haben Sie Terraform installiert.
In Terraform benötigen Sie einen Anbieter, bei dem es sich um einen Konverter handelt, den Terraform aufruft, um Ihre .tf
in einen API-Aufruf an die Plattform umzuwandeln, die Sie orchestrieren.
Es gibt drei Arten von Anbietern: offiziell, Partner und Community:
Unter diesem Link gibt es einen guten Community-Anbieter von OpenStack. Um diesen Anbieter zu verwenden, erstellen Sie eine .tf
文件,并命名为main.tf
-Datei und benennen Sie sie
$ vi main.tf
main.tf
Fügen Sie Folgendes zu hinzu:
terraform { required_version = ">= 0.14.0" required_providers { openstack = { source= "terraform-provider-openstack/openstack" version = "1.49.0" } } } provider "openstack" { user_name = “OS_USERNAME” tenant_name = “OS_TENANT” password= “OS_PASSWORD” auth_url= “OS_AUTH_URL” region= “OS_REGION” }
OS_USERNAME
、OS_TENANT
、OS_PASSWORD
、OS_AUTH_URL
和OS_REGION
Sie müssen die Variablen ändern, damit dies funktioniert. OpenStack-Verwaltungsdateien konzentrieren sich auf die Bereitstellung externer Netzwerke, Routing, Benutzer, Bilder, Mieterprofile und Kontingente.
Dieses Beispiel stellt Stile, Routen zu externen Netzwerken, Testbilder, Mieterprofile und Benutzer bereit.
AdminTF
Erstellen Sie zunächst ein
$ mkdir AdminTF $ cd AdminTF
main.tf
Fügen Sie in Folgendes hinzu: terraform { required_version = ">= 0.14.0" required_providers { openstack = { source= "terraform-provider-openstack/openstack" version = "1.49.0" } } } provider "openstack" { user_name = “OS_USERNAME” tenant_name = “admin” password= “OS_PASSWORD” auth_url= “OS_AUTH_URL” region= “OS_REGION” } resource "openstack_compute_flavor_v2" "small-flavor" { name= "small" ram = "4096" vcpus = "1" disk= "0" flavor_id = "1" is_public = "true" } resource "openstack_compute_flavor_v2" "medium-flavor" { name= "medium" ram = "8192" vcpus = "2" disk= "0" flavor_id = "2" is_public = "true" } resource "openstack_compute_flavor_v2" "large-flavor" { name= "large" ram = "16384" vcpus = "4" disk= "0" flavor_id = "3" is_public = "true" } resource "openstack_compute_flavor_v2" "xlarge-flavor" { name= "xlarge" ram = "32768" vcpus = "8" disk= "0" flavor_id = "4" is_public = "true" } resource "openstack_networking_network_v2" "external-network" { name = "external-network" admin_state_up = "true" external = "true" segments { network_type = "flat" physical_network = "physnet1" } } resource "openstack_networking_subnet_v2" "external-subnet" { name= "external-subnet" network_id= openstack_networking_network_v2.external-network.id cidr= "10.0.0.0/8" gateway_ip= "10.0.0.1" dns_nameservers = ["10.0.0.254", "10.0.0.253"] allocation_pool { start = "10.0.0.1" end = "10.0.254.254" } } resource "openstack_networking_router_v2" "external-router" { name= "external-router" admin_state_up= true external_network_id = openstack_networking_network_v2.external-network.id } resource "openstack_images_image_v2" "cirros" { name = "cirros" image_source_url = "https://download.cirros-cloud.net/0.6.1/cirros-0.6.1-x86_64-disk.img" container_format = "bare" disk_format= "qcow2" properties = { key = "value" } } resource "openstack_identity_project_v3" "demo-project" { name = "Demo" } resource "openstack_identity_user_v3" "demo-user" { name = "demo-user" default_project_id = openstack_identity_project_v3.demo-project.id password = "demo" }
Als Mieter erstellen Sie normalerweise virtuelle Maschinen. Sie erstellen auch Netzwerk- und Sicherheitsgruppen für diese virtuellen Maschinen.
In diesem Beispiel wird der von der obigen Admin-Datei erstellte Benutzer verwendet.
TenantTF
Erstellen Sie zunächst ein
$ mkdir TenantTF $ cd TenantTF
main.tf
Fügen Sie in Folgendes hinzu: terraform { required_version = ">= 0.14.0" required_providers { openstack = { source= "terraform-provider-openstack/openstack" version = "1.49.0" } } } provider "openstack" { user_name = “demo-user” tenant_name = “demo” password= “demo” auth_url= “OS_AUTH_URL” region= “OS_REGION” } resource "openstack_compute_keypair_v2" "demo-keypair" { name = "demo-key" public_key = "ssh-rsa ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" } resource "openstack_networking_network_v2" "demo-network" { name = "demo-network" admin_state_up = "true" } resource "openstack_networking_subnet_v2" "demo-subnet" { network_id = openstack_networking_network_v2.demo-network.id name = "demo-subnet" cidr = "192.168.26.0/24" } resource "openstack_networking_router_interface_v2" "demo-router-interface" { router_id = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX” subnet_id = openstack_networking_subnet_v2.demo-subnet.id } resource "openstack_compute_instance_v2" "demo-instance" { name= "demo" image_id= "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" flavor_id = "3" key_pair= "demo-key" security_groups = ["default"] metadata = { this = "that" } network { name = "demo-network" } }
Nachdem Sie die Terraform-Datei erstellt haben, müssen Sie Terraform initialisieren.
Für Administratoren:
$ cd AdminTF $ terraform init $ terraform fmt
$ cd TenantTF $ terraform init $ terraform fmt
terraform init
terraform fmt
Als nächstes erstellen Sie einen Plan, damit Sie sehen können, welche Ressourcen erstellt werden.
Für Administratoren:
$ cd AdminTF $ terraform validate $ terraform plan
$ cd TenantTF $ terraform validate $ terraform plan
terraform validate
验证.tf
terraform validieren
Überprüfen terraform plan
terraform apply
Um Ressourcen bereitzustellen, verwenden Sie den Befehl
Für Administratoren:
$ cd AdminTF $ terraform apply
$ cd TenantTF $ terraform apply
之前,我写了一篇关于在树莓派上部署最小 OpenStack 集群的 文章。你可以找到更详细的Terraform 和 Ansible配置,并通过 GitLab 实现一些 CI/CD。
Das obige ist der detaillierte Inhalt vonVerwenden Sie Terraform, um OpenStack-Cluster zu verwalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!