AWS EKS Kubernetes深度实战:从创建集群到生产部署完整指南
Meta Description: AWS EKS Kubernetes深度实战教程,涵盖集群创建、节点组配置、应用部署、自动扩缩容、监控告警全流程,附价格对比与常见问题解答。
- 为什么选择AWS EKS管理Kubernetes
- EKS集群创建:控制面与网络架构
- 节点组与计算选项详解
- 应用部署实战
- 自动扩缩容:Cluster Autoscaler + HPA
- 监控与日志
- EKS与替代方案价格对比
Meta Description: AWS EKS Kubernetes深度实战教程,涵盖集群创建、节点组配置、应用部署、自动扩缩容、监控告警全流程,附价格对比与常见问题解答。
关键词:AWS EKS、EKS教程、Kubernetes on AWS、EKS定价、EKS vs 自建K8s、容器编排、生产级K8s集群
一、为什么选择AWS EKS管理Kubernetes
决策口诀:中小规模用Fargate免运维,大规模用托管节点组省成本,混合云选EKS Anywhere。
Kubernetes是容器编排的事实标准,但自建K8s控制面需要投入大量精力维护etcd、API Server、Scheduler等核心组件。AWS EKS(Elastic Kubernetes Service)将控制面完全托管在AWS上,用户只需关注工作负载和数据面节点。
2026年EKS支持Kubernetes 1.31,所有控制面组件由AWS自动打补丁和升级。AWS承担控制面99.95% SLA,你不再需要手动升级etcd或担心控制面组件版本落后。
EKS的核心优势包括:控制面完全托管免运维、与AWS生态(IAM、VPC、ECR、CloudWatch)深度集成、支持托管节点组和Fargate两种数据面模式、支持EKS Anywhere本地部署、支持自定义安全组和私有集群等企业级特性。
二、EKS集群创建:控制面与网络架构
2.1 前置准备
创建EKS集群前,你需要准备以下资源:
- AWS账号:已有可跳过。尚未注册请参考 AWS免费套餐注册指南
- VPC网络:EKS要求至少2个跨可用区的子网(推荐3个AZ)
- IAM角色:需要EKS集群服务角色和节点实例角色
- eksctl工具:AWS官方推荐的EKS集群管理CLI
安装eksctl:
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
2.2 一键创建生产级集群
eksctl create cluster \
--name my-prod-cluster \
--region ap-northeast-1 \
--version 1.31 \
--nodegroup-name prod-workers \
--node-type m5.large \
--nodes 3 \
--nodes-min 2 \
--nodes-max 6 \
--with-oidc \
--managed
这条命令会在ap-northeast-1(东京)区域创建:
- 一个由AWS完全托管的Kubernetes 1.31控制面
- 一个托管节点组,运行m5.large实例
- 3个初始Worker节点,支持2~6节点自动伸缩
- OIDC Provider(用于IAM角色绑定Service Account)
整个创建过程约10-15分钟,eksctl会自动配置VPC子网和安全组。
2.3 kubectl连接集群
aws eks update-kubeconfig --region ap-northeast-1 --name my-prod-cluster
kubectl get nodes
kubectl cluster-info
三、节点组与计算选项详解
3.1 托管节点组 vs 自管节点组
| 对比维度 | 托管节点组 | 自管节点组 | Fargate |
|---|---|---|---|
| AWS管理 | 完全托管 | 仅节点生命周期 | 完全无服务器 |
| AMI更新 | 自动 | 手动维护 | 无需关心 |
| 滚动更新 | 支持 | 手动配置 | 无需关心 |
| 适用场景 | 通用工作负载 | 特殊AMI/内核定制 | 短期/批处理/简单应用 |
| 价格溢价 | 无 | 无 | 略高(按秒计费) |
| 弹性伸缩 | Cluster Autoscaler | 自行配置 | 自动按需 |
3.2 EKS定价构成
EKS费用由三部分组成:
| 费用项目 | 价格(美东区域) | 说明 |
|---|---|---|
| EKS控制面 | $0.10/小时($72/月) | 每个集群固定费用,与节点数无关 |
| 托管节点组 | 无额外费用 | 仅支付底层EC2实例费用 |
| Fargate | $0.0464/vCPU/小时 + $0.005/GB/小时 | 按实际使用量计费 |
省钱提醒:EKS控制面$0.10/小时是固定成本。如果你有多套工作负载,考虑在同一个EKS集群中用Namespace隔离,而不是创建多个集群。
3.3 不同实例类型的价格对比(美东区域,按需价格)
| 实例类型 | vCPU | 内存 | 每小时价格 | 月均费用(730h) | 推荐场景 |
|---|---|---|---|---|---|
| t3.medium | 2 | 4GB | $0.0416 | ~$30 | 测试/开发环境 |
| m5.large | 2 | 8GB | $0.096 | ~$70 | 通用工作负载 |
| m5.xlarge | 4 | 16GB | $0.192 | ~$140 | 中型微服务 |
| c5.2xlarge | 8 | 16GB | $0.34 | ~$248 | 计算密集型 |
| r5.xlarge | 4 | 32GB | $0.252 | ~$184 | 内存密集型 |
| m5.4xlarge | 16 | 64GB | $0.768 | ~$561 | 大型数据库/有状态服务 |
⚠️ 文中价格为2026年美东区域参考价,实际费用随区域和实例库存变动,请以 AWS 官网为准。
3.4 Spot实例节省成本
在节点组中配置Spot实例可节省60-90%:
// eksctl spot节点组配置
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
managedNodeGroups:
- name: spot-workers
instanceTypes:
- m5.large
- m5a.large
- m4.large
spot: true
minSize: 2
maxSize: 10
desiredCapacity: 3
使用Spot的注意事项:确保应用能处理实例中断(2分钟提前通知)、使用多实例类型降低被回收风险、结合Pod Disruption Budget保证服务可用性。
四、应用部署实战
4.1 部署示例应用
创建一个Nginx Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
kubectl apply -f nginx-deployment.yaml
kubectl get pods -o wide
kubectl rollout status deployment/nginx-app
4.2 配置Service和Ingress
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
selector:
app: nginx
ports:
- port: 80
targetPort: 80
安装AWS Load Balancer Controller并配置Ingress规则,实现外部流量自动路由到集群内部Pod。该控制器会自动创建AWS ALB或NLB资源,无需手动配置负载均衡器。
eksctl create iamserviceaccount \
--cluster=my-prod-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::policy/AWSLoadBalancerControllerIAMPolicy \
--approve
配置好后,只需在Ingress资源中添加注解,AWS Load Balancer Controller会自动完成云上负载均衡器的创建和健康检查配置。这种声明式的流量管理方式极大简化了Kubernetes服务暴露的复杂度。
4.3 从私有ECR仓库拉取镜像
// 认证ECR
aws ecr get-login-password --region ap-northeast-1 | \
docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
// 配置ImagePullSecret
kubectl create secret docker-registry ecr-secret \
--docker-server=123456789012.dkr.ecr.ap-northeast-1.amazonaws.com \
--docker-username=AWS \
--docker-password=$(aws ecr get-login-password)
五、自动扩缩容:Cluster Autoscaler + HPA
5.1 安装Cluster Autoscaler
eksctl create iamserviceaccount \
--cluster=my-prod-cluster \
--namespace=kube-system \
--name=cluster-autoscaler \
--attach-policy-arn=arn:aws:iam::policy/AmazonEKSClusterAutoscalerPolicy \
--approve
kubectl apply -f https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/cluster-autoscaler-autodiscover.yaml
5.2 Horizontal Pod Autoscaler(HPA)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-app
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
工作原理:当Pod平均CPU使用率超过70%时,HPA自动增加副本数;当使用率降低时,自动缩减。Cluster Autoscaler感知到Pod无法调度时,自动向EC2申请新节点。
六、监控与日志
6.1 CloudWatch Container Insights
ClusterName=my-prod-cluster
RegionName=ap-northeast-1
FluentBitHttpPort='2020'
FluentBitReadFromHead='Off'
curl https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/container-insights/fluent-bit.yaml | \
sed "s/{{cluster_name}}/${ClusterName}/g;s/{{region_name}}/${RegionName}/g;s/{{http_server_port}}/${FluentBitHttpPort}/g;s/{{read_from_head}}/${FluentBitReadFromHead}/g" | \
kubectl apply -f -
安装完成后,在CloudWatch控制台的Container Insights面板即可看到集群CPU、内存、网络、Pod等多维度指标。
6.2 Prometheus + Grafana监控栈
对于需要自建监控栈的场景,推荐使用kube-prometheus-stack Helm chart:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
七、EKS与替代方案价格对比
| 方案 | 控制面费用 | 计算费用(3节点m5.large) | 月度总费用 | 运维复杂度 |
|---|---|---|---|---|
| EKS(托管节点) | $72 | ~$210(EC2按需) | ~$282 | 低 |
| EKS(Spot节点) | $72 | ~$63-84(60-70%折扣) | ~$135-156 | 中 |
| EKS(Fargate,3×2vCPU) | $72 | ~$330(vCPU+内存) | ~$402 | 最低 |
| 自建K8s(EC2单节点) | $0 | ~$70(t3.large) | ~$70 | 最高 |
| ECS(Fargate) | $0 | ~$330 | ~$330 | 低 |
| GKE Autopilot | ~$74 | 按Pod计费 | ~$150-400 | 最低 |
| 阿里云ACK(托管版) | ¥600+/月 | ~¥200(3节点) | ~¥800+ | 中 |
关键结论:EKS控制面$0.10/小时对于3节点以上集群有明显优势。如果你只需要少量容器运行,ECS Fargate可能更便宜(无控制面费用)。如果你需要完整的Kubernetes API和生态,EKS是AWS上唯一的选择。
八、常见问题 FAQ
Q: EKS免费套餐包含控制面费用吗? A: 不包含。EKS控制面$0.10/小时不在AWS 12个月免费套餐范围内。免费套餐只涵盖EC2实例(t2.micro/t3.micro)和部分其他服务。想省钱建议用单节点EKS + Spot实例。
Q: EKS支持哪些AWS区域? A: EKS支持全球30+区域。推荐选择离用户最近的区域,如东京(ap-northeast-1)、新加坡(ap-southeast-1)、美西(us-west-2)。中国大陆用户可考虑香港(ap-east-1)或东京区域。
Q: EKS集群升级会中断服务吗?
A: 控制面升级由AWS执行,通常无感知。工作负载升级(节点组AMIs)支持滚动更新,配合Pod Disruption Budget可实现零中断。eksctl提供 eksctl upgrade 命令自动处理升级流程。
Q: EKS和ACK(阿里云容器服务)怎么选? A: 如果你的业务主要在AWS生态(IAM、S3、Lambda等),选EKS。如果面向中国大陆用户或已深度使用阿里云,选ACK。两者都支持标准Kubernetes API,迁移成本不高。详见 阿里云ECS选购指南。
Q: 小团队/个人项目适合用EKS吗? A: 如果你有3个以上微服务需要编排,且团队有Kubernetes基础,EKS值得投入。如果你只有1-2个应用,Lightsail或ECS Fargate更简单。可参考 Lightsail vs EC2选型。
Q: 如何降低EKS集群成本? A: 五步省钱法:(1) 用Spot实例做无状态工作负载;(2) 启用Cluster Autoscaler自动伸缩节点;(3) 用节点亲和性把稳定负载放到预留实例;(4) 合理设置Pod的requests/limits避免资源浪费;(5) 用Savings Plans锁定长期折扣。详见 AWS账单管理指南。
九、总结
AWS EKS是生产级Kubernetes的最佳托管方案之一。它将控制面运维完全交给AWS,让你专注于应用和业务逻辑。 在实际落地过程中,很多团队容易陷入两个误区:一是过度追求完美的架构设计而迟迟不上线,二是为了省钱把所有工作负载都塞到一个集群里导致资源争抢。正确做法是先用最小规模跑通核心业务流程,再逐步优化和扩展。
EKS的核心建议可以总结为五句话:小规模用Fargate免运维、中大规模用托管节点组加Spot省钱、始终配置Cluster Autoscaler实现弹性伸缩、用Container Insights或Prometheus做好监控告警、定期检查集群安全配置和IAM权限最小化。对于需要完整Kubernetes API和丰富插件生态的团队,EKS是AWS上的最优选择。
如果你刚刚开始接触容器化部署,建议先从ECS Fargate入手熟悉容器概念,再迁移到EKS获取更强的编排能力。AWS的容器服务生态非常完善,无论选择哪种方案,都能获得稳定的生产级支持。结合AWS免费套餐和Savings Plans,即使是个人开发者也能以极低成本体验企业级容器编排能力。
⚠️ 文中价格为 2026 年参考价,实际费用随区域和官方调价变动,请以 AWS 官网为准。
🚀 需要 AWS 国际版账号?通过 3.chengzicloud.cloud 获取最新注册教程与专属优惠,助你轻松上云。
本文由 3.chengzicloud.cloud 提供,点击访问首页了解更多