基础设施即代码
已发行
本章内容概览:
- IaC 的概念和优势
- Terraform 基础
- 创建 Kubernetes 集群
- 创建容器仓库
- 最佳实践
7.1 什么是基础设施即代码?
定义 IaC 使用代码管理和配置基础设施,而非手动流程。
优势:
- 可重复性:多次创建相同环境
- 版本控制:基础设施配置纳入版本控制
- 自动化:自动创建、更新和删除资源
- 文档化:代码即文档
- 一致性:确保环境间一致
- 快速恢复:灾难恢复更容易
方法:
- 声明式:描述期望状态(Terraform、Kubernetes YAML)
- 命令式:描述如何达到期望状态(脚本、CLI)
7.2 为什么选择 Terraform?
开源的 IaC 工具。
特点:
- 多云支持:几乎所有云服务商
- 声明式语言:HCL
- 依赖管理:自动处理资源依赖
- 状态管理:跟踪基础设施状态
- 执行计划:预览变更影响
- 模块化:可重用的配置模块

工作流程:
- Write:编写 HCL 配置
- Plan:预览执行计划
- Apply:应用配置
7.3 Terraform 配置基础
Provider(提供者):
provider "azurerm" {
features {}
}
Resource(资源):
resource "azurerm_resource_group" "example" {
name = "myResourceGroup"
location = "East US"
}
Variable(变量):
variable "location" {
default = "East US"
}
resource "azurerm_resource_group" "example" {
location = var.location
}
Output(输出):
output "resource_group_name" {
value = azurerm_resource_group.example.name
}
7.4 创建 Kubernetes 集群
完整 AKS 配置:
resource "azurerm_resource_group" "example" {
name = "myResourceGroup"
location = "East US"
}
resource "azurerm_kubernetes_cluster" "example" {
name = "myAKSCluster"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "myakscluster"
default_node_pool {
name = "default"
node_count = 2
vm_size = "Standard_DS2_v2"
}
identity {
type = "SystemAssigned"
}
}
应用配置:
terraform init
terraform plan
terraform apply
7.5 创建容器仓库
ACR 配置:
resource "azurerm_container_registry" "example" {
name = "myContainerRegistry"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
sku = "Basic"
admin_enabled = true
}
7.6 依赖关系
Terraform 自动管理资源依赖。
隐式依赖:
resource "azurerm_kubernetes_cluster" "main" {
resource_group_name = azurerm_resource_group.main.name
# 自动推断依赖
}
显式依赖:
resource "azurerm_kubernetes_cluster" "main" {
depends_on = [azurerm_container_registry.main]
}
7.7 状态管理
远程状态配置(推荐):
terraform {
backend "azurerm" {
resource_group_name = "myResourceGroup"
storage_account_name = "mystorageaccount"
container_name = "tfstate"
key = "prod.terraform.tfstate"
}
}
7.8 最佳实践
模块化:使用模块组织可重用配置
版本控制:所有代码纳入版本控制
环境分离:使用工作空间管理不同环境
terraform workspace new dev terraform workspace new prod安全:
- 不硬编码敏感信息
- 使用环境变量或密钥管理服务
- 限制 Terraform 权限
- 定期审计变更
总结
- IaC 使用代码管理基础设施,提高效率和可靠性
- Terraform 支持多云平台,使用声明式语言 HCL
- 核心概念:Provider、Resource、Variable、Output
- 工作流程:Write → Plan → Apply
- 自动管理资源依赖
- 远程状态更安全
- 最佳实践:模块化、版本控制、环境分离、安全
下一章学习使用 GitHub Actions 创建持续部署流水线。