工具选型决策树
核心问题:我的团队规模、技术栈和云环境各不相同,应该从哪个工具入手,最终走向什么组合?
选型决策树
flowchart TD
START[你的主要需求是什么?]
START --> Q1{批量管理多台
Linux 服务器配置} START --> Q2{在云上创建 / 管理
基础设施资源} START --> Q3{运行容器化应用
需要编排调度} Q1 --> ANS[✅ 先学 Ansible
Ch02–03] Q2 --> TF[✅ 先学 Terraform
Ch04–05] Q3 --> K8S[✅ 先学 Kubernetes
Ch06–07] ANS --> COMBO1{还需要创建
云资源?} TF --> COMBO2{服务器内部配置
也要代码化?} K8S --> COMBO3{集群本身要代码化?} COMBO1 --> |是| FULL[Ansible + Terraform + K8s 完整组合] COMBO2 --> |是| FULL COMBO3 --> |是| FULL COMBO1 --> |否,只管服务器| ANSONLY[Ansible 单独使用] COMBO2 --> |否,只管云资源| TFONLY[Terraform 单独使用]
Linux 服务器配置} START --> Q2{在云上创建 / 管理
基础设施资源} START --> Q3{运行容器化应用
需要编排调度} Q1 --> ANS[✅ 先学 Ansible
Ch02–03] Q2 --> TF[✅ 先学 Terraform
Ch04–05] Q3 --> K8S[✅ 先学 Kubernetes
Ch06–07] ANS --> COMBO1{还需要创建
云资源?} TF --> COMBO2{服务器内部配置
也要代码化?} K8S --> COMBO3{集群本身要代码化?} COMBO1 --> |是| FULL[Ansible + Terraform + K8s 完整组合] COMBO2 --> |是| FULL COMBO3 --> |是| FULL COMBO1 --> |否,只管服务器| ANSONLY[Ansible 单独使用] COMBO2 --> |否,只管云资源| TFONLY[Terraform 单独使用]
按团队规模推荐
| 团队规模 | 推荐组合 | 理由 |
|---|---|---|
| 1–3 人 | Ansible 或 Terraform(按需选一个) | 引入复杂度要有人维护 |
| 3–10 人 | Terraform + Ansible | 有足够人手分工,基础设施规模值得代码化 |
| 10–30 人 | Terraform + Helm + K8s | 开始需要容器编排,Ansible 用于节点管理 |
| 30+ 人 | 全套 + GitOps(ArgoCD) | 多团队协作需要变更审计和自动化流水线 |
按应用类型推荐
| 应用类型 | 推荐工具 | 说明 |
|---|---|---|
| 传统 LAMP / LEMP 单机 | Ansible | 配置 Nginx + PHP-FPM,不需要容器 |
| 微服务(20+ 服务) | Kubernetes + Helm | 容器编排优势明显 |
| 无服务器(Lambda) | Terraform | 直接管理 FaaS 资源,Ansible 无用武之地 |
| 大数据/ML 平台 | Terraform + Ansible | 创建 EMR/Dataflow 集群,Ansible 配置 Python 环境 |
| 边缘计算/IoT | Ansible | 设备可能无法运行 K8s,但能跑 SSH |
| SaaS 多租户 | Terraform + K8s + GitOps | 每个租户一个 Namespace 或集群,代码驱动 |
云平台与工具匹配
| 云平台 | Terraform 支持 | 托管 K8s | Ansible 集成 |
|---|---|---|---|
| AWS | ✅ 最成熟(官方 Provider) | EKS | aws_ec2 动态 Inventory |
| GCP | ✅ 完整支持 | GKE | gcp_compute 动态 Inventory |
| Azure | ✅ 完整支持 | AKS | azure_rm 动态 Inventory |
| 阿里云 | ✅ 支持 | ACK | 手动 Inventory |
| 自建机房 | ✅ vsphere / libvirt | 自建 K8s / Rancher | 最原生场景 |
各工具的学习曲线
难度
│
高 │ ┌──── K8s 生产化
│ ┌────┘ (多集群/安全/存储)
│ ┌────┘ K8s 基础
│ ┌────┘
│ ┌────┘ Terraform 模块化
│ ┌────┘ Terraform 基础
│────┘ Ansible 基础
低 │
└──────────────────────────────── 时间
建议学习顺序:
- Ansible 基础(1–2 周)→ 立即能用,管理现有服务器
- Terraform 基础(1–2 周)→ 上云时解锁
- Kubernetes 基础(2–3 周)→ 容器化应用时引入
- GitOps + 监控(1–2 周)→ 团队协作和生产化必备
常见选型误区
| 误区 | 正确建议 |
|---|---|
| "K8s 适合所有应用" | 5 个微服务以下用 Docker Compose 更简单;K8s 引入显著复杂度 |
| "Terraform 能替代 Ansible" | Terraform 的 remote-exec / local-exec 不是替代 Ansible,只适合一次性初始化脚本 |
| "把所有资源塞进一个 .tf 文件" | 超过 200 行就应该拆模块;否则 plan 输出无法 review |
| "先学 K8s 再学 Docker" | K8s 以 Docker 容器为基础,需要先掌握容器概念 |
| "Ansible 太老了,直接上 Terraform" | 两者不重叠,Ansible 管服务器内部配置,Terraform 不行 |
最小可行 IaC 栈推荐
如果你是第一次引入 IaC,从这个最小集开始:
第 1 步:Ansible
→ 写一个 Playbook 管理你现有的服务器
→ 目标:把手动操作的 SOP 变成 Playbook
第 2 步:Terraform(上云时)
→ 用 Terraform 声明下一个项目的云资源
→ 目标:不再手动在控制台点"创建"
第 3 步:Kubernetes(容器化时)
→ 把 Docker 应用迁移到 K8s
→ 目标:用 Helm Chart 代替 docker-compose.yml