用Terraform实现Cloud Volumes ONTAP(CVO)的自动化部署

使用Terraform自动化部署Cloud Volumes ONTAP(CVO)

在Terraform中,提供了许多供应商,可以自动化在各种环境中进行配置。NetApp也提供了多个供应商,例如,通过使用云服务供应商,可以更好地扩展和利用云的优势。

这次我们将使用Terraform来自动化部署NetApp的云存储服务Cloud Volumes ONTAP(CVO)的工作,并给出一个例子。如果想了解有关Cloud Volumes ONTAP(CVO)服务的更多信息,请参考此链接。

Cloud Volumes ONTAP(CVO)在AWS / Azure / GCP任何云上都可使用,并提供了适用于每个云的Terraform Provider,但本文将介绍在GCP环境中的使用示例。

另外,关于 Cloud Volumes Ontap(CVO)部署的预备工作,我们在另一篇文章“准备篇”中进行了介绍,请参阅该文章。

Terraform流程摘要

处理概述如下:先在工作用Linux服务器上安装Terraform并准备配置文件,然后使用Terraform为NetApp Cloud Manager执行操作,自动生成GCP环境的Connector / CVO / NFS Volume。

image.png

假设

我正在以下环境下进行测试。

    • Terrafrom 1.0.3

 

    • netapp-cloudmanager 21.5.3

 

    • Cloud Manager 3.9.8

 

    • Cloud Volumes ONTAP 9.9.1

 

    CentOS7.7

请注意,本文中所写的步骤和文件不能保证正常运作。
希望您在进行测试和确认适应各个环境后自行负责使用。

事前准备 (Shì

需要假设以下的预先准备事项已经完成。

    1. NetApp Cloud Central中的准备事项:

创建帐户
获取令牌
(可选)确认Cloud Manager帐户的ID

在GCP中的预备工作:

准备gcloud命令
创建新项目
创建服务帐户并获取私钥(服务帐户密钥)文件
启用API
创建VPC / 子网

请参考刊登在其他文章中的“准备篇”,其中介绍了执行步骤。另外,请查阅NetApp的文档站点以获取更详细的信息。

作业的过程

    1. Terraform的初始设置

 

    1. 准备.tf文件

 

    1. 执行terraform(创建连接器/ CVO / NFS卷)

 

    删除连接器/ CVO / NFS卷

1. Terraform的起始配置

进行初始设置以使Terraform命令可执行。

请在Terraform的官方网站上确认最新的terraform二进制文件。

$ mkdir ~/terraform
$ cd ~/terraform
$ curl -sL https://releases.hashicorp.com/terraform/1.0.3/terraform_1.0.3_linux_amd64.zip > terraform.zip
$ unzip terraform.zip
$ export PATH=$PATH:~/terraform/

请确保您可以通过上述命令执行terraform。
请确认您可以执行以下版本确认命令。

$ terraform --version
Terraform v1.0.3
on linux_amd64

创建.tf文件

关于目录和文件的配置构成

terraform的每个目录和文件的结构和部署基于以下假设。

~/terraform
   └─ cloud-manager
      ├─ provider.tf
      ├─ gcp-connector.tf
      ├─ gcp-cvo.tf
      ├─ gcp-cvo-nfsvol.tf  
      └─ gcp_cred
         └─ netapp-teraform-user01.json

如果您已经执行了先前的准备步骤,您可以将预先准备好的服务帐号的Private Key(服务帐号密钥)文件放置在~/terraform/cloud-manager/gcp_cred目录下。

如果要更改上述结构中的部署目录和文件名,请修改对应的参数”.tf文件”并使用。

关于主要参数

以下是GCP/CVO的主要参数。
如果要更改参数值,请修改相应的”.tf文件”中的值并使用。

GCP: 谷歌云计算平台

パラメータ名値Project名tproject0709Zoneasia-northeast1-aVPC IDprimary-vpc2Subnetsubnet11サービスアカウント名netapp-teraform-user01Volume Typepd-standard

主题句:CVO

Option:
CVO:首席执行官

パラメータ名値Connector名ccon-gcp-from-tera1CVO名cvofromtera1SVM名svm_cvofromtera1NFS Volume名nfsvol01Licence Typegcp-cot-standard-paygo

准备工作是为“.tf文件”做准备。

创建一个用于配置terraform的文件夹,并放置文件。
请注意,此次terraform的tf文件很简洁,没有使用变量等,请注意。

首先,创建一个目录来存放.tf文件和服务账号的私有密钥文件(服务账号密钥文件)。如果已经进行了前面文章的准备,那么目录已经被创建了,只需要进行目录移动(cd ~)即可。

$ mkdir -p ~/terraform/cloud-manager ~/terraform/cloud-manager/gcp_cred
$ cd ~/terraform/cloud-manager

在~/terraform/cloud-manager目录下创建以下四个tf文件。

terraform {
  required_providers {
    netapp-cloudmanager = {
      source  = "NetApp/netapp-cloudmanager"
    }
  }
}

provider "netapp-cloudmanager" {
  refresh_token = "<< NetApp Cloud Centralで確認した Token >>"
}

请设置refresh_token的值为在Cloud Central中确认的值。(在另一篇文章的”1-2 Token取得”部分中确认的值)

resource "netapp-cloudmanager_connector_gcp" "cl-occm-gcp" {
  provider              = netapp-cloudmanager
  name                  = "ccon-gcp-from-tera1"
  project_id            = "tproject0709"
  zone                  = "asia-northeast1-a"
  company               = "Company"
  service_account_email = "netapp-teraform-user01@tproject0709.iam.gserviceaccount.com"
  service_account_path  = "./gcp_cred/netapp-teraform-user01.json"
  subnet_id             = "subnet11"
#  account_id            = "account-xxxxxxxx"
}

在使用多个Cloud Manager账户的环境中,如果没有明确指定使用的账户,可能会导致错误或者在意想不到的账户下进行部署。如果要指定Cloud Manager的账户ID,请在account_id = “acount-xxxxx”行中设置相应的值,并取消注释(在”1-3 Cloud Manager账户的ID确认”的另一篇文章中可以确认该值)。

resource "netapp-cloudmanager_cvo_gcp" "cl-cvo-gcp-from-tera1" {
  provider             = netapp-cloudmanager
  name                 = "cvofromtera1"
  project_id           = "tproject0709"
  zone                 = "asia-northeast1-a"
  gcp_service_account  = "netapp-teraform-user01@tproject0709.iam.gserviceaccount.com"
  svm_password         = "<< 任意のSVM用パスワード >>"
  client_id            = netapp-cloudmanager_connector_gcp.cl-occm-gcp.client_id
  subnet_id            = "subnet11"
  vpc_id               = "primary-vpc2"
  gcp_volume_size      = "100"
  gcp_volume_size_unit = "GB"
  gcp_volume_type      = "pd-standard"
  instance_type        = "n1-standard-8"
  is_ha                = false
}

请在svm_password中填入任意密码。

resource "netapp-cloudmanager_volume" "cvo-volume-nfs-from-tera1-1" {
  provider                  = netapp-cloudmanager
  svm_name                  = "svm_cvofromtera1"
  volume_protocol           = "nfs"
  name                      = "nfsvol01"
  size                      = "10"
  unit                      = "GB"
  provider_volume_type      = "pd-standard"
  export_policy_type        = "custom"
  export_policy_ip          = ["0.0.0.0/0"]
  export_policy_nfs_version = ["nfs3"]
  client_id                 = netapp-cloudmanager_connector_gcp.cl-occm-gcp.client_id
  working_environment_id    = netapp-cloudmanager_cvo_gcp.cl-cvo-gcp-from-tera1.id
  capacity_tier             = "none"
}

3. 执行terraform(创建连接器/CVO/NFS卷)。

执行terraform命令以部署CVO。
首先使用ini命令进行初始化处理,然后使用plan命令确认执行内容。
(在terraform计划中,不执行CVO部署等操作。)

$ cd ~/terraform/cloud-manager
$ terraform init

Initializing the backend...

Initializing provider plugins...
〜〜出力省略〜〜
Terraform has been successfully initialized!
〜〜出力省略〜〜

$ terraform plan

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create
〜〜出力省略〜〜
Plan: 3 to add, 0 to change, 0 to destroy.
〜〜出力省略〜〜

在检查计划内容后,执行apply命令,并输入”Enter a value:”后按下”yes”并按下Enter键,Terraform会实际执行CVO部署和创建NFS卷。

$ terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create
〜〜出力省略〜〜
Plan: 3 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value:
  ↑ yesを入力してEnter

〜〜出力省略〜〜
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
$ terraform state list
netapp-cloudmanager_connector_gcp.cl-occm-gcp
netapp-cloudmanager_cvo_gcp.cl-cvo-gcp-from-tera1
netapp-cloudmanager_volume.cvo-volume-nfs-from-tera1-1

请使用 terraform state list 命令来确认显示了三个资源。

你可以在Cloud Manager界面上确认CVO已部署并创建了NFS卷。

您可以在GCP控制台上确认是否已创建GCE实例,但请注意不要直接从此GCP控制台界面删除CVO实例。请务必在Cloud Manager中删除CVO实例,或者按后面介绍的terraform进行删除。

4. 删除连接器 / CVO / NFS卷

请使用 terraform destroy 命令来删除已部署的环境。
请务必在删除 CVO 之后再删除 Connector。

按照 NFS 体积 → CVO → 连接器的顺序进行删除。

① 删除NFS 数据卷

$ terraform destroy -target=netapp-cloudmanager_volume.cvo-volume-nfs-from-tera1-1
〜〜出力省略〜〜
Enter a value:
 ↑ yesを入力してEnter
〜〜出力省略〜〜
Destroy complete! Resources: 1 destroyed.

删除CVO选项

$ terraform destroy -target=netapp-cloudmanager_cvo_gcp.cl-cvo-gcp-from-tera1
〜〜出力省略〜〜
Enter a value:
 ↑ yesを入力してEnter
〜〜出力省略〜〜
Destroy complete! Resources: 1 destroyed.

删除连接器

$ terraform destroy -target=netapp-cloudmanager_connector_gcp.cl-occm-gcp
〜〜出力省略〜〜
Enter a value: 
 ↑ yesを入力してEnter
〜〜出力省略〜〜
Destroy complete! Resources: 1 destroyed.

$ terraform state list

可以使用terraform state list命令来确认输出是否消失。
您还可以通过Cloud Manager页面和GCP控制台确认CVO/Connector是否已被删除。

总结

我們來介紹一個使用 Terraform 部署 Cloud Volumes Ontap(CVO) 的實例。

通过使用Terraform在云端自动化部署和删除,可以提升云计算的按需性和灵活性,使其更加方便可用。如果您对此感兴趣,请务必尝试一下。

另外,本次文章中省略了一些内容,我们还在视频中介绍了Cloud Volumes Ontap(CVO)以及手动部署的步骤。如果您有兴趣,请务必参考一下。

广告
将在 10 秒后关闭
bannerAds