EKS 还是 ECS,怎么选
选 ECS + Fargate 的场景
- 团队规模小,没有专职平台工程师
- 服务数量在几十个以内,编排需求不复杂
- 希望最少的运维面,不想管节点和 K8s 版本升级
- 已经深度使用 AWS 原生服务,不需要跨云可移植性
选 EKS 的场景
- 需要 K8s 生态能力:Operator、Service Mesh、自定义调度
- 有跨云或混合云的可移植性要求
- 服务数量上百,需要精细的资源配额与多租户隔离
- 已有 K8s 经验积累,或计划长期投入平台工程
EKS 生产集群参考架构
入口层
Route 53
CloudFront
WAF
ALB / NLB
网关层
AWS Load Balancer Controller
Ingress NGINX
ExternalDNS
cert-manager
工作负载
业务 Deployment
HPA / KEDA
PodDisruptionBudget
Namespace 配额
节点层
Karpenter
托管节点组
Fargate Profile
Bottlerocket AMI
平台组件
Argo CD
Prometheus / Grafana
Fluent Bit → OpenSearch
OPA Gatekeeper
数据与状态
RDS / Aurora
ElastiCache
S3
EFS / EBS CSI
Karpenter 替代 Cluster Autoscaler 后,节点扩容通常从 2-3 分钟降到 40 秒内,且能自动挑最便宜的可用规格。
Karpenter NodePool 配置
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: general-purpose
spec:
template:
metadata:
labels:
workload-tier: general
spec:
requirements:
- key: karpenter.sh/capacity-type
operator: In
values: ["spot", "on-demand"] # 优先 Spot,不可用时自动回落
- key: kubernetes.io/arch
operator: In
values: ["amd64", "arm64"] # 允许 Graviton,成本更优
- key: karpenter.k8s.aws/instance-category
operator: In
values: ["c", "m", "r"]
- key: karpenter.k8s.aws/instance-generation
operator: Gt
values: ["5"] # 只用新代次,性价比更好
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
expireAfter: 720h # 30 天强制轮换,配合镜像更新
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1m
budgets:
- nodes: "15%" # 一次最多干扰 15% 节点
- schedule: "0 9 * * mon-fri" # 工作日白天禁止整合
duration: 10h
nodes: "0"
limits:
cpu: "2000"
memory: 4000Gi
生产环境务必配置 disruption budgets,否则整合动作可能在业务高峰期触发节点回收。
生产集群上线检查清单
网络与安全
- VPC CNI 前缀委派开启,避免 IP 耗尽
- Pod 级 IAM(IRSA / Pod Identity)替代节点角色
- Security Group for Pods 覆盖敏感服务
- 私有集群端点 + 堡垒或 SSM 访问
- OPA Gatekeeper 或 Kyverno 拦截特权容器
稳定性
- 每个业务 Deployment 配置 PodDisruptionBudget
- readiness / liveness / startup 三类探针齐全
- requests 与 limits 明确,避免 Guaranteed 之外的抢占
- 拓扑分布约束跨 3 个可用区
- 控制面与关键组件版本落后不超过 2 个小版本
可观测与成本
- 容器日志采集到 OpenSearch 或 CloudWatch Logs
- Prometheus 指标 + Grafana 看板 + 告警路由
- Kubecost 或标签方案实现 Namespace 级成本归属
- OpenTelemetry 链路追踪覆盖核心调用链
- 节点与 Pod 资源利用率周报