Maison > Article > tutoriels informatiques > Utiliser Terraform pour gérer les clusters OpenStack
Terraform est un langage déclaratif qui sert de modèle à l'infrastructure que vous construisez.
Après avoir eu un environnement de production OpenStack et un laboratoire à domicile pendant un certain temps, j'ai confirmé l'importance du déploiement et de la gestion des charges de travail du point de vue de l'administrateur et du locataire.
Terraform est un outil logiciel open source permettant de gérer l'infrastructure en tant que code, en créant des plans d'infrastructure via un langage déclaratif. Il prend en charge la gestion Git et convient à GitOps.
Cet article présente les bases de l'utilisation de Terraform pour gérer les clusters OpenStack. J'ai recréé le projet de démonstration OpenStack à l'aide de Terraform.
J'utilise CentOS comme tremplin pour exécuter Terraform. D'après la documentation officielle, la première étape consiste à ajouter le dépôt Hashicorp :
$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
Ensuite, installez Terraform :
$ sudo dnf install terraform -y
Vérifier l'installation :
$ terraform –version
Si vous voyez le numéro de version renvoyé, cela signifie que Terraform est installé.
Dans Terraform, vous avez besoin d'un fournisseur, qui est un convertisseur que Terraform appelle pour convertir votre .tf
en un appel API vers la plateforme que vous orchestrez.
Il existe trois types de prestataires : officiel, partenaire et communautaire :
Il existe un bon fournisseur communautaire d'OpenStack sur ce lien. Pour utiliser ce fournisseur, créez un fichier .tf
文件,并命名为main.tf
et nommez-le
$ vi main.tf
main.tf
Ajoutez ce qui suit à :
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
Vous devez modifier les variables pour que cela fonctionne. Les fichiers de gestion OpenStack se concentrent sur le provisionnement des réseaux externes, le routage, les utilisateurs, les images, les profils de locataires et les quotas.
Cet exemple fournit des styles, des itinéraires vers des réseaux externes, des images de test, des profils de locataires et des utilisateurs.
AdminTF
Tout d'abord, créez un
$ mkdir AdminTF $ cd AdminTF
main.tf
Dans , ajoutez ce qui suit : 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" }Créer un fichier Terraform locataire
En tant que locataire, vous créez généralement des machines virtuelles. Vous créez également des groupes de réseau et de sécurité pour ces machines virtuelles.
Cet exemple utilise l'utilisateur créé par le fichier Admin ci-dessus.
TenantTF
Tout d'abord, créez un
$ mkdir TenantTF $ cd TenantTF
main.tf
Dans , ajoutez ce qui suit : 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" } }Initialisez votre Terraform
Après avoir créé le fichier Terraform, vous devez initialiser Terraform.
Pour les administrateurs :
$ cd AdminTF $ terraform init $ terraform fmtPour les locataires :
$ cd TenantTF $ terraform init $ terraform fmtExplication de la commande :
terraform init
terraform fmt
Ensuite, créez un plan pour voir quelles ressources seront créées.
Pour les administrateurs :
$ cd AdminTF $ terraform validate $ terraform planPour les locataires :
$ cd TenantTF $ terraform validate $ terraform planExplication de la commande :
terraform validate
验证.tf
terraform validate
Vérifiez terraform plan
terraform apply
Pour déployer des ressources, utilisez la commande
Pour les administrateurs :
$ cd AdminTF $ terraform applyPour les locataires :🎜
$ cd TenantTF $ terraform apply
之前,我写了一篇关于在树莓派上部署最小 OpenStack 集群的 文章。你可以找到更详细的Terraform 和 Ansible配置,并通过 GitLab 实现一些 CI/CD。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!