Terraform部署容器服務Swarm叢集及WordPress應用
本文件介紹瞭如何通過 Terraform 在 VPC 環境下部署一個阿里雲容器服務叢集,並在該叢集之上,部署一個 WordPress 樣例應用。本文件提供一種構建阿里雲基礎設施的解決方案,讓您通過程式碼來自動建立、編排和管理容器服務以及完成在容器叢集上應用的自動化部署。
前提條件
- 需要開通阿里雲容器服務,使用者的賬戶需有 100 元餘額並通過實名認證。
- 需要啟用使用者賬號的 AccessKey,妥善儲存和記錄 AccessKey ID 和 AccessKey Secret。
步驟 1 安裝 Terraform
下載 Terraform
在 Terraform 官方下載地址 下載 Terraform
您可以選擇合適的版本和平臺。本文件以在 Linux 上安裝 Terraform 為例(操作步驟與 Mac OS X 平臺十分相似)。
- 單擊 Linux 圖示下載
terraform_0.11.3_linux_amd64.zip
檔案。 - 複製該
.zip
檔案到合適的路徑中,本例中為/usr/local/terraform
。 - 解壓縮該檔案,您會得到一個二進位制檔案 terraform。
-
在
/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
隱藏目錄下。如果在載入過程中遇到了網路超時的問題,可按照接下來的步驟完成外掛的手動安裝。
- 在 阿里雲 Terraform Provider 官方下載地址 下載對應版本和平臺的 Provider。本例中選擇 Linux 型別。
- 複製下載的檔案
terraform-provider-alicloud_1.9.3_linux_amd64.zip
到 Terraform 的安裝目錄/usr/local/terraform
並解壓即可。將解壓後,當前目錄將會得到阿里雲的 Providerterraform-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 建立的叢集,檢視叢集資訊、節點資訊、日誌資訊和容器資訊等資訊。
同時,可以在應用頁面檢視 WordPress 應用資訊。
單擊應用名稱,然後單擊 路由列表,可檢視路由地址。
步驟 4 訪問 WordPress
- 開啟 WordPress Compose 模板
wordpress.yml
,找到應用域名字首aliyun.routing.port_80: http://wordpress
。 - 將域名字首
http://wordpress
與應用的default_domain
拼接後即可訪問 WordPress 歡迎頁面,可選擇語言,然後繼續配置。
- 輸入站點名稱以及管理員的使用者名稱和密碼。選擇安裝 WordPress。
- WordPress 安裝完成後,單擊 登入,輸入管理員的使用者名稱和密碼,進入 WordPress 應用。
延伸閱讀
阿里雲目前是 Terraform 官方的 Major Cloud Provider,如果您想通過 terraform 靈活構建阿里雲上的基礎設施資源,您可參見 Alicloud Provider 瞭解更多資訊,自定義資源描述檔案,快速搭建屬於您的雲上設施 。
相關文章
- 使用Docker Swarm快速搭建與部署你的服務叢集DockerSwarm
- Kubernetes部署叢集Mysql服務MySql
- swarm mode叢集搭建及簡單概念Swarm
- 使用 Terraform 在 AWS 上快速部署 MQTT 叢集ORMMQQT
- jmeter 叢集容器化部署JMeter
- 用 Docker swarm 快速部署分散式圖資料庫 Nebula Graph 叢集DockerSwarm分散式資料庫
- Docker Swarm叢集初探DockerSwarm
- Docker Swarm 叢集搭建DockerSwarm
- 使用 Terraform 在阿里雲上快速部署 MQTT 叢集ORM阿里MQQT
- 095、如何建立Swarm叢集?(Swarm02)Swarm
- 【k8s】使用Terraform一鍵部署EKS叢集K8SORM
- Docker swarm叢集搭建教程DockerSwarm
- Docker Swarm 叢集搭建教程DockerSwarm
- LAMP平臺服務簡介、部署及應用LAMP
- 在 Azure 中部署 Kubernetes 容器叢集
- 實現Kubernetes跨叢集服務應用的高可用
- Azure Terraform(三)部署 Web 應用程式ORMWeb
- Docker Swarm 叢集搭建實踐DockerSwarm
- 用 Ansible 部署無服務應用!
- 容器化 | 在 KubeSphere 中部署 MySQL 叢集MySql
- Docker 容器搭建及 Redis 叢集原理DockerRedis
- k8s叢集容器外部與容器內部服務互相訪問K8S
- 『中級篇』在docker-swarm叢集裡透過serivce部署worDockerSwarm
- swarm mode叢集之service分組Swarm
- [第十五篇]——Swarm 叢集管理Swarm
- ACK容器服務釋出virtual node addon,快速部署虛擬節點提升叢集彈效能力
- 容器化 | 在 Kubernetes 上部署 RadonDB MySQL 叢集MySql
- WEB叢集- 高可用服務Web
- 053.叢集管理-Helm部署及使用
- Docker Swarm + Harbor + Portainer 打造高可用,高伸縮,叢集自動化部署,更新。DockerSwarmAI
- (精華)2020年10月3日 微服務 Docker-叢集(swarm)微服務DockerSwarm
- 手把手教你使用容器服務 TKE 叢集審計排查問題
- 使用Docker Swarm搭建分散式爬蟲叢集DockerSwarm分散式爬蟲
- Swirl:Docker Swarm 叢集管理的新選擇DockerSwarm
- 阿里雲 ACK One 多叢集管理全面升級:多叢集服務、多叢集監控、兩地三中心應用容災阿里
- 阿里雲平臺下Terraform+Packer一鍵部署WordPress案例阿里ORM
- 使用containerd搭建MinIO叢集服務AI
- alpakka-kafka(5)-kafka叢集配置與分散式應用部署Kafka分散式