邳州信息网

标题: 使用 Terraform 来管理 OpenStack 集群 [打印本页]

作者: 3AAA    时间: 2023-3-3 13:12
标题: 使用 Terraform 来管理 OpenStack 集群


Terraform 是一种声明性语言,可以作为你正在建设的基础设施的蓝图。

在拥有一个 OpenStack 生产环境和家庭实验室一段时间后,我可以肯定地说,从管理员和租户的角度置备工作负载和管理它是很重要的。

Terraform 是一个开源的基础设施即代码(IaC)软件工具,用于 置备provisioning网络、服务器、云平台等。Terraform 是一种声明性语言,可以作为你正在建设的基础设施的蓝图。你可以用 Git 来管理它,它有一个强大的 GitOps使用场景。

本文介绍了使用 Terraform 管理 OpenStack 集群的基础知识。我使用 Terraform 重新创建了 OpenStack 演示项目。

安装 Terraform


我使用 CentOS 作为跳板机运行 Terraform。根据官方文档,第一步是添加 Hashicorp 仓库:
$ sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
接下来,安装 Terraform:
$ sudo dnf install terraform -y
验证安装:
$ terraform –version
如果你看到返回的版本号,那么你已经安装了 Terraform。

为 OpenStack 提供者创建一个 Terraform 脚本


在 Terraform 中,你需要一个 提供者provider,它是一个转换器,Terraform 调用它将你的 .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变量才能工作。

创建一个 Terraform 管理文件


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"}

创建一个租户 Terraform 文件


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

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

首先,创建一个 TenantTF目录,用于与租户相关的置备:
$ 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 文件后,你需要初始化 Terraform。

对于管理员:
$ cd AdminTF$ terraform init$ terraform fmt
对于租户:
$ cd TenantTF$ terraform init$ terraform fmt
命令解释:


创建一个 Terraform 计划


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

对于管理员:
$ cd AdminTF$ terraform validate$ terraform plan
对于租户:
$ cd TenantTF$ terraform validate$ terraform plan
命令解释:


应用你的第一个 TF


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

对于管理员:
$ cd AdminTF$ terraform apply
对于租户:
$ cd TenantTF$ terraform apply

接下来的步骤


之前,我写了一篇关于在树莓派上部署最小 OpenStack 集群的 文章。你可以找到更详细的Terraform 和 Ansible配置,并通过 GitLab 实现一些 CI/CD。

via: https://opensource.com/article/23/1/terraform-manage-openstack-cluster

作者:AJ Canlas选题:lkxed译者:geekpi校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出




欢迎光临 邳州信息网 (https://www.pzxxw.com/) Powered by Discuz! X3.4