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!点击下方的子章节开始学习。