使用eksctl创建EKS
在上一篇中介绍了通过控制台创建eks,本章将介绍通过命令(eksctl)的方式创建EKS
先决条件
配置执行权限
使用命令的方式操作AWS 资源,我们可以以用户的身份去执行命令,也可以使用角色去执行命令。如果以用户的身份去执行命令,需要赋予用户相关权限然后配置cli,请参考上一篇中的先决条件赋予用户权限,如果以角色去执行命令,则需要创建一个新的角色(创建角色时案例选EC2),与赋予用户权限类似地将对应策略附加到角色上即可,然后将角色附加到需要操作命令的EC2 上。本篇中将介绍通过角色来执行命令

使用命令创建EKS与使用控制台创建不一样的地方是,通过命令创建时需要给用户或角色多一个CloudFormation 的操作权限,需要将如下策略添加给用户或角色以获取CloudFormation操作权限(注:下面策略中只允许在香港region进行操作,使用时请按需修改并替换AccountID 为自己账号的值)
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "cloudFormationPolicy",
"Effect": "Allow",
"Action": [
"cloudformation:CreateUploadBucket",
"cloudformation:EstimateTemplateCost",
"cloudformation:DescribeStackDriftDetectionStatus",
"cloudformation:ListExports",
"cloudformation:ListStacks",
"cloudformation:ListImports",
"cloudformation:DescribeAccountLimits",
"cloudformation:CreateStackSet",
"cloudformation:ValidateTemplate"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "cloudformation:*",
"Resource": [
"arn:aws:cloudformation:ap-east-1:<AccountID>:stack/*/*",
"arn:aws:cloudformation:ap-east-1:<AccountID>:stackset/*:*"
]
}
]
}
配置服务器环境
配置AWS CLI
如果我们使用的是EC2来运行命令 ,EC2默认是已经自带CLI ,本节可以跳过。如果需要在自己的电脑上运行aws 命令,则需要安装CLI ,可参考CLI篇中如何安装CLI 。本篇中,我们是通过以角色的方式来创建EKS,因此不需要在机器上配置用户信息,如果使用以用户来创建EKS ,则需要通过aws configure
配置用户信息
配置eksctl
$ curl -OL "https://github.com/weaveworks/eksctl/releases/download/0.15.0-rc.2/eksctl_$(uname -s)_amd64.tar.gz"
$ tar -zxf eksctl_$(uname -s)_amd64.tar.gz
$ sudo mv ./eksctl /usr/local/bin
$ eksctl version
检查eksctl 版本(版本>=0.15.0)
配置kubectl
$ https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html
$ curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.15.10/2020-02-22/bin/linux/amd64/kubectl
$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin
$ kubectl version
检查 kubectl 版本(版本>=1.15)
通过命令创建
$ eksctl create cluster --name=eks-test2 --node-type t3.medium --managed --alb-ingress-access --region=ap-east-1
命令大约需要二十分钟执行完成,正常执行如下图


如果在创建过程中提示没有权限,请从以下几方面做检查
角色(或用户) 是否配置正确权限(IAM 角色,EKS,EC2,CloudFormation四个方面进行检查)
角色是否附加在EC2上
策略中约束的区域,与命令中的区域是否一致
验证
[ec2-user@ip-172-31-23-36 ~]$ kubectl get node
NAME STATUS ROLES AGE VERSION
ip-192-168-20-138.ap-east-1.compute.internal Ready <none> 8m8s v1.14.9-eks-1f0ca9
ip-192-168-48-114.ap-east-1.compute.internal Ready <none> 8m12s v1.14.9-eks-1f0ca9
总结
使用eksctl 创建EKS 与 控制台创建EKS 在授权上是类似地,使用eksctl 多一个CloudFormation 权限需求
使用eksctl 创建EKS 不需要预先创建EKS 服务角色 和EKS 节点角色,这个通过CloudFormation完成
推荐使用角色创建EKS ,这样可以控制操作EKS 的权限在EC2 上而不是在用户手上,减少安全风险
参考 eks 创建教程
最后更新于
这有帮助吗?