如何通过 CDK 创建带节点的 EKS 集群?

How do I create an EKS cluster with nodes via CDK?

我可以通过 CDK 在我想要的 VPC 上部署 Kubernetes Fargate 集群:

const vpc = ec2.Vpc.fromLookup(this, 'vpc', {
  vpcId: 'vpc-abcdefg'
})

const cluster = new eks.FargateCluster(this, 'sample-eks', {
  version: eks.KubernetesVersion.V1_21,
  vpc,
})

cluster.addNodegroupCapacity('node-group-capacity', {
  minSize: 2,
  maxSize: 2,
})

但是,此集群中没有节点:

$ kubectl config get-clusters                 
NAME
minikube
arn:aws:eks:us-east-1:<account_number>:cluster/<cluster_name>

$ kubectl get nodes                           
No resources found

很困惑为什么会这样,因为我认为 addNodegroupCapacity 方法应该向集群添加节点。我想我可以通过 eksctl 添加节点 post-hoc,但我想知道是否可以通过 CDK 部署节点。

我的错误是没有向 aws-auth ConfigMap 添加具有足够权限的 role/user。这意味着集群没有创建节点的适当权限。以下解决了我的问题:

const role = iam.Role.fromRoleName(this, 'admin-role', '<my-admin-role>');
cluster.awsAuth.addRoleMapping(role, { groups: [ 'system:masters' ]});

<my-admin-role> 参数是我在登录 AWS 时承担的角色的名称。我通过 运行 aws sts get-caller-identity 找到了它,其中 returns 一个 JSON 文档提供了您担任的角色的 ARN。对我来说是 arn:aws:sts::<account-number>:assumed-role/<my-admin-role>/<my-username>.

这也解决了另一个问题,因为我无法通过 kubectl 与集群交互。我会收到以下错误消息:error: You must be logged in to the server (Unauthorized)。将我担任的角色添加到 aws-auth ConfigMap 后,我获得了通过终端访问集群的权限。

不知道为什么我在我使用的教程中没有看到这一点配置,如果有任何评论可以帮助我解释这一点,我将不胜感激。