工具选型决策树
High Contrast
Dark Mode
Light Mode
Sepia
Forest
3 min read663 words

工具选型决策树

核心问题:我的团队规模、技术栈和云环境各不相同,应该从哪个工具入手,最终走向什么组合?


选型决策树

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 单独使用]

按团队规模推荐

团队规模 推荐组合 理由
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 基础
低 │
└──────────────────────────────── 时间

建议学习顺序:

  1. Ansible 基础(1–2 周)→ 立即能用,管理现有服务器
  2. Terraform 基础(1–2 周)→ 上云时解锁
  3. Kubernetes 基础(2–3 周)→ 容器化应用时引入
  4. 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

下一章Ansible 基础:Inventory、Playbook 与模块