搜尋
首頁運維安全使用 Terraform 管理 OpenStack 集群

使用 Terraform 管理 OpenStack 集群

Jun 09, 2023 pm 12:20 PM
運維

使用 Terraform 来管理 OpenStack 集群

在擁有一個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 呼叫。

有三種類型的提供者:官方、合作夥伴和社群:

  • 官方提供者由 Hashicorp 維護。
  • 合作夥伴提供者由與 Hashicorp 合作的技術公司維護。
  • 社群提供者是由開源社群成員維護的。

在這個 連結# 中有一個很好的 OpenStack 的社群提供者。要使用這個提供者,請建立一個 #.tf#f 文件,並命名為 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##o 和 OS_REGION 變數才能工作。

建立一個 Terraform 管理檔案

OpenStack 管理檔案的重點是置備外部網路、路由、使用者、映像檔、租用戶設定檔和配額。

此範例提供風格,連接到外部網路的路由、測試鏡像、租戶設定檔和使用者。

首先,為置備資源建立一個 AdminTF 目錄:

$ mkdir AdminTF
$ cd AdminTF

在 以下內容:

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

创建一个 Terraform 计划

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

对于管理员:

$ cd AdminTF
$ terraform validate
$ terraform plan

对于租户:

$ cd TenantTF
$ terraform validate
$ terraform plan

命令解释:

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

应用你的第一个 TF

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

对于管理员:

$ cd AdminTF
$ terraform apply

对于租户:

$ cd TenantTF
$ terraform apply

接下来的步骤

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

以上是使用 Terraform 管理 OpenStack 集群的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具