
Amazon EKS(Elastic Kubernetes Service)是 AWS 提供的全托管 Kubernetes 服务。
它的定位是AWS 负责运行和维护 Kubernetes 控制平面(API Server、etcd、调度器等),用户负责管理工作节点和部署在上面的应用。
相比自己在 EC2 上搭建 Kubernetes,EKS 省去了控制平面的高可用配置和版本升级工作,但工作节点的选择、扩缩容策略和网络配置仍然需要用户自行决策。
EKS 是什么,和 ECS 怎么选
在决定使用 EKS 之前,有一个更基础的判断:你的业务需要 Kubernetes,还是只需要容器编排?
ECS(Elastic Container Service)是 AWS 自研的容器编排服务,学习曲线更平缓,和 AWS 原生服务的集成更深度,控制平面免费。EKS 使用标准的 Kubernetes API,支持整个 CNCF 生态系统(Istio、Argo CD、Karpenter、KEDA、Prometheus 等),可以用同一套 Kubernetes 清单在 AWS、GCP、Azure 或本地集群部署。
2026 年的判断基准是:服务数量低于 15–20 个、团队没有 Kubernetes 经验、只在 AWS 上运行,选 ECS 更实际,运维负担更小;服务数量超过 15–20 个、需要 CNCF 生态工具、有多云或混合云需求、或者在跑 AI/ML 工作负载需要 GPU 调度,EKS 是更合适的选择。选错方向会在后期付出大量迁移成本,这个判断值得在初期认真评估。
EKS 的四种计算节点选项
EKS 集群的计算层有四种选项,选哪种直接影响运维工作量和长期成本。
托管节点组(推荐大多数团队)
托管节点组(Managed Node Groups)是最常见的选择。AWS 自动创建和管理 EC2 Auto Scaling Group,节点的启动、更新和终止由 AWS 处理。更新节点版本时,AWS 会自动先 drain 节点(驱逐 Pod 到其他节点),再更新实例,保证应用不中断。托管节点组本身不额外收费,只按运行的 EC2 实例小时计费。
这是大多数生产环境的默认起点,运维负担在 EC2 选项里最低,同时保留了对实例类型、磁盘大小和 AMI 的完整控制。
自管理 EC2 节点
自管理节点提供最高的自定义能力——可以指定任意 AMI、自定义 bootstrap 脚本、运行需要特权模式的容器和 DaemonSet。代价是需要自己管理节点的生命周期:手动或通过 Auto Scaling Group 处理节点加入集群、版本升级和实例替换。适合有特殊硬件要求、需要深度定制操作系统环境或有混合云特殊需求的场景。关于 EC2 实例系列的选择逻辑,可以参考 AWS EC2 实例类型 选择指南。
Fargate
Fargate 是无服务器计算层,每个 Pod 在独立的微型虚拟机中运行,不需要管理任何节点。优势是零节点运维,Pod 启动后立即计费,停止后不产生费用。
代价是成本。Fargate 按 vCPU 小时($0.04048)和内存 GB 小时($0.004445)计费,同等工作负载比 EC2 节点贵 3–6 倍。在 30 个以上容器持续运行的场景下,成本差距会非常显著。Fargate 适合两类场景:运行批处理任务或 CI/CD 作业(短时运行,用完即停);或者在集群里为 Karpenter 控制器提供运行环境(一个常见的设计模式,避免 Karpenter 管理自己运行的节点)。
Karpenter 与 EKS Auto Mode
Karpenter 是 AWS 开发的开源节点自动扩缩工具,也是目前 EKS 上最推荐的节点扩缩方案。它直接监听 Kubernetes 中处于 Pending 状态的 Pod,实时判断需要什么规格的节点,30–60 秒内启动最合适的 EC2 实例(包括 Spot 实例),Pod 调度完成后可以再合并缩容不必要的节点。相比传统的 Cluster Autoscaler,Karpenter 响应速度更快,实例类型选择更灵活,通常额外节省 15–25% 的节点成本。
EKS Auto Mode(2024 年 12 月发布)是更进一步的托管方案,它在集群层面启用托管 Karpenter,AWS 自动处理节点供应、补丁和升级,每 21 天轮换一次节点。Auto Mode 在标准 EC2 实例费用之外有小额管理费,但减少了大量节点运维工作量。对于不想花时间维护 Karpenter 配置的团队,Auto Mode 是值得考虑的选项。
四种选项的对比:
| 选项 | 运维负担 | 成本 | 适合场景 |
| 托管节点组 | 低 | EC2 按需价格 | 大多数生产环境 |
| 自管理 EC2 | 最高 | EC2 按需价格 | 需要深度自定义 |
| Fargate | 最低 | EC2 的 3–6 倍 | 批处理、短时任务 |
| Karpenter / Auto Mode | 低-中 | EC2 按需,可优化 Spot | 弹性工作负载、成本优化 |
创建 EKS 集群的步骤
前置准备
创建 EKS 集群需要先完成三项准备:安装 AWS CLI 和 eksctl(EKS 的专用命令行工具),以及 kubectl(Kubernetes 标准命令行)。eksctl 是创建和管理 EKS 集群最简便的方式,封装了大量手动配置步骤。
# 安装 eksctl(macOS)
brew tap weaveworks/tap
brew install weaveworks/tap/eksctl
# 验证安装
eksctl version
EKS 集群需要两个 IAM 角色:集群角色(EKS 控制平面用于调用 AWS API)和节点角色(工作节点用于访问 ECR 拉取镜像、VPC CNI 配置网络等)。每个角色的权限策略都有 AWS 托管版本可以直接使用,不需要从头创建。关于 IAM 角色和权限策略的创建方式,可以参考 AWS IAM 权限管理教程的详细说明。
用 eksctl 创建集群
最简单的方式是用 eksctl 一条命令创建集群和托管节点组:
eksctl create cluster \
–name my-cluster \
–region ap-east-1 \
–nodegroup-name standard-nodes \
–node-type t3.medium \
–nodes 2 \
–nodes-min 1 \
–nodes-max 4 \
–managed
这条命令会自动创建:VPC 和子网、IAM 角色、EKS 控制平面、Auto Scaling Group 和两台 t3.medium 节点、并配置 kubectl 的 kubeconfig。集群创建完成通常需要 15–20 分钟。
如果需要更精细的控制(指定已有 VPC、多可用区节点组、Spot 实例),可以用 YAML 配置文件:
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
region: ap-east-1
version: “1.32”
vpc:
id: vpc-0abc123
subnets:
private:
ap-east-1a:
id: subnet-0abc123
ap-east-1b:
id: subnet-0def456
managedNodeGroups:
– name: on-demand-nodes
instanceType: m5.large
minSize: 2
maxSize: 8
desiredCapacity: 2
privateNetworking: true
iam:
withAddonPolicies:
autoScaler: true
ebs: true
eksctl create cluster -f cluster.yaml
生产环境的节点应该部署在私有子网(privateNetworking: true),不分配公网 IP,通过 NAT Gateway 访问外网,外部流量通过负载均衡器进入。关于 EKS 集群的 VPC 网络架构、私有子网和 NAT Gateway 配置,可以参考 AWS VPC 网络配置教程。
验证集群状态
集群创建完成后,验证节点是否正常加入:
kubectl get nodes
输出应该显示所有节点处于 Ready 状态。部署一个测试 Deployment 验证集群工作正常:
kubectl create deployment nginx –image=nginx
kubectl get pods
节点扩缩容:Karpenter 配置
为什么选 Karpenter 而不是 Cluster Autoscaler
Cluster Autoscaler 是 Kubernetes 的传统节点自动扩缩方案,通过监控节点资源使用率来决定扩缩。它的主要限制是:必须提前定义 Auto Scaling Group 和节点类型,每次扩缩只能在预定义的实例类型里选择,响应速度相对慢。
Karpenter 采用不同的思路:它监听 Pending Pod,分析 Pod 需要的资源(CPU、内存、GPU、特定的节点亲和性),从 AWS 全量 EC2 实例类型中实时选择最合适、最便宜的实例启动,不需要预先定义 Auto Scaling Group。这让它能够在混合 Spot 和按需实例、多实例类型的复杂场景下自动找到最优解。
典型的 Karpenter NodePool 配置,定义允许的实例系列和容量类型:
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
name: default
spec:
template:
spec:
requirements:
– key: kubernetes.io/arch
operator: In
values: [“amd64”, “arm64”]
– key: karpenter.sh/capacity-type
operator: In
values: [“spot”, “on-demand”]
– key: karpenter.k8s.aws/instance-category
operator: In
values: [“c”, “m”, “r”]
nodeClassRef:
group: karpenter.k8s.aws
kind: EC2NodeClass
name: default
limits:
cpu: 1000
memory: 1000Gi
disruption:
consolidationPolicy: WhenEmptyOrUnderutilized
consolidateAfter: 1m
consolidateAfter: 1m 表示节点闲置 1 分钟后 Karpenter 自动合并缩容,释放不必要的计算资源,避免为空闲节点持续付费。
常见使用场景
微服务架构的统一部署平台
当业务拆分为多个微服务后,不同服务的资源需求、扩缩频率和更新节奏各不相同。EKS 通过命名空间(Namespace)实现逻辑隔离,通过资源请求(requests)和限制(limits)控制每个服务的资源边界,通过 HPA(Horizontal Pod Autoscaler)实现服务级别的 Pod 扩缩,通过 Karpenter 实现节点级别的自动供应。整套机制下,不同团队可以在同一集群上独立部署和扩缩自己的服务,共享底层计算资源,而不会相互干扰。
AI/ML 工作负载的 GPU 调度
EKS 支持 GPU 节点(P 系列、G 系列实例),Karpenter 可以为需要 GPU 的 Pod 自动启动 GPU 节点,任务完成后自动缩容,不需要持续保持 GPU 实例运行。这对 AI 训练任务特别有价值——训练 Pod 提交后,Karpenter 30–60 秒内启动合适的 GPU 实例,训练完成后自动释放,只为实际训练时间付费。
批处理和定时任务
Karpenter 配合 Kubernetes Job 和 CronJob,可以实现真正的按需计算。任务触发时启动节点,任务完成后节点自动缩容到零,整个过程不需要常驻服务器。Spot 实例在批处理场景下尤为适合,任务支持断点续传的情况下,使用 Spot 可以节省 60–90% 的计算成本。
计费构成与容易被忽视的成本项
EKS 的账单由五层成本构成,只看控制平面费用会严重低估实际支出。
控制平面:$0.10/小时($72/月)。 每个 EKS 集群的固定费用,不随节点数量和 Pod 数量变化。多个环境(生产、测试、开发)各建一个集群,每月固定成本就是集群数量乘以 $72。如果不同环境能通过命名空间和 RBAC 策略在同一集群隔离,可以减少集群数量,直接减少控制平面费用。
工作节点:EC2 实例费用。 节点按 EC2 按需或 Spot 价格计费,是账单的主体。节点不使用时同样计费,Karpenter 的节点合并缩容功能是防止闲置节点浪费的核心机制。
EBS 存储: 每个节点默认挂载一块 EBS 系统盘,有状态应用还需要额外的持久化卷。EBS 按 GiB/月计费,节点删除后如果 PVC 没有对应释放,EBS 卷会继续产生费用。
数据传输费: Pod 之间的跨 AZ 通信、负载均衡器的出站流量、ECR 镜像拉取(同区域免费)都会产生流量费。多可用区部署提高了可用性,但也增加了跨 AZ 流量成本,架构设计时应考虑将强相关的服务调度到同一可用区。
负载均衡器: 每个 Kubernetes Service 类型为 LoadBalancer 会创建一个 AWS ELB,按小时计费。大量微服务如果都创建独立的 LoadBalancer,月度费用会迅速累积。生产环境应通过 Ingress Controller(如 AWS Load Balancer Controller)用一个 ALB 统一处理多个服务的入站流量,而不是为每个服务单独创建 ELB。
对于长期稳定运行的节点组,购买 Reserved Instances 或 Compute Savings Plans 可以节省 30–55% 的节点成本。关于 AWS 各类预留折扣的选择逻辑和适用场景,可以参考 AWS Reserved Instances 的完整分析。
账号开通与代理充值
使用 EKS 需要有效的 AWS 账号,新账号在部分高规格 EC2 实例类型的配额上可能存在限制,GPU 节点(P 系列、G 系列)需要单独申请配额。
对于长期运行 EKS 生产集群的团队,尤其是月均 EC2 消耗在 $500 以上的业务,通过 AWS 代理商 渠道充值可以享受代理专属折扣(低至 7 折),配合 Reserved Instances 或 Savings Plans 叠加使用,年度实际成本会明显低于官网直充。付款支持 USDT 和对公转账,适合没有海外信用卡或需要企业对公结算的团队,账号免实名、免绑卡,1 分钟极速交付。



