💡 IaC 是 DevOps 的必要撑持。
近日,在极狐 TechTalk 直播上,极狐(GitLab) 高级网站可靠性工程师 SRE 戚加欣,从 SRE 视角登程,与大家分享了 IaC 基础知识、工具和办法和基于极狐 GitLab 的具体实践经验。
以下内容整顿自本次分享,你也能够点击👉观看视频回放。enjoy~
何为 IaC?
基于 Thoughtworks 公司云实际领导人 Kief Morris 在《基础设施即代码》一书中对基础设施即代码的定义:
基础设施即代码 (Infrastructure-as-Code,IaC) 指的是 通过代码而不是手动流程,来治理和配置基础设施 。它把基础设施、工具和服务以及对基础设施的治理自身作为一个软件系统,驳回 软件工程实际 (SRE),以可反复的、牢靠的办法来设计、扭转和部署软件环境,以申明性的形式取代手工操作。
IaC 倒退至今,从概念到落地,从小众到遍及,随之诞生了许多 IaC 风行工具(如下图),帮忙 DevOps 团队以最佳形式自动化基础设施部署和治理。
为什么 IaC 很重要?
大数据和云计算时代下的新挑战
SRE 的职责之一是为业务提供根底资源,保护各种服务的性能和稳定性。
在传统工作流程中,业务方向运维团队提供一个资源需要工单,运维团队依据需要工单,手动配置软硬件根底资源给业务方。在企业规模小、业务变动小的前提下,可能一台虚拟机就能够撑持公司的所有业务,该形式能够根本满足需要。
随着大数据和云计算时代的到来,依附分布式服务器构建起来的“云”集群带来了弱小的计算能力;资源的动静伸缩、高扩展性也使得集群的架构变得更加简单多元,给 SRE 的工作带来了新的挑战:
➤ 日益增长的需要
企业信息化和数字化水平一直晋升,IT 基础设施规模和复杂度也在一直减少。
➤ 手动操作瓶颈
大规模简单集群给手动操作带来瓶颈,通过人力运维必然是不可取的,依附自动化工具进行治理成为必然。
➤ 脱离的反馈
长期以来,开发者和运维人员的合作形式是决裂的,沟通反馈环是互相脱离的,导致生产效率低、故障排除慢。
➤ 手动操作谬误
手动操作不可避免地会有失误,规模扩充导致更大的人为失误。
IaC 帮忙企业降本增效,并实现 GitOps 指标
GitOps 是一个软件开发框架,它使组织可能继续交付软件应用程序,同时应用 Git 作为繁多事实起源无效地治理 IT 基础设施。
GitOps 是 DevOps 的一个子集,它联合了 IaC 和 DevOps 最佳实际,创立了一个操作模型,用于治理架构并依据 Git 存储库的状态即时复制零碎的云基础架构。
IaC 帮助企业以多种形式治理其 IT 基础设施需要,基于以下次要劣势,帮忙企业降本增效 ;同时, 联合 Git 的代码治理与版本控制,和 CI/CD 自动化,能够实现更高一级的 GitOps 指标。
➤ 自动化
通过自动化放慢基础设施配置速度,并借助可见性劣势帮忙企业内的其余团队晋升工作速度、强化工作效率。
➤ 申明式
以申明式形式,间接指定定基础设施的现实状态,如想要的资源、必须的属性等,而不是过程。IaC 工具会主动配置现实的基础设施,可屡次执行且后果雷同,无需人为干涉。
➤ 可重用性
可轻松应用同一份代码屡次创立和销毁多个资源。
➤ 可验证
可集成单元测试或端到端测试,验证现实状态与以后状态的基础设施的差别。如果后果与预期不统一,就对代码进行迭代,直到后果通过测试并与预期统一。
➤ 进步一致性
基于代码化实现环境创立的繁多可信起源,使得每次均能提供雷同环境,实现基础设施配置的全面标准化,打消配置漂移。
「不可变基础设施」时代降临
- 可变基础设施:指在生产中扭转基础设施组件,而整个服务或利用持续失常运行的做法。其益处是 在基础设施中有更多的一致性和可靠性,以及更简略更可预测的部署过程。它能够缓解或齐全避免可变基础设施中常见的问题。
- 不可变基础设施:指基础设施和利用联合在一起,创立成一个残缺的服务或应用程序。如果任何组件须要扭转,它不会被扭转或重新配置,它们都被更新并无效地重新部署在一个实例中。一个新的迭代被组装、测试、验证和启动,而旧的迭代则被进行,其资源被开释以从新应用。
不可变的基础设施曾经取得了青眼,特地是在云和微服务环境中,这些环境具备高度的可扩展性,波及更多相互依赖的组件和服务。与打补丁和重新配置单个基础设施组件相比,从新公布成套的不可变的服务和组件更有效率和成果。
应用 IaC 能够实现 「不可变基础设施」 这种新的运维逻辑。以数据库降级为例:
在不可变基础设施逻辑下,不是间接在原有数据库环境上进行降级,而是通过打包软件,打包到虚拟机镜像当中,通过一一替换原有集群中的镜像的形式,将服务逐渐降级。
IaC 工具有哪些?
目前,市面上有很多风行的 IaC 工具,它们具备一些共性:
- 应用 Yaml、Json、Jsonnet、HCL2 等 DSL 语言代码化定义;
- 以申明式编程模式为主;
- 齐全开源或凋谢根本组件模式,并有额定的商业服务帮忙企业从产品中提取额定价值的性能;
- 反对多云 / 混合云模式,无云厂商绑定。
上述工具在解决不同问题上,各有千秋:
- 创立 / 扭转 / 销毁基础设施资源,如计算、存储、网络组件或平台服务,如数据库、Kubernetes 集群等;
- 在基础设施之上部署 / 更新应用程序;
- 管理应用程序所应用的配置。
那么如何抉择 IaC 工具呢?须要依据理论状况参考以下维度进行抉择:
- 应用哪种操作系统来构建云资源:Windows 或 Linux?
- 在应用哪个云供应商?AWS、Azure 和谷歌云还是国内云厂商。
- 将应用哪种编程语言?Yaml、Json、Python、Golang?
同时,各个工具在应用领域范畴上也有所不同,如下图:
极狐 GitLab 上的 IaC 实际
极狐 GitLab 也提供了 7 大性能反对 IaC,包含:
代码治理及版本控制
IaC 自身是代码。极狐 GitLab 作为一体化平安 DevOps 平台,治理代码是基本功能,非常善于。
极狐 GitLab SRE 团队行将 IaC 全副托管于极狐 GitLab 上。
CI/CD
极狐 GitLab 提供基于 Terraform 的 IaC 流水线模板,反对以 Pipeline as Code 的形式援用,无需任何额定配置即可实现 IaC 自动化流水线的创立和运行,升高用户的应用门槛,疾速撑持用户实现基础设施的代码化和自动化。
合并申请 (MR)
IaC 使得用户可能解脱传统基础设施变更中简单和沉重的流程,通过采纳软件研发中最经典的代码检视(Code Review)实际,从代码维度对基础架构的更改进行验证、审核与合作,确保根底环境的服务连续性。
极狐 GitLab 为此提供了基于合并申请 (MR) 的解决方案,通过在合并申请页面中可视化 Terraform 的代码更改、测试后果和预期成果,大幅晋升根底变更治理提交和审批的合作效率。
基础设施注册表
有了极狐 GitLab 基础设施注册核心,你能够将极狐 GitLab 我的项目作为基础设施包的公有注册核心,用极狐 GitLab CI/CD 创立和公布包,而后从其余公有我的项目中生产。
基础设施即代码(IaC)扫描
基础设施即代码(IaC)扫描能够扫描你的 IaC 配置文件的已知破绽。
目前,IaC 扫描反对 Terraform、Ansible、AWS CloudFormation 和 Kubernetes 的配置文件。
治理 Terraform 状态
代码与理论资源之间还有状态文件的映射,进行比照即可得悉指标状态与理论状态的差距。极狐 GitLab 提供状态文件托管,确保版本统一。
极狐 GitLab SaaS 基础设施架构
极狐 GitLab SaaS 的基础设施架构,目前曾经实现了 100% 的 IaC 治理,根本没有手动操作。IaC 工具链路关系如下图所示:
极狐 GitLab SaaS IaC 开发流程与其余软件开发流程统一,如下图所示:
- 当产生需要时,创立 Issue,同时创立 Merge Request(后续代码变更在此 Merge Request 上进行),提交 commit 进行相干批改;
- 一旦有代码提交,就会触发 CI/CD,实现从构建、测试、平安扫描到部署整个流程,从而实现 Issue 和 Merge Request 的一一关联。
IaC 最佳实际
IaC 实际,同样遵循代码开发最佳实际,包含:
- 模块化、高内聚、低耦合、形象;
- 分层,比方对一些服务提供模块,对另一些服务应用模块,对代码进行隔离;
- 自动测试少不了,确保线上代码都是通过 Staging 环境验证 de;
- 代码可读性,便于 Review 和合作;
- Code Review;
- CI/CD。
以模块化与分层为例,如下图,极狐 GitLab Terraform 我的项目分成了 专门提供模块的我的项目(左)与专门利用模块的我的项目(右)。
实现了模块包装,在后续应用中,只须要指定指标与版本,即可援用整个封装好的模块。