云原生时代,不可不知的基础设施即代码(IaC)

news2024/12/27 9:45:09

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

路由反射器、联邦

路由反射器 RFC4456 IBGP水平分割:路由器无法将从IBGP对等体学习到的路由信息传递给其他IBGP对等体。 IBGP水平分割解决了AS内部环路的问题,但是产生了新的问题----BGP路由在AS内部只能传递一跳,会造成lBGP路由无法被正常传递,造成通讯障碍。…

使用计算机视觉实战项目精通 OpenCV:6~8

原文:Mastering OpenCV with Practical Computer Vision Projects 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线…

Vue3PDF预览(vue3-pdf-app)

vue3-pdf-app 插件 可自定义设置以下属性: pdf地址(src),类型:string,必传,默认 预览容器宽度(width),类型:number | string,默认 …

数字化转型框架如何搭建?

根据GetSmarter对来自128个国家/地区的5808名专业人士进行关于数字化转型的调查,揭示了几个重要的发现。 首先是所有行业和工作角色对数字化转型的看法不同。它不仅仅专注于集成和利用新技术,例如机器学习(ML)、人工智能(AI)、大数据和自动化。它是关于…

云原生之在kubernetes集群下部署Mysql应用

云原生之在kubernetes集群下部署mysql应用 一、Mysql介绍二、kubernetes集群介绍1.k8s简介2.k8s架构图 三、本次实践介绍1.本次实践简介2.本次环境规划 三、检查本地k8s集群环境1.检查k8s各节点状态2.检查k8s版本3.检查k8s系统pod状态 四、编辑mysql.yaml文件五、创建mysql应用…

STM32G070 onchip移植FlashDB

一、Onchip Flash 特性 在STM32G070 的片内 Flash写入数据之前必须先对目标地址进行擦除后才能写入数据数据写入:G070 Flash 写入数据必须保证8字节对齐,一次写入双字数据64bit 8Byte数据读取:使用地址直接读取 二、移植FAL 1. 添加以下文…

全面详解Java多线程基础-2:线程的状态

相关阅读: 全面详解Java多线程基础-1:Thread类及其基本用法 操作系统里的进程,自身是有一个状态的。而Java的Thread类是对系统线程的封装,它把这里的“状态”又进一步精细化了。 理解线程状态,意义是能够让我们更好地…

当ChatGPT遇上StableDiffusion ChatGPT指导StableDiffusion绘画

ChatGPT指导StableDiffusion 前言开始使用场景1:繁华的街道场景2:桥上的女生 项目及教程地址,附GPT访问地址安装教程及安装包地址:点我下载开源项目:点我下载GPT访问地址,点我访问 前言 Stable Diffusion …

java下

双列集合的特点 双列集合一次需要存一对数据,分别为键和值键不能重复,值可以重复键和值是一一对应的,每一个键只能找到自己对应的值键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象” …

git及vs2019代码量统计的方法

git 在工程下打开git bash //替换username,查看个人代码量 git log --author"username" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", ad…

基于matlab之NR SSB 光束扫描仿真

一、前言 此示例说明如何在 5G NR 系统的发射器 (gNB) 和接收器 (UE) 端使用波束扫描。本示例使用同步信号块 (SSB) 说明了初始访问期间使用的一些波束管理程序。为了完成声束扫描,该示例使用了…

人工智能全球发展趋势、经济影响和未来挑战

人工智能(AI)作为一种新兴技术,正在引领世界经济和社会的变革。在过去几年中,全球范围内对人工智能的投资和研究持续增长,这使得人工智能成为了各行各业的关注焦点。本文将介绍人工智能的基础知识和应用场景&#xff0…

3个问题!验明GPT-4真身;基于GPT科研加速技巧汇总;Midjourney神仙教程;印象笔记有AI功能啦 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『GPT-4 验明真身的三个经典问题』快速区分 GPT-3.5 与 GPT-4,快来对答案 这里收集了几个免费使用 GPT-4 的工具&#xff…

LVDS为汽车应用提供可靠的视频接口

摘要:汽车视频应用中,降低视频干扰的途径是用数字信号替代模拟信号。最有效的视频传输方案是采用低电压差分信号(LVDS)接口,因为它具有较低的信号幅度(0.35V)和差分架构,可大大降低电磁辐射。 新型汽车电子信号格式变化最快的是视…

如何在 iPhone 上恢复永久删除的照片?

iPhone永久删除的照片是否永远消失了? 你想知道永久删除的照片在 iPhone 上放在哪里吗?通常情况,操作系统会将已删除照片的存储空间进行标记为准备好覆盖(还未实际删除)。iPhone 也是如此。 如果互联网连接良好&a…

从功能到外企测开,工作1年半拿下年薪30万的测开 offer,未来可期

说一下我的大致情况,女,2018年毕业于末流211计算机本科。后来待业两年,完全没有从事互联网方面的工作。去年来到北京,在小公司做了一年多功能测试。今年11月底跳槽到外企,开始了我钱多事少离家近,每周965的…

如何用ChatGPT做品牌项目的二手信息搜集?

该场景对应的关键词库(25个): 品牌案例、竞品、信息来源、项目分析、官方渠道、品类、品牌、节日节庆、明星、国家、奖项、代理商、项目名称、项目描述、品牌介绍、竞争情况、运营数据、财务信息、交易信息、法律问题、网络平台、行业人士、品…

线程池?我不懂?

为什么要使用线程池? 降低资源消耗。通过重复利用已创建的线程,降低线程创建和销毁造成的消耗提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行增加线程的可管理型。线程是稀缺资源,使用线程池可以进行统一分…

c++学习之c++对c的扩展1

目录 1.面向过程与面向对象的编程 2.面向对象编程的三大特点 3.c对c的扩展: 1.作用域运算符:: 2.命名空间 1.c命名空间(namespace) 2.命名空间的使用 1.在不同命名空间内可以创建相同的名称 2.命名空间只能在全…

Java基础——异常+IO流资源释放

异常 (1)什么是异常: 程序在编译/执行的过程中可能出现的问题注意:语法错误不属于异常 (2)为什么要学习异常: 异常一旦出现了,如果没有提前处理,程序就会退出JVM虚拟…