Amazon EKS 容器集群概览
Amazon Elastic Kubernetes Service (EKS) 是 AWS 托管的 Kubernetes 服务,提供高可用、安全、可扩展的容器编排平台。
EKS 核心概念
什么是 EKS
EKS 的本质:
EKS = 托管的 Kubernetes 控制平面 + 灵活的工作节点
├─ 控制平面(Control Plane)
│ ├─ 由 AWS 完全托管
│ ├─ 多 AZ 高可用部署
│ ├─ 自动升级和打补丁
│ ├─ API Server、Scheduler、Controller Manager
│ └─ etcd 数据库(AWS 管理)
│
└─ 工作节点(Worker Nodes)
├─ EC2 实例(Managed Node Groups)
├─ Fargate(无服务器)
├─ 自管理节点(Self-managed)
└─ 混合部署(On-Premises + Cloud)
EKS 的优势
为什么选择 EKS:
托管优势:
├─ 无需管理 Kubernetes 控制平面
├─ 自动高可用(多 AZ 部署)
├─ 自动版本升级和安全补丁
├─ 与 AWS 服务深度集成
└─ 企业级 SLA 保证
技术优势:
├─ 上游 Kubernetes 兼容
├─ CNCF 认证
├─ 支持所有 Kubernetes 生态工具
├─ 灵活的网络方案(VPC CNI)
└─ 强大的 IAM 集成(IRSA)
运维优势:
├─ 简化的集群管理
├─ Managed Node Groups 自动更新
├─ 内置监控和日志
├─ 弹性伸缩
└─ 灾难恢复支持
EKS 架构
完整的 EKS 架构:
┌─────────────────────────────────────────────────────────────┐
│ AWS Region (us-east-1) │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ EKS Control Plane (托管) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ AZ-A │ │ AZ-B │ │ AZ-C │ │ │
│ │ │ API Srv │ │ API Srv │ │ API Srv │ │ │
│ │ │ etcd │ │ etcd │ │ etcd │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ ↓ ↓ ↓ │ │
│ └────────────┼─────────┼─────────┼───────────────────┘ │
│ │ │ │ │
│ ┌────────────┼─────────┼─────────┼───────────────────┐ │
│ │ │ VPC (10.0.0.0/16) │ │
│ │ ┌─────────▼──────┐ ┌─────────▼──────┐ ┌────────▼────┐
│ │ │ Private-AZ-A │ │ Private-AZ-B │ │ Private-AZ-C│
│ │ │ 10.0.11.0/24 │ │ 10.0.12.0/24 │ │10.0.13.0/24 │
│ │ │ │ │ │ │ │
│ │ │ ┌────────────┐ │ │ ┌────────────┐ │ │┌──────────┐ │
│ │ │ │ EKS Nodes │ │ │ │ EKS Nodes │ │ ││EKS Nodes │ │
│ │ │ │ • t3.large │ │ │ │ • t3.large │ │ ││• t3.large│ │
│ │ │ │ • Pods │ │ │ │ • Pods │ │ ││• Pods │ │
│ │ │ └────────────┘ │ │ └────────────┘ │ │└──────────┘ │
│ │ └────────┬───────┘ └────────┬───────┘ └──────┬──────┘
│ │ │ │ │ │
│ │ ┌────────▼──────┐ ┌─────────▼──────┐ ┌──────▼──────┐
│ │ │ Public-AZ-A │ │ Public-AZ-B │ │ Public-AZ-C │
│ │ │ NAT Gateway │ │ NAT Gateway │ │ NAT Gateway │
│ │ └───────┬───────┘ └────────┬───────┘ └──────┬──────┘
│ │ └──────────┬─────────┴────────────────┘ │
│ │ │ │
│ │ Internet Gateway │
│ └─────────────────────┼───────────────────────────────────┘
└────────────────────────┼─────────────────────────────────────┘
│
Internet
EKS 组件详解
控制平面组件
托管的控制平面:
组件:
├─ API Server
│ ├─ Kubernetes API 端点
│ ├─ 身份验证和授权
│ ├─ 多 AZ 负载均衡
│ └─ 公有/私有端点选项
│
├─ etcd
│ ├─ 集群状态存储
│ ├─ 多 AZ 复制
│ ├─ 自动备份
│ └─ 加密静态数据
│
├─ Controller Manager
│ ├─ 控制器循环
│ ├─ 资源调节
│ └─ 自愈机制
│
└─ Scheduler
├─ Pod 调度
├─ 资源分配
└─ 亲和性规则
AWS 托管特性:
├─ 99.95% SLA
├─ 自动版本升级
├─ 自动安全补丁
├─ 自动备份
└─ 无需运维操作
工作节点类型
三种节点类型对比:
1. Managed Node Groups(推荐)
优点:
├─ AWS 自动管理节点生命周期
├─ 自动节点更新和打补丁
├─ 集成 Auto Scaling Groups
├─ 一键创建和更新
└─ 自动注册到 EKS 集群
适用场景:
├─ 生产环境(推荐)
├─ 需要稳定性和易管理性
└─ 标准 EC2 实例
2. Fargate(无服务器)
优点:
├─ 无需管理节点
├─ 按 Pod 计费
├─ 自动扩展
└─ 隔离性更好
限制:
├─ 不支持 DaemonSet
├─ 不支持特权容器
├─ 存储选项有限
└─ 成本较高
适用场景:
├─ 突发工作负载
├─ CI/CD 作业
└─ 无状态应用
3. Self-managed(自管理)
优点:
├─ 完全控制节点
├─ 自定义 AMI
├─ 特殊硬件需求
└─ 混合云部署
缺点:
├─ 需要手动管理
├─ 复杂的更新流程
└─ 运维成本高
适用场景:
├─ 特殊硬件需求(GPU)
├─ 高度定制化
└─ 混合云环境
EKS 网络模型
VPC CNI 插件
AWS VPC CNI 工作原理:
特点:
├─ Pod 直接使用 VPC IP 地址
├─ Pod 与 VPC 资源直接通信
├─ 无需 NAT 或覆盖网络
├─ 原生 AWS 网络性能
└─ 与安全组集成
IP 分配:
├─ 每个节点分配多个 ENI(弹性网络接口)
├─ 每个 ENI 分配多个辅助 IP
├─ Pod 从 ENI 的辅助 IP 池获取 IP
└─ IP 地址预热和池管理
优势:
├─ 网络性能最佳
├─ 简化网络架构
├─ 直接使用 AWS 网络特性
└─ 与现有 VPC 无缝集成
注意事项:
├─ IP 地址消耗较多
├─ 需要规划足够的 IP 地址空间
├─ ENI 数量限制(取决于实例类型)
└─ 建议使用 /24 或更大的子网
子网规划最佳实践
推荐的子网配置:
生产环境子网规划:
├─ 公有子网(每 AZ):10.0.1-3.0/24
│ ├─ Internet Gateway
│ ├─ NAT Gateway
│ ├─ 负载均衡器
│ └─ Bastion Host
│
└─ 私有子网(每 AZ):10.0.11-13.0/24
├─ EKS Worker Nodes
├─ Pod IP 池
├─ 通过 NAT Gateway 访问互联网
└─ 内部服务通信
IP 地址规划:
├─ t3.large:最多 35 个 Pod
├─ c5.xlarge:最多 58 个 Pod
├─ r5.xlarge:最多 58 个 Pod
└─ 预留 20-30% IP 地址余量
子网大小建议:
├─ 小型集群(< 20 节点):/24 子网
├─ 中型集群(20-50 节点):/23 子网
├─ 大型集群(> 50 节点):/22 或更大
└─ 考虑未来扩展需求
EKS 成本
成本结构:
控制平面:
└─ $0.10/小时($73/月)
├─ 固定费用
├─ 包含高可用控制平面
└─ 无流量费用
工作节点:
├─ EC2 实例费用(按需/预留/Spot)
├─ EBS 卷存储费用
└─ 数据传输费用
Fargate:
├─ 按 vCPU 和内存计费
├─ $0.04048/vCPU/小时
└─ $0.004445/GB/小时
网络:
├─ NAT Gateway:$0.045/小时
├─ NAT 数据处理:$0.045/GB
└─ 跨 AZ 流量:$0.01/GB
示例(中小型集群):
├─ 控制平面:$73/月
├─ 6x t3.large(On-Demand):$356/月
├─ 3x NAT Gateway:$100/月
├─ EBS 存储(300GB):$30/月
└─ 总计:约 $560/月
学习路径
本章节按以下顺序组织,建议循序渐进学习:
1. 集群创建和配置
内容:
- EKS 集群创建流程
- IAM 角色和权限配置
- VPC 和子网规划
- 安全组配置
- 集群端点访问模式
- 日志和监控启用
学习目标:
✓ 理解 EKS 架构和组件
✓ 掌握集群创建流程
✓ 配置网络和安全
2. 节点组管理
内容:
- Managed Node Groups 创建
- 节点实例类型选型
- 启动模板配置
- Auto Scaling 配置
- 多节点组策略
- 节点组更新和维护
学习目标:
✓ 掌握节点组创建和管理
✓ 理解实例类型选择
✓ 配置弹性伸缩
3. 网络和存储
内容:
- VPC CNI 插件配置
- Pod 网络规划
- 负载均衡器集成(ALB/NLB)
- Ingress 控制器
- EBS CSI Driver
- EFS CSI Driver
- 持久化存储配置
学习目标:
✓ 理解 Pod 网络模型
✓ 配置负载均衡和 Ingress
✓ 使用持久化存储
4. 安全和权限
内容:
- IRSA(IAM Roles for Service Accounts)
- Pod Security Standards
- RBAC 配置
- 网络策略
- Secrets 管理
- 镜像安全扫描
学习目标:
✓ 实现 Pod 级别 IAM 权限
✓ 配置 Kubernetes RBAC
✓ 加强集群安全
5. 监控和日志
内容:
- CloudWatch Container Insights
- Fluent Bit 日志采集
- Prometheus 监控
- 告警配置
- 性能优化
学习目标:
✓ 配置完整的可观测性
✓ 实现日志聚合和分析
✓ 设置告警规则
6. 故障排查
内容:
- 常见问题诊断
- 节点故障处理
- Pod 调度问题
- 网络连接问题
- 存储问题
- 权限问题
- 调试工具和技巧
学习目标:
✓ 掌握故障排查方法
✓ 使用诊断工具
✓ 快速定位和解决问题
快速开始
前置条件
# 1. 安装 AWS CLI
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# 2. 配置 AWS 凭证
aws configure
# 3. 安装 kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 4. 安装 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
# 验证安装
aws --version
kubectl version --client
eksctl version
最小化快速启动
# 使用 eksctl 快速创建集群(开发/测试)
eksctl create cluster \
--name dev-cluster \
--region us-east-1 \
--nodegroup-name standard-workers \
--node-type t3.medium \
--nodes 2 \
--nodes-min 1 \
--nodes-max 4 \
--managed
# 验证集群
kubectl get nodes
kubectl get pods -A
最佳实践总结
EKS 生产部署清单:
架构设计:
✅ 多 AZ 部署(至少 3 个可用区)
✅ 私有子网运行工作节点
✅ 每 AZ 独立 NAT Gateway
✅ VPC Endpoints 减少 NAT 成本
✅ 合理的 CIDR 规划
节点配置:
✅ 使用 Managed Node Groups
✅ 混合使用 On-Demand 和 Spot 实例
✅ 根据工作负载选择实例类型
✅ 配置 Auto Scaling
✅ 定期更新节点 AMI
安全配置:
✅ 私有 API 端点 + 公有端点(限制 IP)
✅ 启用集群日志
✅ 使用 IRSA 替代节点 IAM 角色
✅ 配置 Pod Security Standards
✅ 定期审计权限
运维配置:
✅ 启用 CloudWatch Container Insights
✅ 配置 Fluent Bit 日志采集
✅ 设置告警规则
✅ 自动备份(Velero)
✅ 文档化运维流程
准备好了吗? 让我们开始深入学习 Amazon EKS!点击下方的子章节开始学习。