AWS Kubernetes 工作坊安装与使用指南
概述
Amazon Web Services (AWS) Kubernetes 工作坊是一个自定进度的实践教程,专为希望在 AWS 上利用 Kubernetes 的开发团队和运维团队设计。本指南将详细介绍如何安装、配置和使用这个工作坊环境,帮助您快速掌握在 AWS 上运行 Kubernetes 集群的核心技能。
环境准备
系统要求
在开始之前,请确保您具备以下条件:
- AWS 账户(将产生费用,预计每天 < $20)
- 基本的 AWS 服务了解(EC2、VPC、IAM 等)
- 基本的 Kubernetes 概念理解
- 稳定的网络连接
费用说明
⚠️ 重要提醒:使用本工作坊会产生 AWS 服务费用,主要包括:
- EC2 实例费用(Cloud9 环境和工作节点)
- EBS 存储费用
- 网络传输费用
- 其他 AWS 服务费用
建议在使用完成后及时清理资源以避免不必要的费用。
安装步骤
1. 创建 Cloud9 开发环境
AWS Cloud9 是一个基于云的集成开发环境(IDE),让您可以通过网页浏览器编写、运行和调试容器化工作负载。
通过 CloudFormation 创建环境
使用以下 CloudFormation 模板创建开发环境:
选择区域选项:
| 区域 | 新建 VPC | 使用现有 VPC |
|---|---|---|
| 北弗吉尼亚 (us-east-1) | 部署到 AWS | 部署到 AWS |
| 俄勒冈 (us-west-2) | 部署到 AWS | 部署到 AWS |
部署步骤
- 点击相应的部署链接
- 接受默认的堆栈名称,点击 Next
- 添加标签(如 Key=Name, Value=k8s-workshop)
- 勾选 I acknowledge that AWS CloudFormation might create IAM resources with custom names
- 点击 Create
等待所有资源创建完成(状态变为 CREATE_COMPLETE)。
2. 配置 Cloud9 环境
禁用临时凭证
打开 Cloud9 IDE 后,进行以下配置:
- 打开 "AWS Cloud9" 菜单
- 进入 "Preferences" → "AWS Settings"
- 禁用 "AWS managed temporary credentials"
运行构建脚本
在 Cloud9 的终端中执行以下命令安装必要工具:
aws s3 cp s3://aws-kubernetes-artifacts/v0.5/lab-ide-build.sh . && \
chmod +x lab-ide-build.sh && \
. ./lab-ide-build.sh
该脚本将安装以下组件:
jq- JSON 处理工具kubectl- Kubernetes 命令行工具heptio/authenticator- EKS 集群认证工具kops- Kubernetes 操作工具- 配置 AWS CLI 和环境变量
- 创建 SSH 密钥
- 克隆工作坊代码库
3. 创建 Kubernetes 集群
使用 Amazon EKS 创建集群
EKS (Elastic Kubernetes Service) 是 AWS 托管的 Kubernetes 服务,提供高可用性和自动管理。
创建主节点
aws eks create-cluster \
--name k8s-workshop \
--role-arn $EKS_SERVICE_ROLE \
--resources-vpc-config subnetIds=${EKS_SUBNET_IDS},securityGroupIds=${EKS_SECURITY_GROUPS} \
--kubernetes-version 1.10
检查集群状态
aws eks describe-cluster --name k8s-workshop --query cluster.status --output text
等待状态变为 ACTIVE(通常需要 5-10 分钟)。
创建 kubeconfig 文件
aws s3 cp s3://aws-kubernetes-artifacts/v0.5/create-kubeconfig.sh . && \
chmod +x create-kubeconfig.sh && \
. ./create-kubeconfig.sh
创建工作节点
aws cloudformation create-stack \
--stack-name k8s-workshop-worker-nodes \
--template-url https://amazon-eks.s3-us-west-2.amazonaws.com/1.10.3/2018-06-05/amazon-eks-nodegroup.yaml \
--capabilities "CAPABILITY_IAM" \
--parameters "[{\"ParameterKey\": \"KeyName\", \"ParameterValue\": \"${AWS_STACK_NAME}\"},
{\"ParameterKey\": \"NodeImageId\", \"ParameterValue\": \"${EKS_WORKER_AMI}\"},
{\"ParameterKey\": \"ClusterName\", \"ParameterValue\": \"k8s-workshop\"},
{\"ParameterKey\": \"NodeGroupName\", \"ParameterValue\": \"k8s-workshop-nodegroup\"},
{\"ParameterKey\": \"ClusterControlPlaneSecurityGroup\", \"ParameterValue\": \"${EKS_SECURITY_GROUPS}\"},
{\"ParameterKey\": \"VpcId\", \"ParameterValue\": \"${EKS_VPC_ID}\"},
{\"ParameterKey\": \"Subnets\", \"ParameterValue\": \"${EKS_SUBNET_IDS}\"}]"
启用工作节点加入集群
aws s3 cp s3://aws-kubernetes-artifacts/v0.5/aws-auth-cm.sh . && \
chmod +x aws-auth-cm.sh && \
. ./aws-auth-cm.sh
监控节点状态
kubectl get nodes --watch
等待所有节点状态变为 Ready。
工作坊内容结构
AWS Kubernetes 工作坊包含多个学习路径,每个路径针对不同的使用场景:
基础路径 (Standard Path)
- 101: 开始使用 - Cloud9 环境设置
- 102: 创建第一个集群 - EKS 集群创建
- 103: Kubernetes 概念 - 基础概念学习
开发路径 (Developer Path)
- 301: 本地开发 - 本地开发环境配置
- 302: 应用发现 - 服务发现机制
- 303: 应用更新 - 滚动更新策略
- 304: 应用扩缩容 - 自动扩缩容
运维路径 (Operations Path)
- 201: 集群监控 - 监控方案部署
- 202: 服务网格 - 服务网格集成
- 203: 集群升级 - 集群升级策略
- 204: 集群日志 - EFK 日志方案
核心功能特性
多集群管理
使用 kubectl config 管理多个集群上下文:
# 查看所有上下文
kubectl config get-contexts
# 查看当前上下文
kubectl config current-context
# 切换上下文
kubectl config use-context <context-name>
高可用架构
实践示例
部署简单应用
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
# 部署应用
kubectl apply -f deployment.yaml
# 查看部署状态
kubectl get deployments
# 查看 Pod 状态
kubectl get pods
# 查看服务详情
kubectl describe deployment nginx-deployment
服务暴露
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
故障排除
常见问题及解决方案
| 问题 | 症状 | 解决方案 |
|---|---|---|
| EKS 集群创建失败 | UnsupportedAvailabilityZoneException | 移除资源受限的可用区 |
| 节点无法加入集群 | Nodes stuck in NotReady | 检查 aws-auth ConfigMap |
| 权限问题 | AccessDenied exceptions | 验证 IAM 角色权限 |
| 网络连接问题 | Pods cannot communicate | 检查安全组和网络策略 |
集群状态检查
# 检查集群健康状态
kubectl cluster-info
# 检查节点状态
kubectl get nodes -o wide
# 检查系统组件状态
kubectl get pods -n kube-system
# 检查事件日志
kubectl get events --sort-by='.lastTimestamp'
资源清理
完成工作坊学习后,请务必清理资源以避免持续产生费用。
清理步骤
-
删除工作节点:
# 删除 CloudFormation 堆栈 aws cloudformation delete-stack --stack-name k8s-workshop-worker-nodes -
删除 EKS 集群:
# 列出集群 aws eks list-clusters # 删除集群 aws eks delete-cluster --name k8s-workshop -
删除 Cloud9 环境:
# 删除主堆栈 aws cloudformation delete-stack --stack-name k8s-workshop
验证清理
# 确认所有资源已删除
aws cloudformation list-stacks --stack-status-filter DELETE_COMPLETE
# 确认无运行中的集群
aws eks list-clusters
最佳实践
安全实践
- 最小权限原则:为每个组件分配最小必要权限
- 网络隔离:使用网络策略限制 Pod 间通信
- 密钥管理:使用 AWS Secrets Manager 或 Kubernetes Secrets
- 审计日志:启用 CloudTrail 和 Kubernetes 审计日志
成本优化
- 使用 Spot 实例:对非关键工作负载使用 Spot 实例
- 自动扩缩容:配置 HPA 和 Cluster Autoscaler
- 资源限制:为 Pod 设置合理的资源请求和限制
- 定期清理:建立资源清理流程
性能优化
总结
AWS Kubernetes 工作坊提供了一个完整的实践环境,帮助您:
- ✅ 掌握在 AWS 上部署和管理 Kubernetes 集群
- ✅ 学习现代容器化应用开发的最佳实践
- ✅ 理解云原生应用的运维和监控
- ✅ 构建高可用、可扩展的云原生架构
通过本指南,您已经了解了工作坊的安装配置流程、核心功能特性以及最佳实践建议。现在您可以开始探索工作坊中的各个模块,深入学习 Kubernetes 在 AWS 上的各种应用场景。
记住定期检查 AWS 费用控制台,确保在完成学习后及时清理资源,避免不必要的费用支出。
Happy Kuberneting! 🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



