Maison > Article > Opération et maintenance > Utiliser Terraform pour gérer les clusters OpenStack
Après avoir eu un environnement de production OpenStack et un laboratoire à domicile pendant un certain temps, je peux affirmer en toute sécurité que de la part des administrateurs et des locataires, il est important pour provisionner la charge de travail et la gérer.
Terraform est un outil logiciel open source Infrastructure as Code (IaC) pour le provisionnement de réseaux, de serveurs, de plateformes cloud, etc. Terraform est un langage déclaratif qui sert de modèle à l'infrastructure que vous construisez. Vous pouvez utiliser Git pour le gérer, qui dispose d'un puissant scénario d'utilisation 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érifiez l'installation :
$ terraform –version#🎜 🎜#Si vous voyez le numéro de version renvoyé, Terraform est installé. Créez un script Terraform pour le fournisseur OpenStack Dans Terraform, vous avez besoin d'un fournisseur, qui est un convertisseur que Terraform appelle votre
.tf
Convertit en un appel API à la plateforme que vous coordonnez. .tf
转换为对你正在协调的平台的 API 调用。
有三种类型的提供者:官方、合作伙伴和社区:
在这个 链接 中有一个很好的 OpenStack 的社区提供者。要使用这个提供者,请创建一个 .tf
文件,并命名为 main.tf
。
$ vi main.tf
在 main.tf
中添加以下内容:
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
变量才能工作。
OpenStack 管理文件的重点是置备外部网络、路由、用户、镜像、租户配置文件和配额。
此示例提供风格,连接到外部网络的路由、测试镜像、租户配置文件和用户。
首先,为置备资源创建一个 AdminTF
目录:
$ mkdir AdminTF $ cd AdminTF
在 main.tf
中,添加以下内容:
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" }
作为一个 租户Tenant,你通常会创建虚拟机。你还为这些虚拟机创建网络和安全组。
这个例子使用上面由 Admin 文件创建的用户。
首先,创建一个 TenantTF
Il existe trois types de prestataires : officiel, partenaire et communautaire :
.tf
et nommez-le main.tf
. #🎜🎜#$ mkdir TenantTF $ cd TenantTF#🎜🎜#at
main.tf
Ajoutez le contenu suivant : #🎜🎜#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" } }#🎜🎜#Vous devez modifier
OS_USERNAME
,OS_TENANT
,OS_PASSWORD
, OS_AUTH_URL
et OS_REGION
fonctionnera. #🎜🎜##🎜🎜#Créer un fichier de gestion Terraform #🎜🎜##🎜🎜#L'objectif des fichiers de gestion OpenStack est de fournir des réseaux externes, des itinéraires, des utilisateurs, des images, des profils de locataires et des 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. #🎜🎜##🎜🎜#Tout d'abord, créez un AdminTF
Répertoire : #🎜🎜#$ cd AdminTF $ terraform init $ terraform fmt#🎜🎜#at
main.tf
, ajoutez le contenu suivant : #🎜🎜#$ cd TenantTF $ terraform init $ terraform fmt#🎜 🎜#Créer un tenant Terraform file#🎜🎜##🎜🎜#En tant que locataire, vous créerez 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. #🎜🎜##🎜🎜#Tout d'abord, créez un
Répertoire TenantTF
, utilisé pour le provisionnement lié au locataire : #🎜🎜#$ mkdir TenantTF $ cd TenantTF
在 main.tf
中,添加以下内容:
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" } }
创建 Terraform 文件后,你需要初始化 Terraform。
对于管理员:
$ cd AdminTF $ terraform init $ terraform fmt
对于租户:
$ cd TenantTF $ terraform init $ terraform fmt
命令解释:
terraform init
从镜像源下载提供者用于置备此项目。terraform fmt
格式化文件,以便在仓库中使用。接下来,为你创建一个 计划plan,看看将创建哪些资源。
对于管理员:
$ cd AdminTF $ terraform validate $ terraform plan
对于租户:
$ cd TenantTF $ terraform validate $ terraform plan
命令解释:
terraform validate
验证 .tf
语法是否正确。terraform plan
在缓存中创建一个计划文件,所有管理的资源在创建和销毁时都可以被跟踪。要部署资源,使用 terraform apply
命令。该命令应用计划文件中的所有资源状态。
对于管理员:
$ cd AdminTF $ terraform apply
对于租户:
$ 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!