Maison > Opération et maintenance > Sécurité > Utiliser Terraform pour gérer les clusters OpenStack

Utiliser Terraform pour gérer les clusters OpenStack

PHPz
Libérer: 2023-06-09 12:20:32
avant
1206 Les gens l'ont consulté

使用 Terraform 来管理 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.

Installer 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
Copier après la connexion

Ensuite, installez Terraform :

$ sudo dnf install terraform -y
Copier après la connexion

Vérifiez l'installation :

$ terraform –version
Copier après la connexion
#🎜 🎜#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​</code >​ Convertit en un appel API à la plateforme que vous coordonnez. <p ><code style="background-color: rgb(231, 243, 237); padding: 0px 3px; border-radius: 4px; overflow-wrap: break-word; text-indent: 0px;">​.tf​​ 转换为对你正在协调的平台的 API 调用。

有三种类型的提供者:官方、合作伙伴和社区:

  • 官方提供者由 Hashicorp 维护。
  • 合作伙伴提供者由与 Hashicorp 合作的技术公司维护。
  • 社区提供者是由开源社区成员维护的。

在这个 ​​链接​​​ 中有一个很好的 OpenStack 的社区提供者。要使用这个提供者,请创建一个 ​​.tf​​​ 文件,并命名为 ​​main.tf​​。

$ vi main.tf
Copier après la connexion

在 ​​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”
}
Copier après la connexion

你需要修改 ​​OS_USERNAME​​​、​​OS_TENANT​​​、​​OS_PASSWORD​​​、​​OS_AUTH_URL​​​ 和 ​​OS_REGION​​ 变量才能工作。

创建一个 Terraform 管理文件

OpenStack 管理文件的重点是置备外部网络、路由、用户、镜像、租户配置文件和配额。

此示例提供风格,连接到外部网络的路由、测试镜像、租户配置文件和用户。

首先,为置备资源创建一个 ​​AdminTF​​ 目录:

$ mkdir AdminTF
$ cd AdminTF
Copier après la connexion

在 ​​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"
}
Copier après la connexion

创建一个租户 Terraform 文件

作为一个 租户Tenant,你通常会创建虚拟机。你还为这些虚拟机创建网络和安全组。

这个例子使用上面由 Admin 文件创建的用户。

首先,创建一个 ​​TenantTF​ Il existe trois types de prestataires : officiel, partenaire et communautaire :

  • Les prestataires officiels sont maintenus par Hashicorp.
  • Les fournisseurs partenaires sont gérés par des entreprises technologiques qui travaillent avec Hashicorp.
  • Les fournisseurs communautaires sont gérés par des membres de la communauté open source.
#🎜🎜#Dans ce ​​lien​#🎜🎜#​​ Là est une bonne communauté de fournisseurs OpenStack. Pour utiliser ce fournisseur, créez un ​.tf​​​ et nommez-le ​​main.tf​​. #🎜🎜#
$ mkdir TenantTF
$ cd TenantTF
Copier après la connexion
Copier après la connexion
#🎜🎜#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"
}
}
Copier après la connexion
Copier après la connexion
#🎜🎜#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
Copier après la connexion
Copier après la connexion
#🎜🎜#at ​​main.tf​​, ajoutez le contenu suivant : #🎜🎜#
$ cd TenantTF
$ terraform init
$ terraform fmt
Copier après la connexion
Copier après la connexion
#🎜 🎜#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
Copier après la connexion
Copier après la connexion

在 ​​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"
}
}
Copier après la connexion
Copier après la connexion

初始化你的 Terraform

创建 Terraform 文件后,你需要初始化 Terraform。

对于管理员:

$ cd AdminTF
$ terraform init
$ terraform fmt
Copier après la connexion
Copier après la connexion

对于租户:

$ cd TenantTF
$ terraform init
$ terraform fmt
Copier après la connexion
Copier après la connexion

命令解释:

  • ​terraform init​​ 从镜像源下载提供者用于置备此项目。
  • ​terraform fmt​​ 格式化文件,以便在仓库中使用。

创建一个 Terraform 计划

接下来,为你创建一个 计划plan,看看将创建哪些资源。

对于管理员:

$ cd AdminTF
$ terraform validate
$ terraform plan
Copier après la connexion

对于租户:

$ cd TenantTF
$ terraform validate
$ terraform plan
Copier après la connexion

命令解释:

  • ​terraform validate​​​ 验证 ​​.tf​​ 语法是否正确。
  • ​terraform plan​​ 在缓存中创建一个计划文件,所有管理的资源在创建和销毁时都可以被跟踪。

应用你的第一个 TF

要部署资源,使用 ​​terraform apply​​ 命令。该命令应用计划文件中的所有资源状态。

对于管理员:

$ cd AdminTF
$ terraform apply
Copier après la connexion

对于租户:

$ cd TenantTF
$ terraform apply
Copier après la connexion

接下来的步骤

之前,我写了一篇关于在树莓派上部署最小 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!

Étiquettes associées:
source:51cto.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal