系列文章

Terraform 系列文章

前言

聊到 Terraform, 必然绕不开 IaC 这个概念?那么,什么是 IaC?

基本概念

基础架构即代码 (Infrastructure as Code, IaC) 是指通过代码而不是手动流程/控制台点击来管理和配置基础架构。

这里有 2 个关键词:

  • Infrastructure
  • Code

Infrastructure 是被管理对象,在这里,主要是指公有云(还有私有云、混合云等).

Code 是管理方式,即像管理代码一样管理公有云资源。那么管理代码最重要的部分: 版本管理是绕不开的。

使用 IaC,创建的配置文件包含了基础设施的 spec,这使得编辑和分发配置变得更加容易。IaC 还确保每次都提供相同的环境、相同的资源、相同的配置。通过编辑和记录配置的 spec,IaC 有助于避免未记录的、临时的配置更改(当然,前提是所有人都使用 IaC,而不是还会有人在控制台点击修改导致配置漂移)。

版本控制是 IaC 的重要组成部分,配置文件应该像任何其他软件源代码文件一样受到源代码控制。

另外,随着公有云的发展,公有云的标准化的 API 也使得将基础架构组件模块化 (Terraform 里叫做 modules) 成为可能,使用者可以像搭积木一样组合这些基础的组件。比如:在 AWS 上建个静态博客,就可以组合以下组件:

  • Route53
  • CloudFront
  • S3

IaC 的两种实现方式

有两种实现 IaC 的方法:声明式命令式

声明式方法定义了系统的理想状态,包括需要的资源以及它们应该具有的任何属性,IaC 工具将自动配置它。

Terraform 就是基于 IaC 声明式的理念。在 Terraform 流行之前,另一个将声明式发扬光大的当然是:Kubernetes!

声明式方法还保留系统对象当前状态的列表,这使得拆除基础架构更易于管理。

相反,命令式方法定义了实现所需配置所需的特定命令,然后需要以正确的顺序执行这些命令。

典型的就是 Ansible.

IaC 工具通常能够在两种方法中运行,但往往更喜欢一种方法而不是另一种方法。

如 Terraform, 它更喜欢声明式的方法,但是它的 Provider、Modules、函数中仍然残留不少命令式的方法, 如:local-exec

IaC 的好处

IaC(特别是声明式的)是随着公有云而发展起来的。

置备基础设施历来是一个耗时且成本高昂的手动过程。现在基础设施管理已经从数据中心的物理硬件、虚拟化转移到容器和云计算。

借助云计算,基础设施组件的数量不断增加,每天都有更多的应用程序发布到生产环境中,并且基础设施需要能够频繁地启动、扩展和关闭。如果没有适当的 IaC 实践,管理当今基础设施的规模会变得越来越困难。

IaC 可以帮助您的组织管理 IT 基础设施需求,同时提高一致性并减少错误和手动配置。

这, 就是 IaC 的必要性。

好处

  • 降低成本
  • 提高部署速度
  • 减少(手动配置)错误
  • 提高基础设施一致性
  • 消除配置漂移

Terraform 是 IaC 领域事实上的领导者

毋庸置疑的,Terraform 是 IaC 领域事实上的领导者。

所有主流公有云,私有云,虚拟化,K8s, 容器都有在维护对应的 Terraform Provider 和 Modules.

IaC 工具

IaC 工具有哪些?目前主流的有:

声明式:

命令式:

为什么近期流行的都是声明式的 IaC?

我觉得主要有以下原因:

  1. Kubernetes 的标杆作用
  2. 公有云云资源以及 API 的标准化、规模化
  3. 具体到云主机,cloud-init、packer(制作云镜像越来越方便)、不可变基础设施也是原因之一。

为什么 IaC 对 DevOps 很重要?

IaC 是实施 DevOps 实践和 CI/CD 的重要组成部分。DevOps 和 CI/CD 主要是应用和组件层面的, 而 IaC 消除了开发人员的大部分配置工作,开发人员可以执行脚本让他们的基础设施准备就绪。

这样一来,应用程序部署就不会因等待基础架构而停止,系统管理员也不需要管理耗时的手动流程。那么整个开发部署迭代的流程就会越来越快, 越来越快。..

IaC 帮助您协调开发和运维,因为两个团队可以在代码仓库中看到基础架构全貌。

而且每个环境都可以使用相同的部署过程。环境一致性也有保障,开发上测试通过的,生产上出问题的概率也小。

DevOps 最佳实践也适用于 IaC 中的基础架构。基础设施可以通过与应用程序在软件开发期间相同的 CI/CD 管道,对基础设施代码应用相同的测试和版本控制。将 IaC 的 modules 代码也引入 DevOps 理念,快速测试,快速迭代。

总结

IaC 是什么?基础架构即代码 (Infrastructure as Code, IaC) 是指通过代码而不是手动流程/控制台点击来管理和配置基础架构。

IaC 有声明式和命令式两种实现方式,现在更主流的是声明式的。

为什么需要 IaC? 随着云计算带来的大量基础设施,IaC 已成必备工具。

IaC 也可以和 DevOps 流程/理念相契合。

参考资料

Terraform 系列-什么是 IaC?的更多相关文章

  1. EMVTag系列6《IAC 发卡行行为代码》

    R(需求):数据应存在,在读应用数据过程中,终端不检查:将变成必备 L: 5 IAC 的值,最好不要自定义,最好和所选的模板完全匹配.如果修改持卡人认证位,PIN Bypass 相关的位.如果有业务需 ...

  2. Azure Terraform(二)语法详解

    一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...

  3. Azure Terraform(三)部署 Web 应用程序

    一,引言 上一节关于 Terraform 的文章讲到 Terraform 使用到的一些语法,以及通过演示使用 Terraform 在Azure 上部署资源组,极大的方便了基础设施实施人员,也提高了基础 ...

  4. Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源

    一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...

  5. Azure Terraform(六)Common Module

    一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...

  6. Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

    一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...

  7. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

    一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...

  8. Terraform入门教程,示例展示管理Docker和Kubernetes资源

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  9. Terraform插件Provider管理,搜索、定义、下载

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

  10. Terraform状态State管理,让变更有记录

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

随机推荐

  1. ReactHooks_useState

    import { useState } from "react"; import './App.css'; function App() {   const [redBorder, ...

  2. 杭电OJ刷题指南(ACM)

    杭州电子科技大学Oj是著名的算法竞赛刷题网站!!

  3. 阿里云Linux服务器安装Maven实战教程

    下载地址 https://maven.apache.org/download.cgi 文件上传 把下载的文件上传到阿里云服务器 /usr/local/software 的目录(使用工具) window ...

  4. pytorch卷积模块

    nn.Conv2d() 常用的参数有in_channels,out_channels,kernel_size,stride,padding; 除此之外还有参数dilation,groups,bias ...

  5. centos mail 发邮件

    1.安装mailx yum -y install mailx 2. /etc/mail.rc 最后增加邮件配置如 set smtp=smtp.qq.comset smtp-auth=loginset ...

  6. Iview Table 图片、超链接

    columns = [ { title: "照片", key: "attach_url", align:'center', width: 170, render ...

  7. SpringBoot的几大重要问题

    1: traceID调用链 2:异步调用注解问题 import org.springframework.scheduling.annotation.Async;import org.springfra ...

  8. 11.1/2 鼠标显示问题(harib08a)11.2 实现画面外的支持(harib08b)

    ps:能力有限,若有错误及纰漏欢迎指正.交流 11.1 鼠标显示问题(harib08a) 存在问题: ​ 在harib07d中鼠标移动到最右侧后就不能再往右移了 解决办法: 将 if (mx > ...

  9. 【Azure K8S | AKS】分享从AKS集群的Node中查看日志的方法(/var/log)

    问题描述 使用Azure Kubernetes服务(AKS),可以通过kubectl连接 pod 中查看日志,但是如何来查看节点的系统日志呢?如是否有ubuntu系统升级的记录? 问题解答 是的,可以 ...

  10. ArchLinux 作业系统安装教程

    如果你能看到此文,想必你一定玩过不少的发行商发行的 Linux 作业系统或者听说过很多发行商发行的 Linux 作业系统.如果你玩过不少的 Linux 作业系统,对于安装系统可谓是轻车熟路,就是闭着眼 ...