Linux 服务云原生运维与多云管理:Terraform + Ansible + Crossplane 混合实战
一、IaC 工具选型与混合架构设计
工具对比:
混合架构推荐:
- Terraform:负责底层基础设施(VPC、VM、EKS/AKS/GKE)
- Ansible:在 VM 上进行 Systemd 服务配置、软件安装、安全加固
- Crossplane:在 Kubernetes 中将云资源作为 CRD 管理,实现“一切皆 K8s”
- GitOps:ArgoCD / Flux 统一交付
分层设计:
- 基础设施层(Terraform / Crossplane)
- 应用编排层(Helm / Kustomize / Operator)
二、Terraform 生产级实战
1. 项目结构推荐
terraform-project/
├── environments/
│ ├── prod/
│ └── dev/
├── modules/
│ ├── vpc/
│ ├── ec2/
│ └── k8s/
├── main.tf
├── variables.tf
├── terraform.tfvars
└── providers.tf
2. 核心配置文件示例(AWS 示例)
# providers.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.region
}
# main.tf - 部署 EC2 + Ansible 准备
module "web_server" {
source = "./modules/ec2"
instance_count = 3
ami = "ami-0c02fb55956c7d316"
instance_type = "t3.medium"
user_data = templatefile("${path.module}/userdata.sh", {})
}
output "ansible_inventory" {
value = module.web_server.ansible_inventory
}
3. UserData 脚本集成 Ansible
#!/bin/bash
yum install ansible-core -y
cat > /etc/ansible/hosts << EOF
[webservers]
${ansible_inventory}
EOF
Terraform 最佳实践:
- 使用 remote backend(S3 + DynamoDB 锁)
三、Ansible 在云原生环境中的进阶应用
1. 动态 Inventory
# aws_ec2.yml
plugin: aws_ec2
regions:
- ap-east-1
filters:
tag:Environment: prod
keyed_groups:
- prefix: tag
key: tag:Role
2. Playbook 部署 Systemd 服务
-name:DeployNginxonCloudVMs
hosts:webservers
become:yes
roles:
-nginx
-prometheus_node_exporter
post_tasks:
-name:RegistertoConsul/Kubernetes
...
3. 与 Terraform 集成 Terraform 输出 inventory → Ansible 执行配置。
四、Crossplane 多云统一管理实战
1. 安装 Crossplane
kubectl create namespace crossplane-system
helm install crossplane crossplane/crossplane --namespace crossplane-system
# 安装 AWS Provider
kubectl apply -f https://raw.githubusercontent.com/crossplane/provider-aws/main/package/crds/...
2. Composite Resource 定义(XRD + Composition)
# 定义抽象资源
apiVersion:apiextensions.crossplane.io/v1
kind:CompositeResourceDefinition
metadata:
name:xmysqlinstances.database.example.com
spec:
group:database.example.com
...
Composition 示例(AWS RDS):
apiVersion:apiextensions.crossplane.io/v1
kind:Composition
metadata:
name:mysql.aws.database.example.com
spec:
resources:
-name:rdsinstance
base:
apiVersion:database.aws.crossplane.io/v1beta1
kind:RDSInstance
spec:
forProvider:
class:db.t3.medium
engine:mysql
...
3. 使用方式
apiVersion:database.example.com/v1alpha1
kind:MySQLInstance
metadata:
name:prod-mysql
spec:
compositionRef:
name:mysql.aws.database.example.com
parameters:
storage:100Gi
优势:开发者只需申请 MySQLInstance CR,Crossplane 自动在多云中 provisioning。
五、多云混合运维最佳实践
- Crossplane 管理云资源,Terraform 管理遗留基础设施
- ArgoCD 同步 Terraform / Crossplane 配置
- Ansible 通过 Operator 或 Job 执行配置
- Terraform state 存 S3 / Consul
- Terraform + Infracost 成本预估
- Crossplane Policy + Kyverno 策略控制
- Terraform 部署 VM → Ansible 配置 Systemd 服务
- Crossplane 管理 K8s 集群本身(Cluster API + Crossplane)
六、生产环境 IaC 故障排查案例
案例1:Terraform state 锁死 解决:terraform force-unlock + DynamoDB 锁优化。
案例2:Ansible 动态 Inventory 为空 排查:AWS 凭证、过滤器标签、权限。
案例3:Crossplane Provider 同步失败 排查:kubectl get managed、kubectl describe CR,检查 ProviderConfig 密钥。
案例4:多云权限爆炸 解决:最小权限 + Crossplane ProviderConfig 集中管理凭证。
案例5:配置漂移 解决:定期 terraform plan + Ansible --check + Drift detection 工具。
七、IaC 安全与治理
- 代码扫描:tfsec / checkov / Trivy
- 状态加密:Terraform Cloud / Vault
- 审批流程:Terraform + Atlantis / GitHub PR
- RBAC:Crossplane RBAC + K8s RBAC