在AWS上使用EKS创建Kubernetes集群的完整指南
前言
Kubernetes作为目前最流行的容器编排平台,已经成为云原生应用开发的事实标准。AWS提供的Elastic Kubernetes Service (EKS) 让开发者能够轻松在AWS云上部署、管理和扩展Kubernetes集群。本文将详细介绍如何在AWS上使用EKS创建高可用的Kubernetes集群。
EKS概述
Amazon EKS是一项完全托管的Kubernetes服务,具有以下核心优势:
- 高可用性架构:EKS自动将控制平面节点分布在多个可用区(AZ)中,消除单点故障
- Kubernetes认证:完全兼容标准Kubernetes,可以使用社区现有的工具和插件
- 无缝迁移:任何标准Kubernetes环境中的应用都可以轻松迁移到EKS
- 简化管理:AWS负责管理Kubernetes控制平面,用户只需关注工作节点和应用
准备工作
权限配置
在开始创建集群前,需要确保拥有适当的IAM权限。如果使用推荐的Cloud9开发环境,以下权限会自动配置:
Cloud9 IDE角色权限:
- EC2完全访问权限
- IAM完全访问权限
- S3完全访问权限
- VPC完全访问权限
- CloudFormation只读访问
- Route53完全访问权限
EKS服务角色权限:
- AmazonEKSClusterPolicy
- AmazonEKSServicePolicy
创建EKS集群详细步骤
1. 创建控制平面
控制平面是Kubernetes集群的大脑,EKS会自动创建并管理多个主节点以保证高可用性。
执行以下命令创建集群控制平面:
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
参数说明:
--name: 指定集群名称--role-arn: 指定EKS服务角色ARN--resources-vpc-config: 指定子网和安全组配置--kubernetes-version: 指定Kubernetes版本
常见问题处理:
如果遇到可用区资源不足的错误(UnsupportedAvailabilityZoneException),需要执行以下步骤:
- 获取可用的AZ列表:
export EKS_VALID_AZS=us-east-1a,us-east-1b
- 查询对应子网ID:
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$EKS_VPC_ID" "Name=availabilityZone,Values=$EKS_VALID_AZS" --query 'Subnets[*].[SubnetId]' --output text
- 更新子网ID环境变量并重新创建集群
2. 配置kubectl访问
集群创建完成后(状态为ACTIVE),需要配置kubectl访问凭证:
aws s3 cp s3://aws-kubernetes-artifacts/v0.5/create-kubeconfig.sh . && \
chmod +x create-kubeconfig.sh && \
. ./create-kubeconfig.sh
验证配置:
kubectl get service
3. 创建工作节点
EKS采用控制平面与工作节点分离的架构,现在我们来创建工作节点:
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}\"}]"
4. 将工作节点加入集群
执行以下脚本配置工作节点加入集群的认证:
aws s3 cp s3://aws-kubernetes-artifacts/v0.5/aws-auth-cm.sh . && \
chmod +x aws-auth-cm.sh && \
. ./aws-auth-cm.sh
监控节点状态直到全部变为Ready:
kubectl get nodes --watch
集群上下文管理
Kubernetes支持多集群管理,通过kubeconfig文件存储不同集群的配置。常用命令:
查看所有上下文:
kubectl config get-contexts
查看当前上下文:
kubectl config current-context
切换上下文:
kubectl config use-context <config-name>
替代方案:使用kops创建集群
除了EKS,还可以使用kops工具创建Kubernetes集群。kops支持创建高可用集群,主节点和工作节点分布在多个可用区。
创建gossip协议集群示例:
kops create cluster \
--name example.cluster.k8s.local \
--master-count 3 \
--node-count 5 \
--zones $AWS_AVAILABILITY_ZONES \
--yes
验证集群:
kops validate cluster
总结
本文详细介绍了在AWS上创建Kubernetes集群的两种主要方式:使用托管的EKS服务和使用kops工具。EKS方案更适合生产环境,由AWS负责控制平面的管理和维护;kops方案则提供更多自定义选项,适合需要精细控制集群配置的场景。无论选择哪种方式,AWS都提供了完善的工具链和文档支持,让Kubernetes集群的创建和管理变得更加简单高效。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



