Terraform 部署容器服务Swarm集群及Wordpress应用

简介: 本文档介绍了如何通过 Terraform 在 VPC 环境下部署一个阿里云容器服务集群,并在该集群之上,部署一个 WordPress 样例应用。本文档提供一种构建阿里云基础设施的解决方案,让您通过代码来自动创建、编排和管理容器服务以及完成在容器集群上应用的自动化部署。

本文档介绍了如何通过 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 了解更多信息,自定义资源描述文件,快速搭建属于您的云上设施 。

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
7月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1050 108
|
5月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
473 2
|
7月前
|
运维 监控 数据可视化
小白也能部署应用,3个免费的容器化部署工具测评
本文对比了三款容器化部署工具:Docker Compose、Portainer 和 Websoft9。Docker Compose 适合开发者编排多容器应用,Portainer 提供图形化管理界面,而 Websoft9 则面向中小企业和非技术人员,提供一键部署与全流程运维支持,真正实现“开箱即用”。三款工具各有定位,Websoft9 更贴近大众用户需求。
小白也能部署应用,3个免费的容器化部署工具测评
|
5月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
327 89
|
5月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
814 4
|
7月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
487 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
6月前
|
存储 Kubernetes 持续交付
为什么Docker容器化改变了开发与部署?
为什么Docker容器化改变了开发与部署?
|
运维 安全 IDE
加速阿里云部署:Terraform在甄云科技的深度应用
甄云科技是一家领先的数字化采购平台服务商,通过Terraform实现全球云基础设施的高效管理与快速部署。公司成立于2017年,已服务全球30多个行业的中大型企业,客户遍布20多个国家和地区。利用IaC(基础架构即代码)理念和Terraform工具,甄云科技显著提升了开发与运维效率,减少了人为错误,加快了迭代速度,并支持业务快速扩展,为全球化战略提供了稳固的云基础架构支持。未来,公司将持续优化技术框架,回馈社区,助力更多企业的数字化转型。
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
513 58
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 推荐镜像

    更多