처음에 EKS 클러스터 생성하는 법을 모르겠어서 애먹었던 게 생각나서..
git clone https://github.com/dybooksIT/k8s-aws-book.git
<클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트>_아이자와 고지, 사토 가즈히코 저, 박상욱 옮김(동양북스) 참고했음.
CloudFormation에서 사용할 manifest 파일의 경로는 다음과 같다.
k8s-aws-book/eks-env/01_base_resources_cfn.yaml
여기서 VPC, subnet 등 기본 리소스가 생성된다. 때문에 이에 관한 권한이 필요한데, 다음의 세 방법 중 하나를 택한다.
1. admin 계정으로 생성한다.
2. 현재 IAM 계정에 AdministratorAccess 정책을 추가한 다음 리소스를 구성하고, AdministratorAccess 정책을 다시 삭제한다.
3. CloudFormationFullAccess 정책과 다음 인라인 정책(ChatGPT피셜)을 추가한다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:CreateVpc",
"ec2:CreateSubnet",
"ec2:CreateInternetGateway",
"ec2:AttachInternetGateway",
"ec2:CreateRouteTable",
"ec2:CreateRoute",
"ec2:AssociateRouteTable",
"ec2:ModifyVpcAttribute",
"ec2:ModifySubnetAttribute",
"ec2:DeleteVpc",
"ec2:DeleteSubnet",
"ec2:DeleteInternetGateway",
"ec2:DetachInternetGateway",
"ec2:DeleteRouteTable",
"ec2:DeleteRoute",
"ec2:DisassociateRouteTable"
],
"Resource": "*"
}
]
}
사실 admin으로 하는 게 편하긴 하다.
aws cloudformation create-stack \
--stack-name myteststack \
--template-body file://<BASE_DIRECTORY>/k8s-aws-book/eks-env/01_base_resources_cfn.yaml
그냥 콘솔에서 01_base_resources_cfn.yaml 파일을 넣어서 만들어도 되고, 위와 같이 명령어를 쳐도 된다.
클러스터 생성 시에 서브넷 정보가 필요하므로 AWS 콘솔에서 이를 확인한다.

eksctl create cluster \
--vpc-public-subnets subnet-05d22431a1ff620af,subnet-09eb7e550358e4008,subnet-03f750bf78bc5be2c \
--name eks-work-cluster \
--region ap-northeast-2 \
--version 1.24 \
--nodegroup-name eks-work-nodegroup \
--node-type t2.small \
--nodes 2 \
--nodes-min 2 \
--nodes-max 5
이 명령어도 책에 나와 있는 건데, --version 1.19만 --version 1.24로 바꿨다.
1.19로 하면 더이상 지원되지 않으며, 1.22~1.25만 지원한다고 메시지가 뜬다.
당연한 얘기지만 퍼블릭 서브넷은 앞의 리소스 구성 단계에서 만들어진 서브넷 ID를 확인해 사용하고,
클러스터 이름(--name)이나 리전(--region), 그 외 모든 옵션은 본인의 필요에 따라 바꿔 써야 한다.