跳转至

基础设施即代码

软件工程师负责开发软件,运维工程师负责管理硬件、部署和运行软件,存在配置漂移问题。

上云后,运维工程师更多时间是通过编码完成工作,与软件工程师的工作愈发接近,后催生出 DevOps 运动——文化、流程、想法、技术的集合。

实践 DevOps,遵循 CAMS 价值参考模型—— 文化、自动化、测量、分享。

IAC 工具

IAC,即 Infrastructure as Code,通过编写和执行代码来定义、部署、变更、销毁基础设施。

工具分类

  • Ad-Hoc 脚本,适合一次性小任务
  • 配置管理工具,如 Ansible,在服务器上安装、管理软件
  • 服务模板工具,如 Docker、Vagrant、Packer,构建虚拟机或容器镜像,创建虚拟机或容器
  • 编排工具,如 Kubernetes,Helm,编排容器
  • 预置工具,如 Terraform,创建服务器等基础设施,包括负载均衡、网络拓扑

Terraform

Terraform 定位于基础设施组件。

Ansible

Ansible 定位于配置管理和应用部署。

Helm

Helm 是 Kubernetes 的包管理器,简化了 Kubernetes 应用管理。

Buildpacks

CNF 出品的一个容器镜像打包工具。

工具选择

配置管理工具可以做一些预置工作,预置工具也可以做一些配置工作。如 Ansible 可以创建服务器,Terraform 可以通过执行初始化脚本做一些配置工作。

不可变基础设施更容易测试和维护,配置管理工具不适合不可变部署。

编程式 DSL 更可扩展,声明式 DSL 更能捕获基础设施的状态。

无主服务较有主服务更好,无代理较有代理更好。

社区成熟度、工具流行度也可作为选择标准。

协同工作

如果使用容器化技术,可以只使用 Terraform。

Terraform + Ansible

Terraform 创建服务器,Ansible 部署应用。 ![[terraform.png]]

Terraform + Helm

Terraform 创建服务器,Helm 部署应用。

Terraform

TerraformHashiCorp 开发的 IaC 工具。通过定义声明式的资源配置文件,管理基础设施的生命周期。

快速上手

详见 示例代码

安装

Terraform CLI

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

terraform -install-autocomplete

Docker 环境

详见 [[Multipass]]。

multipass launch docker

multipass alias docker:docker

工作流程

terraform init
terraform plan
terraform apply

open http://192.168.205.4:8080

组成原理

DSL

详见 Terraform Language Documentation

Terraform 配置语言,主要用于声明资源(基础设施对象的抽象),其他语言特性只是为了定义资源更灵活、更方便。

Provider

provider "<NAME>" {
    [CONFIG ...]
}

资源

资源的 ID 形式为 resource_type.resource_name。资源类型一般为 Provider 名称。

resource "<PROVIDER>_<TYPE>" "<NAME>" {
    [CONFIG ...]
}

核心

读取配置,构建资源依赖图。

资源,例如虚拟网络、计算机实例、DNS 记录等。

插件

实现资源的增删改查接口,供第三方服务使用。

仓库

Terraform Registry,提供 Provider 文档及相关资源。

工作原理

![[terraform-workflow.png]]

基础设施即代码

基础设施即代码(Infrastructure as Code)。

使用资源配置文件构建、变更、管理基础设施,资源配置可版本控制、可复用、可分享。

Ansible

资源


最后更新: September 10, 2023

评论