V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ly879
V2EX  ›  问与答

基础设施即代码(IaC)中的配置是指什么?

  •  
  •   ly879 · 123 天前 · 838 次点击
    这是一个创建于 123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景

    随着软件复杂化,仅仅管理软件自身已不能满足软件开发需求,对基础设施的管理愈发受重视。IaC 应运而生,其核心思想是将计算设施当作代码来管理,这样可以迁移在软件上的一些管理经验到基础设施上。

    困惑

    1. IaC 的中重要一步是编写基础设施的配置,请问这里的配置具体指什么?我理解的配置对可配置软件而言的,如 Chrome 是可配置软件,允许用户对“下载位置”进行设置,其中“下载位置”是配置选项。基础设置中也有选项概念吗?
    2. IaC 通过 Puppet 、Chef 等软件配置管理( SCM )工具来编写和管理配置,那么 IaC 与 SCM 是什么关系呢?查了下 SCM 最早起源于上世纪 70 年代,是随软件危机而生的,其中 CM 这个概念也是从其他领域舶来。但 IaC 是近几年出现的概念,通常与 DevOps 近似。是否可以理解 IaC 也是在践行 SCM 这一工程任务?
    14 条回复    2022-05-24 17:43:55 +08:00
    adoal
        1
    adoal  
       123 天前
    “基础设置中也有选项概念吗?”那反问一句,你理解的基础设施是什么呢?
    最基础的虚拟机、存储、网络、安全策略显然都是有配置选项的。往上一层,关系数据库、键值数据库、缓存、负载均衡也都是有配置选项的。
    fire2y
        2
    fire2y  
       123 天前
    我的理解大概就是把创建资源用代码实现,所以就有 terraform 这种
    Davic1
        3
    Davic1  
       123 天前
    基础设施(Infrastructure) 大多指网络(VPC 安全组) 虚拟机(EC2) 以及云提供商提供的一切资源.(IAM RDS 等等)

    通常使用一个云提供商的这些资源,是在 Console 上(Web 界面)用鼠标点点点, 当你点的太多次就会觉得很乏味, 自然而然就会想要用代码来自动化这些事情.

    云提供商也明白用户会有这些需求, 所以会有 API 接口, 会提供账号的 AK/SK(Access Key Secret Key)让你通过有权限访问这些资源. 会有相应的 SDK 让你去使用. 你要做的就是写代码. 过程中必然会涉及 VPC 怎么划分, 安全组开哪些端口, EC2 用什么规格...

    久而久之就会发现, 用代码来调用开通这个动作其实大同小异. 花心思更多的是在设计和资源选取上. Terrafrom 就是帮你做了开通动作这件事情, 所以你要做的就是按照 Terrafrom 规定的格式去填写你想要开通的资源配置情况.

    IaC 是一项一劳永逸的工作, 虽然一开始真的很"劳"

    上面只是涉及到单个云厂商, 现实情况可能还会涉及到多云, 甚至自己的 IDC 机房.

    当然自己可以写代码来处理这些情况, 但是 Terrafrom 已经帮你做好了基础工作(这时候就要抛出一个 Why not 了.)

    OP 想要了解的配置, 指的是广泛意义上的应用程序的配置. 针对不同的软件, 所指的配置是不同的.

    举例来说, 我要用 Ansible 做一些服务器优化的事情, 这时候配置就是 Ansible 的 Playbook, 我要开通新资源, 如果使用 Terrafrom 那么配置就是 Terrafrom 的配置文件(xxx.yaml 或者说 xxx.hcl)

    另外 Terrafrom 是可以结合 Ansible 一起使用的.

    (啊, HashiCrop 的官网 UI 设计的真漂亮)
    ly879
        4
    ly879  
    OP
       123 天前
    @adoal 老哥角度不错。我理解的基础设施是软件开发相关的软硬件组合。从这个意义上讲,某个与开发、部署、运维相关的软件也可以作为基础设施,从而使基础设施有了选项概念。对于网络、存储、防火墙这类应该是属于软硬件结合体,它们的选项可能属于软件部分,也可能属于硬件部分。但 IaC 中的配置也是这么具体到每个基础设施的选项吗?
    ly879
        5
    ly879  
    OP
       123 天前
    @Davic1 多谢,信息量有点大,我消化下。
    ly879
        6
    ly879  
    OP
       123 天前
    @Davic1 “举例来说, 我要用 Ansible 做一些服务器优化的事情, 这时候配置就是 Ansible 的 Playbook, 我要开通新资源, 如果使用 Terrafrom 那么配置就是 Terrafrom 的配置文件(xxx.yaml 或者说 xxx.hcl)”

    是否可以理解为:这里的配置本质上是用于执行自动化任务的操作指令,这些指令通过调用基础设施的 API 来实现。那么,和我理解的配置是用于控制某个实体(如软件)的特性,好像是不同的。除非这些 API 本质上就是通过操作,基础设施提供的用于控制特性的选项来实现。谢谢!
    Davic1
        7
    Davic1  
       122 天前
    "是否可以理解为:这里的配置本质上是用于执行自动化任务的操作指令"

    好像不太准确, 我觉得把配置理解为参数的集合就行.
    joesonw
        8
    joesonw  
       122 天前 via iPhone   ❤️ 1
    就是和代码一样有版本的概念,能做到有错快速回滚。
    ly879
        9
    ly879  
    OP
       122 天前
    @Davic1 多谢。回头我找个实际例子理解下,缺乏实际,仅空想太难了。
    Davic1
        10
    Davic1  
       122 天前   ❤️ 1
    @ly879 去看看 Terraform.
    CoooooolFrog
        11
    CoooooolFrog  
       122 天前   ❤️ 1
    个人理解:
    IaC 是把基础设施的管理通过代码和工程的方式来做,让运维部署的过程自动化,并且可控。
    配置可以简单理解为基础设施的部署脚本,再具体一点,k8s 的 yaml 就是这个配置。
    这样做的好处:
    1. 比如我们的服务目前部署在北京的某个机房,我们想要在上海新建一个机房,传统的方式是由运维来手工建站,装好各类基础设施,在使用 IaC 的情况下,可以将这个部署过程自动化,只需要完成 IaC 代码的编写,在任何机房、站点部署,可以通过一套 IaC 代码完成,整个流程不需要手工介入。
    2.让运维白屏化,可管控,比如某个基础设施升级,在之前整个流程是黑屏的,没有统一的防控手段,出现问题以后定位、修复都比较麻烦。现在通过 IaC ,基础设施以代码的形式管理起来了,那么一次基础设施的变更当然也等同于一次 Git Commit ,变更出现问题以后只需要回滚配置就可完成修复。
    L1shen
        12
    L1shen  
       122 天前   ❤️ 2
    还可以看看 pulumi
    Alliot
        13
    Alliot  
       76 天前
    IaC 把基础资源遵循工程管理的模式,以代码形式去描述与管理。
    通过代码形式管控资源,便于回溯与审计,再搭配自动化 apply 生效。

    比如我要创建一个资源,则只需要编写好相应资源的描述代码(或者说 copy 一份相同模式的资源的代码修改一部分配置),提交 PR ,通过 codereview 后直接 apply 生效。
    Alliot
        14
    Alliot  
       76 天前   ❤️ 1
    带来的已知的好处就是 一切操作皆可审计回溯,灾难来临也方便快速重建。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3389 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:23 · PVG 13:23 · LAX 22:23 · JFK 01:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.