Terraform部署容器服務Swarm叢集及WordPress應用

簫竹aron發表於2018-06-08

本文件介紹瞭如何通過 Terraform 在 VPC 環境下部署一個阿里雲容器服務叢集,並在該叢集之上,部署一個 WordPress 樣例應用。本文件提供一種構建阿里雲基礎設施的解決方案,讓您通過程式碼來自動建立、編排和管理容器服務以及完成在容器叢集上應用的自動化部署。

前提條件

  • 需要開通阿里雲容器服務,使用者的賬戶需有 100 元餘額並通過實名認證。
  • 需要啟用使用者賬號的 AccessKey,妥善儲存和記錄 AccessKey ID 和 AccessKey Secret。

步驟 1 安裝 Terraform

下載 Terraform

Terraform 官方下載地址 下載 Terraform
您可以選擇合適的版本和平臺。本文件以在 Linux 上安裝 Terraform 為例(操作步驟與 Mac OS X 平臺十分相似)。

  1. 單擊 Linux 圖示下載 terraform_0.11.3_linux_amd64.zip 檔案。
  2. 複製該 .zip 檔案到合適的路徑中,本例中為 /usr/local/terraform
  3. 解壓縮該檔案,您會得到一個二進位制檔案 terraform。
  4. /etc/profile下建立以下條目,將二進位制檔案所在的路徑 /usr/local/terraform 新增到 PATH 環境變數中。

    export TERRAFORM_HOME=/usr/local/terraform
    export PATH=$PATH:$TERRAFORM_HOME

安裝阿里雲 Terraform Provider

在使用Terraform之前,需要進行初始化操作來載入面向阿里雲的Provider。在模板檔案目錄下執行命令:

$ terraform init

載入成功後,將會把相應的 Plugin 下載到當前資料夾下的 .terraform 隱藏目錄下。如果在載入過程中遇到了網路超時的問題,可按照接下來的步驟完成外掛的手動安裝。

  1. 阿里雲 Terraform Provider 官方下載地址 下載對應版本和平臺的 Provider。本例中選擇 Linux 型別。
  2. 複製下載的檔案 terraform-provider-alicloud_1.9.3_linux_amd64.zip 到 Terraform 的安裝目錄 /usr/local/terraform 並解壓即可。將解壓後,當前目錄將會得到阿里雲的 Provider terraform-provider-alicloud_v1.9.3_x4

Terraform 和 Provider 安裝成功後,執行以下命令檢測 Terraform 的執行,若成功安裝,應顯示以下內容。

$ terraform
Usage: terraform [--version] [--help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you`re just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.

Common commands:
    ....

All other commands:
    debug              Debug output management (experimental)
    force-unlock       Manually unlock the terraform state
    state              Advanced state management

步驟 2 下載容器服務 Swarm 和應用 WordPress 的 Terraform 模板

您可以從 GitHub 上下載建立 Swarm 叢集和部署 WordPress 應用的 Terraform 模板(模板下載地址)。該模板檔案定義了建立 swarm 叢集的相關資源以及在 swarm 叢集上部署 Wordpess 的檔案,幫助您完成 Swarm 叢集的快速建立和應用的快速部署。

模板中包含以下檔案。

main.tf

Terraform 主檔案。定義了將要部署的資源。

  • 地域

定義了資源將要被建立在哪個地域裡。

provider "alicloud" {
  access_key = "${var.alicloud_access_key}"
  secret_key = "${var.alicloud_secret_key}"
  region = "${var.region}"
}
  • VPC

    resource "alicloud_vpc" "vpc" {
      name = "${var.vpc_name}"
      cidr_block = "${var.vpc_cidr}"
    }
  • VSwitch

    resource "alicloud_vswitch" "vswitch" {
      availability_zone = "${data.alicloud_zones.default.zones.0.id}"
      name = "${var.vswitch_name}"
      cidr_block = "${var.vswitch_cidr}"
      vpc_id = "${alicloud_vpc.vpc.id}"
    }
  • 容器服務叢集

    resource "alicloud_cs_swarm" "cs_vpc" {
      password = "${var.password}"
      instance_type = "${data.alicloud_instance_types.main.instance_types.0.id}"
      name = "${var.cluster_name}"
      node_number = "${var.node_number}"
      disk_category = "${var.disk_category}"
      disk_size = "${var.disk_size}"
      cidr_block = "${var.cidr_block}"
      image_id = "${data.alicloud_images.main.images.0.id}"
      vswitch_id = "${alicloud_vswitch.main.id}"
    }
  • WordPress 應用

    resource "alicloud_cs_application" "wordpress" {
      cluster_name = "${alicloud_cs_swarm.cs_vpc.name}"
      name = "${var.app_name == "" ? var.resource_group_name : var.app_name}"
      version = "${var.app_version}"
      template = "${file("wordpress.yml")}"
      description = "terraform deploy consource"
      latest_image = "${var.latest_image}"
      blue_green = "${var.blue_green}"
      blue_green_confirm = "${var.confirm_blue_green}"
       }

outputs.tf

該檔案定義了輸出引數。作為執行的一部分而建立的資源會生成這些輸出引數。和 ROS 模板指定的輸出引數類似。例如,該模板將部署一個 Swarm 叢集和 WordPress 應用例項。以下輸出引數將提供叢集 ID 和應用的預設域名。

output "cluster_id" {
  value = "${alicloud_cs_swarm.cs_vpc.id}"
}
output "default_domain" {
  value = "${alicloud_cs_application.wordpress.default_domain}"
}

variables.tf

該檔案包含可傳遞到 main.tf 的變數,可幫助您自定義環境。

variable "alicloud_access_key" {
  description = "The Alicloud Access Key ID to launch resources. Support to environment `ALICLOUD_ACCESS_KEY`."
}
variable "alicloud_secret_key" {
  description = "The Alicloud Access Secret Key to launch resources.  Support to environment `ALICLOUD_SECRET_KEY`."
}
variable "region" {
  description = "The region to launch resources."
  default = "cn-hongkong"
}
variable "vpc_cidr" {
  description = "The cidr block used to launch a new vpc."
  default = "172.16.0.0/12"
}
variable "app_name" {
  description = "The app resource name. Default to variable `resource_group_name`"
  default = "wordpress"
}

wordpress.yml

部署 WordPress 應用的 Compose 模板,該模板來自於控制檯提供的編排模板,詳情請參考容器服務控制檯 > 應用 > 建立應用 > 使用編排模板建立 > 使用已有編排模板。

步驟 3 執行 Terraform 指令碼

要想執行指令碼,首先定位到您存放以上檔案的目錄,如 /root/terraform/wordpress。您可以利用以下 terraform 的相關命令,執行指令碼,構建容器叢集和部署應用。更多的命令用法,參見 Terraform Commands (CLI)

執行 terraform init,會初始化環境。

$ terraform init
Initializing provider plugins...
    
Terraform has been successfully initialized!
    
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
    
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

執行 terraform providers,會列出安裝的供應商。

 terraform providers
.
└── provider.alicloud

在執行 terraform plan 之前,首先需要傳遞 AccessKey ID 和 AccessKey Secret 進行授權。

$ export ALICLOUD_ACCESS_KEY="AccessKey ID"
$ export ALICLOUD_SECRET_KEY="AccessKey Secret"

然後執行 terraform plan,會建立一個執行計劃,並幫助您瞭解將要建立或改變的資源。

$ terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.alicloud_images.main: Refreshing state...
data.alicloud_instance_types.default: Refreshing state...
data.alicloud_zones.default: Refreshing state...

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:
...
Plan: 7 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn`t specify an "-out" parameter to save this plan, so Terraform
can`t guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

確定資源已如您所願地建立/更新後,執行terraform apply 命令,開始執行 Terraform 模組。

$ terraform apply

data.alicloud_instance_types.default: Refreshing state...
data.alicloud_images.main: Refreshing state...
data.alicloud_zones.default: Refreshing state...

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:
...

Plan: 9 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

alicloud_vpc.vpc: Creating...
...

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.

Outputs:    ##注意

availability_zone = cn-hongkong-a
cluster_id = c95537435b********
default_domain = c95537435b********.cn-hongkong.alicontainer.com
vpc_id = vpc-2zeaudqan6uzt5lzry48a
vswitch_id = vsw-2ze2x92n9b5neor7fcjmr

terraform apply 命令執行完畢後, 會顯示 outputs.tf 中定義的輸出引數。在上面這個例子中,輸出引數為 cs_cluster 叢集 ID、可用區、VPC ID 、VSwitch ID 名稱和應用例項的 default_domain。

通過執行 terraform output 命令,可隨時檢視輸出值,幫助您配置 WordPress 應用。

terraform output
availability_zone = cn-hongkong-a
cluster_id = c95537435b********
default_domain = c95537435b********.cn-hongkong.alicontainer.com
vpc_id = vpc-2zeaudqan6uzt5lzry48a
vswitch_id = vsw-2ze2x92n9b5neor7fcjmr

您現在可以在容器服務控制檯檢視通過 terraform 建立的叢集,檢視叢集資訊、節點資訊、日誌資訊和容器資訊等資訊。

Image 4.png

同時,可以在應用頁面檢視 WordPress 應用資訊。

Image 8.png

單擊應用名稱,然後單擊 路由列表,可檢視路由地址。

Image 9.png

步驟 4 訪問 WordPress

  1. 開啟 WordPress Compose 模板 wordpress.yml,找到應用域名字首 aliyun.routing.port_80: http://wordpress
  2. 將域名字首 http://wordpress 與應用的 default_domain 拼接後即可訪問 WordPress 歡迎頁面,可選擇語言,然後繼續配置。

Image 10.png

  1. 輸入站點名稱以及管理員的使用者名稱和密碼。選擇安裝 WordPress。

114.png

  1. WordPress 安裝完成後,單擊 登入,輸入管理員的使用者名稱和密碼,進入 WordPress 應用。

116.png

延伸閱讀

阿里雲目前是 Terraform 官方的 Major Cloud Provider,如果您想通過 terraform 靈活構建阿里雲上的基礎設施資源,您可參見 Alicloud Provider 瞭解更多資訊,自定義資源描述檔案,快速搭建屬於您的雲上設施 。


相關文章