如果你已经用过 ECS,对容器编排有了基本概念,那么接下来最值得了解的服务之一就是 Amazon EKS。简单来说,如果说 ECS 是 AWS 自家的容器编排方案,那么 EKS 就是把开源界最流行的 Kubernetes 搬到了 AWS 上——而且是帮你打理好控制平面的那种。
今天这篇文章,就带你彻底搞懂 EKS 是什么、和 ECS 有什么不同,然后手把手完成一个 Kubernetes 集群的创建和部署。
什么是 Amazon EKS?
EKS 的全称是 Amazon Elastic Kubernetes Service(亚马逊弹性 Kubernetes 服务)。它是 AWS 提供的一项完全托管的 Kubernetes 服务,让你能够在 AWS 云和本地数据中心无缝运行 Kubernetes,而无需自己安装、操作和维护 Kubernetes 控制平面。
你可以把它理解成“AWS 帮你搭好了 Kubernetes 的骨架”——控制平面(Control Plane)由 AWS 全权管理,你只需要添加工作节点(Worker Nodes),然后通过 kubectl 像操作标准 Kubernetes 集群一样部署应用即可。
EKS 的核心优势
完全托管的控制平面:EKS 自动管理 Kubernetes API 服务器和 etcd 持久化层的可用性和可扩展性,控制平面跨三个可用区运行以确保高可用
Kubernetes 认证兼容:EKS 运行上游 Kubernetes,并通过了 Kubernetes 一致性认证,所有现有的插件和工具都可以直接使用
多种计算选项:支持 EC2 实例和 Fargate 无服务器两种运行方式
深度 AWS 集成:与 IAM、VPC、ELB 等服务原生集成
EKS 自动模式:一键自动化集群管理,自动预置基础设施、选择最优计算实例、动态扩缩资源并持续优化成本
EKS 能用来做什么?
微服务架构部署:利用 Kubernetes 原生的服务发现和负载均衡能力
生成式 AI 和机器学习:利用 GPU 实例驱动 LLM 训练和推理
混合云架构:通过 EKS Anywhere 在本地数据中心运行相同的 EKS 集群
批处理和流式数据处理:弹性处理高峰期的计算任务
现代化应用迁移:将现有 Kubernetes 应用无缝迁移到云端,无需修改代码
EKS vs ECS:怎么选?
这是很多 AWS 新手会纠结的问题。简单来说:
对比维度Amazon ECSAmazon EKS编排引擎AWS 专有,非开源基于开源 Kubernetes,业界标准学习曲线较低——概念简洁较高——需要学习 Kubernetes 生态可移植性锁定 AWS 生态可在任何 K8s 环境运行工具生态主要依赖 AWS 工具丰富的开源生态和 Helm Charts适用团队想快速上手、深度使用 AWS 的团队有 K8s 经验或追求多云灵活性的团队
选择建议:如果你刚接触容器编排、没有 Kubernetes 经验,从 ECS 入门更高效;如果你的团队已有 Kubernetes 基础,或者未来有多云迁移的计划,EKS 是更合适的选择。
Kubernetes 核心概念速览
在开始操作 EKS 之前,先快速过一遍 Kubernetes 的基本概念。如果你已经熟悉 K8s,可以跳过这一节。
一个 Kubernetes 集群包含两种类型的资源:
控制平面(Control Plane) :负责管理整个集群,包括 API 服务器、调度器、控制器管理器等组件
节点(Nodes) :运行容器化应用的工作机器,可以是虚拟机或物理机
几个关键的工作负载概念:
概念简单理解类比PodKubernetes 中最小的部署单元,一个 Pod 可以包含一个或多个容器像一个“应用进程组”Deployment管理 Pod 的副本数和滚动更新类似 ECS 的“服务”Service为 Pod 提供稳定的访问入口(固定 IP 和 DNS)类似一个“负载均衡器”
图文教程:创建你的第一个 EKS 集群
下面我们从零开始,使用控制台和 eksctl 两种方式创建 EKS 集群。建议新手使用 eksctl——它是一个开源的命令行工具,可以用一条命令在几分钟内创建好集群所需的所有资源。
准备工作(两种方式都需要)
在开始之前,先安装好以下工具:
AWS CLI:配置好你的 AWS 凭证(
aws configure)kubectl:Kubernetes 的命令行工具
eksctl:推荐安装,会大幅简化创建流程
方式一:使用 eksctl(最推荐,新手首选)
eksctl 是 AWS 官方推荐的开源 CLI 工具,可以自动化创建集群、IAM 角色、VPC 和节点组。
第一步:创建集群(一条命令)
在终端中执行:
bash
eksctl create cluster \
--name my-eks-cluster \
--region us-east-1 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 2 \
--nodes-min 1 \
--nodes-max 3 \
--managed这条命令会自动完成以下工作:
创建 EKS 集群的控制平面(跨三个可用区)
创建所需的 IAM 角色
创建符合 EKS 要求的 VPC
创建一个托管节点组,包含 2 个
t3.medium节点
整个过程大约需要 10-15 分钟。
第二步:配置 kubectl
集群创建完成后,执行以下命令生成 kubeconfig 文件,让 kubectl 能连接到你的集群:
bash
aws eks update-kubeconfig --region us-east-1 --name my-eks-cluster第三步:验证集群
执行以下命令,查看节点状态:
bash
kubectl get nodes如果看到两个 Ready 状态的节点,说明集群已经正常运行了。
方式二:使用 AWS 管理控制台(更直观,适合了解细节)
如果你想深入了解每个资源的创建过程,可以通过控制台手动创建。
第一步:创建 VPC
EKS 集群需要运行在符合要求的 VPC 中。可以使用 AWS CloudFormation 快速创建一个:
bash
aws cloudformation create-stack \
--region us-east-1 \
--stack-name my-eks-vpc-stack \
--template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml第二步:创建集群 IAM 角色
创建一个 IAM 角色,允许 EKS 服务代表你调用其他 AWS 服务。
创建信任策略文件 eks-cluster-role-trust-policy.json:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}创建角色并附加策略:
bash
aws iam create-role \
--role-name myAmazonEKSClusterRole \
--assume-role-policy-document file://"eks-cluster-role-trust-policy.json"
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \
--role-name myAmazonEKSClusterRole第三步:在控制台创建集群
登录 AWS 管理控制台,搜索并进入 EKS
点击 “创建集群”
输入集群名称(如
my-eks-cluster)选择刚才创建的集群服务角色
myAmazonEKSClusterRole在网络配置中选择你创建的 VPC 和子网
其余设置保持默认,点击 “创建”
集群状态会保持 “正在创建” 几分钟,直到变为 “有效” 。
第四步:配置 kubectl 并添加节点
集群创建完成后,配置 kubectl 连接:
bash
aws eks update-kubeconfig --region us-east-1 --name my-eks-cluster然后需要添加工作节点。推荐创建 托管节点组(Managed Node Group),AWS 会自动帮你管理节点的生命周期和更新。
创建节点 IAM 角色 node-role-trust-policy.json:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}bash
aws iam create-role \
--role-name myAmazonEKSNodeRole \
--assume-role-policy-document file://"node-role-trust-policy.json"
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \
--role-name myAmazonEKSNodeRole
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \
--role-name myAmazonEKSNodeRole然后在 EKS 控制台的集群详情页,进入 “计算” 选项卡,点击 “添加节点组” ,选择刚才创建的节点角色,配置实例类型和数量即可。
部署一个示例应用
集群就绪后,我们来部署一个简单的 Nginx 应用,验证一切正常:
创建 Deployment 和 Service
创建一个文件 nginx-deployment.yaml:
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer部署到集群:
bash
kubectl apply -f nginx-deployment.yaml查看部署状态:
bash
kubectl get pods
kubectl get svc如果 Service 的 EXTERNAL-IP 显示为 <pending>,稍等几分钟后 AWS 会自动创建并关联一个负载均衡器。拿到外网 IP 后在浏览器中访问,应该能看到 Nginx 的欢迎页面。
EKS 自动模式:更省心的选择
如果你不想操心节点管理、补丁更新和容量规划,可以试试 EKS 自动模式。它是 AWS 在 2024 年推出的新功能,只需一键点击,就能自动化集群的计算、存储和网络管理。
自动模式会自动完成以下工作:
自动预置基础设施并选择最优计算实例
动态扩缩资源
持续优化计算成本
管理核心插件和操作系统补丁
与 AWS 安全服务原生集成
简单说,它让你可以在不需要深厚 Kubernetes 运维经验的情况下,快速启动生产级集群。如果不想被基础设施管理拖累,这是目前的首选方案。
EKS 集群的控制平面会持续产生费用(即使在免费套餐内也有时长限制)。测试完成后,记得清理资源:
使用 eksctl 创建的集群:
bash
eksctl delete cluster --name my-eks-cluster --region us-east-1使用控制台创建的集群:
删除所有节点组
删除集群
删除相关的 VPC 和 IAM 角色
这样才能彻底释放资源,避免产生不必要的账单。
EKS 是 AWS 对 Kubernetes 社区的深度拥抱。它让 Kubernetes 这个业界标准的容器编排平台在 AWS 上落地生根,既保留了开源生态的丰富性,又享受了 AWS 的稳定性和安全性。掌握 EKS,你就掌握了云原生时代最核心的技能之一。