在AWS上使用EKS创建Kubernetes集群的完整指南

在AWS上使用EKS创建Kubernetes集群的完整指南

【免费下载链接】aws-workshop-for-kubernetes AWS Workshop for Kubernetes 【免费下载链接】aws-workshop-for-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/aws-workshop-for-kubernetes

前言

Kubernetes作为目前最流行的容器编排平台,已经成为云原生应用开发的事实标准。AWS提供的Elastic Kubernetes Service (EKS) 让开发者能够轻松在AWS云上部署、管理和扩展Kubernetes集群。本文将详细介绍如何在AWS上使用EKS创建高可用的Kubernetes集群。

EKS概述

Amazon EKS是一项完全托管的Kubernetes服务,具有以下核心优势:

  1. 高可用性架构:EKS自动将控制平面节点分布在多个可用区(AZ)中,消除单点故障
  2. Kubernetes认证:完全兼容标准Kubernetes,可以使用社区现有的工具和插件
  3. 无缝迁移:任何标准Kubernetes环境中的应用都可以轻松迁移到EKS
  4. 简化管理: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),需要执行以下步骤:

  1. 获取可用的AZ列表:
export EKS_VALID_AZS=us-east-1a,us-east-1b
  1. 查询对应子网ID:
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$EKS_VPC_ID" "Name=availabilityZone,Values=$EKS_VALID_AZS" --query 'Subnets[*].[SubnetId]' --output text
  1. 更新子网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集群的创建和管理变得更加简单高效。

【免费下载链接】aws-workshop-for-kubernetes AWS Workshop for Kubernetes 【免费下载链接】aws-workshop-for-kubernetes 项目地址: https://gitcode.com/gh_mirrors/aw/aws-workshop-for-kubernetes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值