转载本文需注明出处:微信公众号EAWorld,违者必究。
引言:
“基础架构即代码(Infrastructure-as-Code,IaC)”是一种使用新的技术来构建和管理动态基础设施的方式。它把基础设施、工具和服务以及对基础设施的管理自己做为一个软件系统,采纳软件工程实践以结构化的安全的方式来管理对系统的变动。
经过第三方调查报告显,Forrester咨询公司在一项针对拥有1000多名员工的企业的727名云技术决策者的全球调查中发现,业务优先级的转变正在推进企业采用多云战略。根据该研究,绝大多数的受访者将其当前的云计算策略描述为多云策。
根据该研究,绝大多数的受访者将其当前的云计算策略描述为多云策略,其性能和创新已超越成本节约成为了成功的最佳衡量标准。此外,60%的企业如今正在迁移或已经将关键任务应用程序迁移到公有云上。
现在,大多数企业都采用多云策略来优化性能并实现业务目标。该研究指出,“没有一个单一的云平台能够知足全部企业工做负载需求。”所以,企业正在利用多个共有云和私有云来处理不一样的应用程序工做负载。在将工做负载与云环境相匹配时,性能是大多数企业的首要考虑因素,甚至超过了合规性与安全性。
接受调查的IT领导者展现了对多云平台的各类使用案例,并认为多云策略能够带来诸多好处,好比改进的IT基础架构管理和灵活性(33%),更好的IT成本管理(33%)以及提升安全性和合规性(30%)。此外,该研究还发现,在选择云服务供应商时,企业更喜欢能提供更深层次帮助和支持的供应商。
企业更多采用云服务,让物理机销量出现了10年来首次负增加。6月18日,市场研究机构IDC公布最新数据,2019年第一季度中国市场物理机出货量下跌0.7%,全球市场物理机销量下跌5.1%。这背后是企业全面向云转移,新旧IT交替出现拐点,云计算市场持续强劲增加,平均增幅达40%。云计算还能够帮助企业大幅削减IT成本,还具备弹性扩容、按需使用、按量付费、成本低等明显优点,已经成为企业数字化转型的基础设施。互联网、政府、电信和金融等行业已经把本身迁移至云上,再也不独立采购物理服务器。
1.咱们该如何应对多云化的挑战?
“基础架构即代码(Infrastructure-as-Code,IaC)”是一种使用新的技术来构建和管理动态基础设施的方式。它把基础设施、工具和服务以及对基础设施的管理自己做为一个软件系统,采纳软件工程实践以结构化的安全的方式来管理对系统的变动。
从开发的角度看提倡一切皆对象,从操做系统的角度看提倡一切皆文件,那么在多云化的时代咱们应该提倡把一切资源皆代码,经过代码的方式编排和管理咱们的基础资源,这样才能知足企业业务快速发展的需求。
针对一个复杂的业务系统咱们如何借助云端的优点进行部署?
传统手工的部署方式大体要经过以上8个步骤完成一个应用的部署,若是咱们的公有云环境是多个,那么就意味着以上步骤要重复屡次,这还仅仅是一个简单的web环境,若是咱们要部署的是一套业务系统,涉及多个应用系统的建立,咱们的基础平台交付须要多长时间?显然经过手工的方式是不现实的。
咱们须要经过infrastructure as code的方式来管理咱们的基础架构,构建企业本身的技术中台。
基础设施即代码四项关键原则:
可再生性:环境中的任何元素能够轻松复制。
一致性:不管什么时候,建立的环境各个元素的配置是彻底相同的。
快速反馈:可以频繁、容易地进行变动,并快速知道变动是否正确。
可见性:全部对环境的变动应该容易理解、可审计、受版本控制。
基础设施即代码的目标:
标准化:以代码来定义环境,实现开发环境、测试环境、生产环境的标准化。
自动化:以自动化工具来驱动代码准备环境。包括建立环境、更新环境以及销毁环境。
可视化:以监控来可视化环境信息。环境当前状态可视、环境变动历史可视化、可追溯。
infrastructure as code 的工具备哪些:
Microsoft为用户提供的IaC工具是:Azure Resource Manager。用户能够经过Azure Resource Manager(ARM)的不一样模板,配置出本身的基础架构、并处理各类依赖项。能够在模板中使用那些已在JSON中声明描述了的资源,也能够在同一个ARM模板中声明多个Azure资源,以构建总体性的项目环境。ARM模板具备幂等性,所以能够无限次数地重复使用相同的模板,并得到相同的结果。Resource Manager还支持服务器的实例分组、以及对不一样分组的统一管理。
CloudFormation是专为那些在AWS云中工做的用户而设计的。目前已经配置了342种AWS资源类型。容许使用JSON或YAML定制各类模板来构建不一样复杂程度的基础架构模型。
(CDM)是基于Google云平台的配置文件(YAML)和模板(JINJA2或PYTHON)的一种自动化执行工具。它容许用户自行定义和同步部署各类系统资源。Google CDM也支持预览功能。这意味着:您在不直接提交更改的状况下,即可以直接了解到部署和变动所带来的影响。能够帮助用户避免出现人为的错误,还可以起到增强与稳定总体基础架构的做用。
Terraform 是一个IT基础架构自动化编排工具,能够用代码来管理维护 IT 资源。Terraform的命令行接口 (CLI) 提供一种简单机制,用于将配置文件部署到任意支持的云上,并对其进行版本控制。经过配置文件能够描述云资源的拓扑基础架构。
Terraform 支持的服务商众多
安装Terraform简单
Terraform 能够随意部署在任意的客户端上,只要能够连通公网便可(Initializing provider plugins and Call Cloud OpenAPI) ,经过http://1t.click/vND下载对应平台的可执行二进制包,解压出来Executable Binary 放指定目录,配置好相应的PATH则可以使用terraform 指令。
$ terraform
Usage: terraform [--version] [--help][args]
Common commands:
apply Builds or changes infrastructure
console Interactive console for Terraform interpolations
destroy Destroy Terraform-managed infrastructure
fmt Rewrites config files to canonical format
get Download and install modules for the configuration
graph Create a visual graph of Terraform resources
import Import existing infrastructure into Terraform
init Initialize a new or existing Terraform configuration
output Read an output from a state file
plan Generate and show an execution plan
providers Prints a tree of the providers used in the configuration
push Upload this Terraform module to Terraform Enterprise to run
refresh Update local state file against real resources
show Inspect Terraform state or plan
taint Manually mark a resource for recreation
untaint Manually unmark a resource as tainted
validate Validates the Terraform files
version Prints the Terraform version
workspace Workspace management
整个基础架构的建设只须要terraform init,terraform plan , terraform apply 三步来完成。删除整个环境只须要terraform destroy一步来完成。
经过一个main.tf文件(只须要是.tf 文件)定义了ECS(镜像、实例类型)、VPC(CIDR、VPC Name)、OSS资源(ACL、实例Name)信息,经过Terraform 对资源配置参数作解析,调用阿里cloud OpenAPI 进行资源校验于建立,同时把整个资源建立状态化到一个.tf.state文件中,基于该文件则能够得知资源建立的全部信息,包括资源数量调整,规格调整,实例变动都依赖这种很是重要的文件。
terraform 具体使用案例
经过配置main.tf文件定义各类资源
定义认证资源
} # Configure the Alicloud Provider
provider "alicloud" {
access_key = "${var.access_key}"
secret_key = "${var.secret_key}"
region = "${var.region}"
定义云主机资源
# Create a web server
resource "alicloud_instance" "web" {
# cn-beijing
provider = "alicloud"
availability_zone = "cn-beijing-a"
image_id = "ubuntu_140405_32_40G_cloudinit_20161115.vhd"
internet_charge_type = "PayByBandwidth"
instance_type = "ecs.n1.medium"
io_optimized = "optimized"
system_disk_category = "cloud_efficiency"
security_groups = ["${alicloud_security_group.default.id}"]
instance_name = "web"
}
定义安全组资源
# Create security group
resource "alicloud_security_group" "default" {
name = "default"
provider = "alicloud"
description = "default"
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = "${alicloud_security_group.default.id}"
cidr_ip = "0.0.0.0/0"
}
定义输出结果信息
# Output message
output "ecs instance name" {
value = "${alicloud_instance.web.instance_name}"
}
output "ecs private ip" {
value = "${alicloud_instance.web.private_ip}"
}
terraform init
$ terraform init
Initializing provider plugins...
- Checking for available provider plugins on https://releases.hashicorp.com...
- Downloading plugin for provider "alicloud" (0.1.0)...
The following providers do not have any version constraints in configuration,
so the latest version was installed.
To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.
* provider.alicloud: version = "~> 0.1"
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.
执行terraform plan,查看资源建立计划
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:
+ alicloud_instance.web
id:
allocate_public_ip: "false"
availability_zone: "cn-beijing-a"
host_name:
image_id: "ubuntu_140405_32_40G_cloudinit_20161115.vhd"
instance_name: "web"
instance_type: "ecs.n1.medium"
internet_charge_type: "PayByBandwidth"
io_optimized: "optimized"
private_ip:
public_ip:
security_groups.#:
status:
subnet_id:
system_disk_category: "cloud_efficiency"
system_disk_size:
+ alicloud_security_group.default
id:
description: "default"
name: "default"
Plan: 2 to add, 0 to change, 0 to destroy.
执行terraform apply,在云端建立资源
$ terraform apply
alicloud_security_group.default: Creating...
description: "" => "default"
name: "" => "default"
alicloud_security_group.default: Creation complete after 1s (ID: sg-2zec9v8aq2hgb244qrqf)
alicloud_instance.web: Creating...
allocate_public_ip: "" => "false"
availability_zone: "" => "cn-beijing-a"
host_name: "" => ""
image_id: "" => "ubuntu_140405_32_40G_cloudinit_20161115.vhd"
instance_name: "" => "web"
instance_type: "" => "ecs.n1.medium"
internet_charge_type: "" => "PayByBandwidth"
io_optimized: "" => "optimized"
private_ip: "" => ""
public_ip: "" => ""
security_groups.#: "" => "1"
security_groups.2344301974: "" => "sg-2zec9v8aq2hgb244qrqf"
status: "" => ""
subnet_id: "" => ""
system_disk_category: "" => "cloud_efficiency"
system_disk_size: "" => ""
alicloud_instance.web: Still creating... (10s elapsed)
alicloud_instance.web: Still creating... (20s elapsed)
alicloud_instance.web: Creation complete after 51s (ID: i-2zedvfowy4m39sg1xdig)
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
Outputs:
ecs instance name = web
ecs private ip = 10.31.28.93
2.IaC结合共有云的使用
咱们能够将咱们的应用系统经过Packer打包成镜像存储到公有云。
结合Terraform 在公有云部署云主机时拉取自定义镜像文件生成云主机,并对公有云的资源进行统一的配置和管理。
经过结合Ansible对公有云的应用进行统一的维护和管理。
3.IaC在DevOps中的运用
咱们在整个软件开发生命周期的过程当中,其中基础环境的制备是很是重要的一环,也是从开发到测试再到生产部署最靠近底层的一环,咱们能够借助IaC既能知足基础架构的快速部署,又能灵活的使用私有云或公有云资源,充分利用公有云的优点为企业服务,同时下降企业成本投入,作到真正的按需付费。
4.基础平台代码化的优点
将基础结构部署到多个云
Terraform适用于多云方案,将相相似的基础结构部署到阿里云、其余云提供商或者本地数据中心。开发人员可以使用相同的工具和类似的配置文件同时管理不一样云提供商的资源。
自动化管理基础结构
Terraform可以建立配置文件的模板,以可重复、可预测的方式定义、预配和配置ECS资源,减小因人为因素致使的部署和管理错误。可以屡次部署同一模板,建立相同的开发、测试和生产环境。
基础架构即代码(Infrastructure as Code)
能够用代码来管理维护资源。容许保存基础设施状态,从而使您可以跟踪对系统(基础设施即代码)中不一样组件所作的更改,并与其余人共享这些配置 。
下降开发成本
能够经过按需建立开发和部署环境来下降成本,让企业真正作到按需付费。
资料来源:Forrester调查报告、财经网、云有料、博客园、阿里云
关于做者:逍遥,普元架构师,擅长虚拟化,云计算,DevOps;助力金融行业用户的个性化DevOps方案落地;专一云计算领域,为企业的上云之路保驾护航。
关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。长按二维码关注!web