用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。

假设
我正在以下环境下进行测试。
-
- Terrafrom 1.0.3
-
- netapp-cloudmanager 21.5.3
-
- Cloud Manager 3.9.8
-
- Cloud Volumes ONTAP 9.9.1
- CentOS7.7
请注意,本文中所写的步骤和文件不能保证正常运作。
希望您在进行测试和确认适应各个环境后自行负责使用。
事前准备 (Shì
需要假设以下的预先准备事项已经完成。
-
- NetApp Cloud Central中的准备事项:
创建帐户
获取令牌
(可选)确认Cloud Manager帐户的ID
在GCP中的预备工作:
准备gcloud命令
创建新项目
创建服务帐户并获取私钥(服务帐户密钥)文件
启用API
创建VPC / 子网
请参考刊登在其他文章中的“准备篇”,其中介绍了执行步骤。另外,请查阅NetApp的文档站点以获取更详细的信息。
作业的过程
-
- Terraform的初始设置
-
- 准备.tf文件
-
- 执行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: 谷歌云计算平台
主题句:CVO
Option:
CVO:首席执行官
准备工作是为“.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)以及手动部署的步骤。如果您有兴趣,请务必参考一下。