乐趣区

关于云原生:云原生时代不可不知的基础设施即代码IaC

💡 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 我的项目分成了 专门提供模块的我的项目(左)与专门利用模块的我的项目(右)

实现了模块包装,在后续应用中,只须要指定指标与版本,即可援用整个封装好的模块。

退出移动版