Terraform を使用して OpenStack クラスターを管理する

PHPz
リリース: 2023-06-09 12:20:32
転載
1157 人が閲覧しました

使用 Terraform 来管理 OpenStack 集群

OpenStack 本番環境とホーム ラボをしばらく使用した後、管理者とテナントの両方の観点からワークロードと管理をプロビジョニングすることは確実に言えると思います。とても重要です。

Terraform は、ネットワーク、サーバー、クラウド プラットフォームなどをプロビジョニングするためのオープンソースの Infrastructure as Code (IaC) ソフトウェア ツールです。 Terraform は、構築しているインフラストラクチャの青写真として機能する宣言型言語です。 Git を使用して管理できます。これには、強力な GitOps の使用シナリオがあります。

この記事では、Terraform を使用して OpenStack クラスターを管理する基本を紹介します。 Terraform を使用して OpenStack デモ プロジェクトを再作成しました。

Terraform のインストール

Terraform を実行するための出発点として CentOS を使用します。公式ドキュメントによると、最初のステップは 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 では、プロバイダーが必要です。これは、Terraform が .tf 変換先と呼ぶコンバーターです。調整しているプラ​​ットフォームへの API 呼び出し。

プロバイダーには、公式、パートナー、コミュニティの 3 つのタイプがあります。

  • 公式プロバイダーは、Hashicorp によって保守されています。
  • パートナー プロバイダーは、Hashicorp と協力するテクノロジー企業によって維持されます。
  • コミュニティ プロバイダーは、オープン ソース コミュニティのメンバーによって維持されます。

この リンク には、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 ファイルの作成

テナントとして、通常は仮想マシンを作成します。これらの仮想マシンのネットワーク グループとセキュリティ グループも作成します。

この例では、上記の 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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!