前言:
CloudIaC 是基于基础设施即代码构建的云环境自动化管理平台。 CloudIaC 将易于使用的界面与强大的治理工具相结合,让您可以快速轻松的在云中部署和管理环境。其中结合了开源工具Terraform的强大功能,是一个贯彻 IAC(基础设施即代码)的开源项目。 目前正在快速的版本迭代当中,那么随着v0.8版本的更新,CloudIaC 平台也推出了配置漂移检测这样一个非常有特色的功能,那么接下来本篇文章主要是介绍 v0.8 漂移检测功能,关于CloudIaC 项目的其他相关文章,大家感兴趣的也可以移步以下链接:
环境搭建
- CloudIaC 官方文档中提供了非常多的部署方式,包括本地部署,容器部署,以及k8s部署等等,具体官方的部署方式我们可以通过上述的 CloudIaC快速入门文档 中找到具体的介绍,这里我们使用对新手比较友好,最简单的使用terraform 一键部署的方式:
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 4. 进入到cloudiac-docker-deploy代码目录下运行命令 terraform init terraform apply -auto-approve 以上就当命令运行结束后就会在阿里云ecs服务器上部署一套CloudIaC出来,我们按照以上命令行输出的公网ip 直接访问80端口即可访问。 5. 部署成功后登陆CloudIac页面,提示输出账号密码,这里我们为了方便初学者使用,在配置里面写入了固定值 用户名: admin@example.com 密码: EvanTest#123 以上步骤均可在 使用 CloudIaC 使 terraform 的代码部署更容易 看到,这里我们就不介绍基础的入门步骤了,当环境创建好以后,我们来看一下CloudIaC 提供的配置漂移检测功能。
配置漂移概念
在服务开发的过程中,我们经常可能会听到或者遇到如下的一种情况: "我在测试环境做了一个修改,但是忘记在生产服务器上也做这样的改动"。在排查bug,或者处理线上问题时经常会出现这样的场景如上,当机器配置环境发生改变,导致程序和预期结果不符,我们可以简称为配置漂移。在工作当中,这种情景应该非常常见,现在大多数的程序员在工作开发流程可能如下图:
如图上,目前很多程序采用的是容器化部署到服务器中,保证开发/测试环境的一致性,但是在实际开发过程中,对测试环境可能会进行一些列的修改和调试,最后导致服务器配置出现漂移。那么为了保持多台服务器的配置一致性,一般有以下几种方法,一种是不允许非系统管理员对服务器进行操作,二是"凤凰服务器",定期按照基础配置去重启机器或服务。
CloudIaC 提供了第三种方式 : 基础设施即代码(IAC) 通过把基础设置和服务通过低代码(terraform hcl)配置的方式去管控,定时检测服务端配置和配置文件(terraform tf.file)异同,对发生偏移的服务进行通知或直接进行纠偏。
实现原理
CloudIaC 偏移检测功能本质使用的是terraform 工具的terraform plan
功能,通过用户配置的定时任务表达式,去定时执行 terraform plan
命令检测服务端和配置模版是否出现了偏差,当发现出现了配置漂移的情景时候,会根据用户的配置执行自动纠偏 terraform apply
重新订正偏移的环境配置,或者保持漂移信息,等待用户进行处理。
实现原理如下图:
如图上所示,每次根据定时配置去执行偏移检测任务时候,会把任务的信息保存到环境历史记录里面,我们可以通过历史记录查看部署的应用出现了多少次偏移,以及是否进行了自动纠偏。
案例实战
下面我们实际操作来给大家演示一下如何在CloudIaC(version >= 0.8)中去配置使用漂移检测功能。首先我们需要创建一个可用的环境,这里我们通过云模版(也可以使用自己封装的terraform module)创建了一台阿里云的Ecs服务器。
如图所示,在创建的时候,我们在 环境 >> 高级设置 >> 合规 里面通过勾选 漂移检测,并且填入定时任务表达式,这时候,我们通过CloudIaC 部署的环境就会开始漂移检测任务。
此时我们先看一下我们环境部署成功后,我们环境的详情,可以在资源里面看到具体资源创建:
同时此刻我们登陆阿里云的控制台,可以看到创建出来的ecs云服务器详情,
此刻,我们将这台ecs 的描述信息直接在控制台上进行修改:
如上,我们手动使我们的环境进行了改动,这样原服务器模版里面的配置和我们实际配置的参数已经出现了偏差,那么这种情况就属于配置漂移,因为我们在CloudIaC上配置了漂移检测发现服务,定时2分钟去巡检一下服务端和本次配置文件的差异,现在我们可以在CloudIaC上看到已经检测到了漂移信息:
这时候我们点进资源详情里面,看到资源图标变黄的,就是该资源发生了漂移配置,点击图标,我们可以在右侧弹出框里面看到详细的漂移详情:
instance_name = "yunji_iac_upadte" -> "tf_ecs_test"
通过详情可以了解到是ecs 资源名称进行了改变。如此我们便可以监控资源是否发生漂移。还可以通过配置通知邮箱来将具体的漂移信息发送到配置的邮箱里面。
漂移自动恢复
以上介绍了CloudIaC如何去检测到配置漂移,以及查看方式。那么假如我们希望服务端和配置端永远保持一下,那么我们可以勾选 自动纠正漂移 ,该模式会在CloudIaC 服务发现其部署的环境出现漂移的情况下,对出现漂移的资源进行纠正,使服务端永远和本地配置保持一致。
该模式请慎重使用,因为该模式使用需要预先勾选自动审批按钮,请合理使用该功能,避免出现预期外的情况。
此时,我们在资源部署历史里面可以看到, 当我们扫描到漂移检测时候,因为勾选了自动纠正漂移模式,CloudIaC 自动去发起了一个apply 部署任务,将漂移信息进行了纠正,此时我们在看阿里云控制台:
实例ecs的名称已经被自动变更回来。如上我们本期的关于CloudIaC 漂移检测的功能已经简单介绍完成,我们的开源项目地址: https://github.com/idcos/cloudiac 欢迎大家一起参与共建。
联系我们:
钉钉群: 34576517