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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文档介绍了如何通过 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 了解更多信息,自定义资源描述文件,快速搭建属于您的云上设施 。

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
11天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
2月前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
1月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
43 5
|
1月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
66 4
|
2月前
|
持续交付 开发者 Docker
探索容器化技术Docker及其在现代软件开发中的应用
探索容器化技术Docker及其在现代软件开发中的应用
|
2月前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
67 1
|
2月前
|
安全 网络安全 数据安全/隐私保护
利用Docker的网络安全功能来保护容器化应用
通过综合运用这些 Docker 网络安全功能和策略,可以有效地保护容器化应用,降低安全风险,确保应用在安全的环境中运行。同时,随着安全威胁的不断变化,还需要持续关注和研究新的网络安全技术和方法,不断完善和强化网络安全保护措施,以适应日益复杂的安全挑战。
50 5
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
95 0
|
2月前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
42 0

相关产品

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

    更多