背景:
CloudIaC 是一个开源基础架构自动化平台,它可以将Terraform及其他框架下的 deployment 集中到一个协作区,以方便你的整个团队使用。同时CloudIaC支持动态环境,策略合规检测,用户自助式UI 界面等功能。当您考虑使用Terraform 等低代码开发工具去实现多云资源的管控的时候,那么CloudIaC 不失为一个最佳解决方案。
基础设计架构:
以上为CloudIaC的一个服务基础架构,整体可以划分为 web,portal,runner, mysql, consul 五个组件,分别用来支持前端页面,后端API服务以及最后的 terraform 部署任务。其中portal和runner 中间都是使用restful API基于http 协议之间的通信,每个组件都可单独解耦去对外提供服务。各个组件也可以单独拆开使用docker 去进行单独部署。具体部署的方式请参考文档 [容器化部署],[手动部署]。那么在本篇文章当中将不再复述介绍CloudIaC的详细功能,在官方的文档上面已经介绍的非常清楚 。
下面将为大家提供两个基于CloudIaC的部署最佳实践。
案例实战: 使用CloudIaC 来部署一台阿里云ECS云服务器
1.创建服务
首先我们先通过上述的[容器化部署]或[手动部署]的方式,在本地部署一套CloudIaC服务。如果看过文档后如果觉得配置有些繁琐,那么在这里提供了基于阿里云ecs 一键部署CloudIaC 服务的方式 (该服务会在阿里云公有云服务创建收费资源,请根据自己实际情况去使用,测试完毕记得销毁):
1.下载代码
git clone https://github.com/xuxiaoahang2018/cloudiac-docker-deploy.git
2. mac 安装terraform (已安装可跳过, 如果没有brew 可百度安装下brew)
(如果不是mac系统请参考官方文档选择特定版本安装 https://www.terraform.io/downloads.html)
brew install terraform
### 3. 配置阿里云服务ak,region等信息,这里ak 请输入自己的阿里云ak
export ALICLOUD_ACCESS_KEY=LT*************b
export ALICLOUD_SECRET_KEY=sT*****************Ww
export ALICLOUD_REGION=cn-beijing
### 3. 进入到cloudiac-docker-deploy代码目录下运行命令
terraform init
terraform apply -auto-approve
以上就当命令运行结束后就会在阿里云k8s部署一套CloudIaC出来,我们按照以上命令行输出的公网ip 直接访问80端口即可访问。
4.部署成功后登陆CloudIac页面,提示输出账号密码,这里我们为了方便初学者使用,在配置里面写入了固定值
用户名: admin@example.com
密码: EvanTest#123
如下图: 经过一段时间的创建后(10分钟左右), 我们基于阿里云ecs 搭建的可以公网访问的CloudIaC服务就可以访问了,下面我们在浏览器输入 123.56.108.100:80 (这里请使用自己创建出来的公网ip)
2.创建组织/项目/用户
- 首先访问我们的首页,输入用户名admin@example.com 密码EvanTest#123 ,
- 登陆进来以后右上角会有帮助文档,里面详细描述了各个功能的具体用法,有需要的同学可以点击帮助文档来进行进一步的学习,下面我们先创建一个组织。
3.点击右上角的设置可以创建组织,在CloudIaC 中,可以创建多个组织,每个组织可以创建多个项目,各个组织下面所创建的云模版和项目都是基于组织去隔离的。
- 此时我们已经创建完成了一个组织,接下来我们来创建一个云模版 ,这里我们先介绍一下什么是云模版:
上述是官方的介绍,通俗点解释,就是每个terraform.tf的代码仓库,这个仓库存储的terraform.tf 就是你需要去创建的资源,大家可以使用阿里云/腾讯云/华为云 等云厂商官方封装的module 去创建所需要的资源,例如 阿里云k8smodule 等,当然也可以使用自己写的,只要上传到 github/gitea/gitlab 等代码托管仓库即可通过CloudIaC去使用。 - 首先我们点击设定,选择vcs ,这里vcs 的就是代码仓库托管的地址,我们在这里可以配置我们代码仓库托管的地址,我们以GitHub 为例。这里的token 我们需要去配置一个github 的token, 不会同学可以自行百度一下,也可以参考这篇文章github配置token。
- 当配置好 VCS 地址以后,我们可以来创建一个云模版,云模版的代码我们提前放到了 阿里云云模版demo,
在下面的terraform版本选择中,如果没有特殊要求我们选择自动匹配即可。自动匹配功能会去自动查找代码库中的 versions.tf 文件中配置的版本,如未配置,则会使用我们默认的0.14.11 版本去执行任务。
7.创建项目,当云模版创建完成以后,需要归纳到项目下面,我们点击创建项目后,并将新创建的云模版划归到该项目下,到目前为止,我们的准备工作已经完成。
3.创建环境,通过云模版部署资源
首先我们点击部署新环境,这里出现我们刚刚创建的云模版,所有的环境都是基于云模版的,这里可以打一个比方,云模版和环境的关系就像 docker 的镜像和容器一样。
请注意,这里因为我们要部署阿里云的服务器,云模版需要传入阿里云的ak/sk 等信息去创建服务,所以我们这里要在环境变量里面传入阿里云ak/sk 两个参数值。
之后我们点击Plan计划 , 就可以在控制台预览我们此次将要部署的所有资源。
通过控制台的部署日志我们看到,此次环境部署,将有5个资源会被部署出来,并且会导出ecs 的公网ip , 接下来我们点击执行部署,该资源就会在阿里云中创建出来。
注意这里创建真实的资源需要管理员去审批通过后才会真实的创建:
如图所示,这时候我们已经创建了一个活跃的环境:
此时我们可以到阿里云控制台看到云服务器以及相关的vpc等已经创建成功:
至此我们已经完成了资源的创建。此时该资源会以一个活跃 的状态存储到环境中。
4. 删除活跃环境(销毁资源)
CloudIaC 平台特性之一就是可以基于平台去管理所有部署的公有云/私有云资源,例如现在有一些公司在服务测试的时候,需要申请上百台机器资源进行测试,那么等测试结束的时候进行统一的销毁和处理,那么CloudIaC 就非常适合这种规模化资源的申请与释放。并且一切都是基于代码去操作,不会出现配置漂移的情景。
点击进去以后右上角的销毁资源 按钮,之后便会发起销毁作业,会销毁我们刚才在阿里云上申请的ecs机器,
下图为销毁作业执行成功日志。
写在最后
本篇文章只是简单介绍了CloudIaC 的基础用法,CloudIaC 作为一个开源项目,希望可以推广基础设施即代码的工作理念,其中CloudIaC 平台还有合规检测,多云部署等更多的功能,如果各位developer 感兴趣的话,非常欢迎大家更加深入的使用,以及向我们的项目提交code, 每一个merge 的pr,您的名字将会被展示在我们项目成员里面。
后续我们将会更新更多的最佳实践文章,如何多云部署,如果跨公有私有云部署,以及一些常见工具例如Rancher 等通用工具通过 CloudIaC 一键部署,以及企业上云的样本间最佳实践,请多多关注我们。
如何找到我们
欢迎各位关注CloudIaC 开源项目的同学来交流,钉钉群:34576517