云原生时代,不可不知的基础设施即代码(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 项目分成了专门提供模块的项目(左)与专门应用模块的项目(右)

完成了模块包装,在后续使用中,只需要指定目标与版本,即可引用整个封装好的模块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12728.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu输入法问题汇总

Xfce4桌面环境输入法 Ubuntu20.04、ubuntu21.04中安装xfce4桌面环境,自带中文输入法; 原生xubuntu20.04中文输入法问题解决办法: 更新语言支持失败的话,终端键入:sudo apt-get install cmake qt5-default qtcreator…

Node【四】内置模块 【fs模块】

文章目录 🌟前言🌟fs模块🌟 使用fs模块🌟 异步编程和同步编程🌟 异步编程🌟 同步编程 🌟常用操作🌟 文件操作🌟 readFile异步读取文件🌟 readFileSync同步读取…

【智能电网】智能电网中针对DOS和FDIA的弹性分布式EMA(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

【C语言学习3——基本的C语言语法知识1】

C语言学习3——基本的C语言语法知识 主函数什么是主函数&#xff1f;写一个自己的函数主函数是整个C语言程序的入口要调用函数&#xff0c;必须先知道函数什么是变量&#xff1f; #include <stdio.h> int main() { printf("Hello World\n"); return 0; }相信你…

SpringMVC的入门案例

三层架构和mvc 三层架构&#xff1a; 我们的开发架构一般都是基于两种形式&#xff0c;一种是C/S 架构&#xff0c;也就是客户端/服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就是测览器服务器。在 avaEE开发中&#xff0c;几乎全都是基于 B/S 架构的开发。那么在 B/S…

Java语言数据类型与c语言数据类型的不同

目录 一、c语言数据类型 1.基本类型&#xff1a; 2.枚举类型&#xff1a; 3.空类型&#xff1a; 4.派生类型&#xff1a; 二、C语言编程需要注意的64位和32机器的区别 三、 不同之处 一、c语言数据类型 首先&#xff0c;先来整体介绍一下C语言的数据类型分类。 1.基…

创新,阿里首发微服务实施手册我粉了,原来微服务还可以这样玩

微服务 相信大家在网上会看到很多帖子把分布式跟微服务放在一起讨论。确实&#xff0c;微服务就是一种分布式架构的设计方法。但是&#xff0c;在微服务概念还没有出现之前&#xff0c;分布式这个概念并不能引起人们的强烈关注&#xff0c;如果说自己擅长分布式架构设计&#…

使用SeaFile搭建私有云盘并公网访问【cpolar内网穿透】

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 Cpolar下载安装3.2 Cpolar的注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 现在我们身边的只能设备越来越多&#xff…

面试官:String s = new String(“xyz“) 创建了几个对象?

这个问题相信每个学习 java 的同学都不陌生&#xff0c;作为一个经典的面试题&#xff0c;到现在工作这么多年了我真是认为挺操蛋的一个问题&#xff0c;在网上到现在你仍然可以看见很多讨论这个问题的人&#xff0c;其中不乏工作很多年的人都有争论&#xff0c;我认为还是有必…

一起读源码 —— Fastjson 的核心方法及其实现原理

源码介绍 Fastjson 是阿里巴巴开源的一个 Java 工具库&#xff0c;它常常被用来完成 Java 的对象与 JSON 格式的字符串的相互转化。 此文读的源码是撰写此文时 Fastjson 的最新的发布版本&#xff0c;即 1.2.83 下载源码 请前去 github 找到 release 最新版下载后解压&…

贾俊平《统计学》第七章知识点总结及课后习题答案

一.考点归纳 参数估计的基本原理 1置信区间 &#xff08;1&#xff09;置信水平为95%的置信区间的含义&#xff1a;用某种方法构造的所有区间中有95%的区间包含总体参数的真值。&#xff08;2&#xff09;置信度愈高&#xff08;即估计的可靠性愈高&#xff09;&#xff0c;则…

【PMP】项目各阶段分别运用什么工具与技术汇总

做项目管理是一条漫漫长路&#xff0c;所有的本事&#xff0c;都是靠一个个项目&#xff0c;一点点积累而来的&#xff0c;并不存在“迅速上手”的方法论。一名普通项目经理的成长&#xff0c;都要经过一定时间的修炼。 数据收集 头脑风暴 在短时间内获得大量创意&#xff0…

SSM整合————单表操作基础版

一、创建数据库&#xff1a; 1. 创建一个 web 项目&#xff0c;并部署到 tomcat 服务器中测试项目 是否能够正常加载并访问首页。 2. 完善项目的结构并导入 SSM 相关的jar包 3.创建SSM框架对应的配置文件 springMVC配置文件&#xff1a;1.扫描controller&#xff1b;2.配置视图…

车企外卷:一个关于智能手机的“围城故事”

从2016年达到顶峰开始&#xff0c;全球智能手机出货量逐年下行&#xff0c;手机市场进入红海竞争逐渐成为了各界的共识。此后全球疫情与经济疲软的影响也进一步在手机市场施压&#xff0c;很多媒体认为手机产业距离“至暗时刻”已经不远。 而在去年&#xff0c;新增变数&#x…

奇葩营销之看各品牌如何玩转“营销疯学”

相信有很多人和我一样&#xff0c;最近的快乐都来自于《黑暗荣耀2》。 令人奇怪的是&#xff0c;但比起故事的主线&#xff0c;剧中妍珍等配角的”发疯”片段却成为了网友造梗的来源。 “妍珍疯驴子”“妍珍呐””“黑暗荣耀演我每天精神状态”等。让这部剧话题热度持续…

主题切换实现(vue-less)

介绍 本文适合黑白切换或者主题样式偏少的&#xff08;建议&#xff1a;2-10种&#xff09;&#xff1b;主题越多&#xff0c;样式会越多。理论上无限套。本文适合已经写好了一套主题&#xff0c;然后需求增加第二套或者多套主题&#xff08;最好小于10套&#xff0c;当然也可…

8、ThingsBoard使用docker compose集群部署的问题以及如何解决问题

1、问题回顾 接着上一节继续讲解,上一节我们把整个服务全部都运行起来了,但是访问页面报错,最后查看的问题是前端的容易里面报错: 然后执行脚本删除所有的容器 2、问题分析 当遇到这个问题的时候,我当时真的不知道如何去解决,然后我又尝试使用官方的镜像来部署,发现官…

ASM字节码处理工具原理及实践(一)

1. ASM简介 我们知道程序的分析。生成和转换是很有用的技术&#xff0c;可以用于很多场景。ASM作为一个Java字节码处理工具&#xff0c;它被设计用于处理已编译的Java类。ASM不是生成和转变已编译的Java类的唯一工具&#xff0c;但它是最新且最有效的工具之一。特点是体积小&a…

wsl的图像化实现,在wsl中启动浏览器

最近在学习wsl&#xff0c;原本我看以前的教程说wsl和vmware的区别有一点就是&#xff0c;wsl只能使用命令行&#xff0c;而vmware可以实现图像化&#xff0c;结果我在 microsoft 官方发现现在的wsl 2已经实现了 GUI 界面&#xff0c;所以就来记录一下吧。 wsl 的 GUI 实现 首…

web后端-请求响应

概述 我们之前在Spring写的 Java类&#xff0c;因为没有继承任何的接口 所以tomcat其实是不识别的&#xff0c;也不能直接运行 但是tomcat识别JavaEE的一项规范-Servlet,因为tomcat就相当于一个Servlet容器 SpringBoot底层提供了一个DisPatcherServlet类(实现了servlet接口)…