“multi-cloud”即企业将多个应用部署在多个云平台上,比如阿里云、aws、azure、openstack或其他云平台。通过下面的模形我们可以看到企业选择multi-cloud的因素及应用部署策略,包括7个主要因素:云计算平台数据中心的访问速度/云服务的性能/可用性、云计算平台的成本、云计算平台的安全性、客户服务质量、本地化、云计算平台的提供商、以及企业自有的数据中心地点。
rightscale的调查数据显示目前有越来越多的企业选择multi-cloud模式(2015年58%, 2016年增长到71%)。
虽然越来越多的企业选择multi-cloud模式,但其也有很多挑战,例如各个云服务平台采用不同的技术、不同的用户操作界面、提供不同的云服务、不同的专业术语。即便是相同的服务(如云服务器),由于是来自多家云计算平台,其api的定义不同,sdk也不同,各自提供的小工具也不能适用于其他云平台。同时对于企业的运维人员要求也较高,运维人员要知道怎样构建各个云计算平台的基础设施,以及部署、运维、监控等,以及各个应用对于云计算平台的最佳选择。
本文章将讲述针对于multi-cloud模式的基础设施管理及应用部署的解决方案。
阿里云针对于 terraform provider的官方仓库地址:
<a href="https://github.com/alibaba/terraform-provider">https://github.com/alibaba/terraform-provider</a>
其中example包括云服务器ecs、负载均衡slb、安全组securitygroup、专有网络vpc、路由器vswitch、nat网关natgateway的模板,利用这些模板可以做资源的创建/更新/销毁的管理,如创建多台ecs后,再统一修改tag;或挂载、卸载slb的后端服务器等等。
terraform的命令比较简单,最重要的只需要记住4条命令
运行 terraform apply命令后会在本地生成 terraform.tfstate 文件,此文件做为更新、销毁资源的依据。
某企业的应用采用terraform+ansible的架构将其应用从openstack迁移至阿里云,只用了1.5天的时间,而使用传统的手工模式需要一周多的时间。
下面以创建云服务器ecs及磁盘,更新其数量,然后部署nginx为例详细讲解操作过程。
设置环境变量时,需要指向terraform所在的父目录,如:terraform的路径是"~/work/terraform_0.7.10",则指定环境变量时设定为export path=$path:~/work/terraform_0.7.10
下载[terraform-alicloud-provider](
编写云服务器ecs的模板
module "alicloud-ecs" {
source = "github.com/alibaba/terraform-provider/terraform/examples/alicloud-ecs"
count = "1"
count_format = "%03d"
role = "worker" //这个作用是打标签,此ecs的tag值将是role:worker
datacenter = "beijing"
ecs_type = "ecs.n1.small"
ecs_password = "alicloudtest1"
availability_zones = "cn-beijing-b"
security_group_id = "*" //这里输入securitygroupid
}
依次运行命令(注意一定要先修改security_group_id参数的值,指向真实的id):
terraform get //第一次连接时会有些慢
terraform plan //按照提示输入您的ak信息
terraform apply //按照提示输入您的ak信息
此时登录ecs控制台可以看到创建的云服务器。
修改第5步中的模板”count”参数,将其修改为2,再次运行:
terraform plan //可以看到变更的资源,即新增加一台ecs以及磁盘
terraform apply
此时登录ecs控制台可以看到又创建一台云服务器
编写ansible的playbook安装nginx,playbook如下:
hosts: instance
tasks:
name: install nginx
apt: pkg=nginx state=installed update_cache=true
notify:
handlers:
执行命令:
nginx即安装在以上2台ecs上,可以ssh登录ecs云服务器查看或修改nginx的配置。
如果想释放两台ecs及磁盘,执行 terraform destroy即可
至此创建ecs云服务器、修改数量、安装nginx完成。通过terraform+ansible的方式可以把基础资源的管理和应用部署分开,terraform的模板依照一致的模板形态实现对multi-cloud的基础设施管理,ansible的playbook可以被重复执行将应用部署在不同的云平台上。
阿里云会持续提供更多的与流行开源工具的集成为企业的云上部署及运维提供便利。