AWS Cloudformation을 이용하면 테라폼의 역할을 대신할 수 있습니다. 대신 AWS에서만 사용 가능합니다.
콘솔에서 클라우드 포메이션으로 EKS 클러스터를 생성하고 그 위에 게임을 올리는 법까지 진행해 보겠습니다.
미리 할 것)
1. 자신의 운영체제에 맞는 aws cli 설치
2. iam 계정에 Access key, Secret key 생성
3. key pair 하나 생성하기
1. Cloudformation으로 클러스터 만들기
아마존 EKS는 CSP인 AWS가 관리를 해주는 점이 일반 쿠버네티스와 차이가 있습니다.
그래서 사용자가 마스터 노드를 관리할 필요가 없다고 합니다.
현재 사용할 수 있는 EKS 표준 지원으로 사용할 수 있는 버전은 아래 사이트에서 확인할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/kubernetes-versions.html
1.30, 1.29. 1.28을 사용할 수 있다고 하니 중간에 있는 1.29를 이용해 진행해 보겠습니다. 시간이 지남에 따라 바뀔 수 있으니 진행하실 때 위의 사이트에 접속하여 사용 가능한 버전을 확인해 주시면 됩니다.
구성은 이렇게 됩니다. 워커 노드를 프라이빗에 넣지 않고 실습이니까 퍼블릭에 넣겠습니다.
키 페어를 하나 준비해 둡니다. 키 페어는 콘솔에서 EC2에 접속해서 왼쪽 메뉴 창 -> "키 페어"에서 생성하시면 됩니다.
파일 다운하기)
이제 Cloudformation 콘솔로 들어갑니다.
템플릿 파일 업로드를 눌러서 방금 다운 받은 yaml 파일을 선택해 줍니다.
스택 이름은 원하는 이름으로 설정해줍니다. 원활한 진행을 위해서는 "myeks"를 추천드립니다. 이유는 뒤에서 설명드립니다.
그리고 KeyName이 중요한데 준비해둔 KeyPair를 지정해줍니다. 이후 나머지 설정은 기본값으로 놔두고 다음을 클릭하시면 됩니다.
클라우드 포메이션의 스택이 생성되고 있습니다. 새로 고침 누르시면 Create_complete로 변경되는 것을 보실 수 있습니다.
생성이 완료될 때 까지 기다려줍니다.
만일 ROLLBACK_COMPLETE 이런 명령어가 뜬다면 S3에 들어가서 생성되어 있는 버킷을 지워주셔야 합니다. 이미 같은 이름의 버킷이 존재하기 때문에 발생하는 문제이며 S3 버킷 특성상 다른 리전에서 생성했더라도 글로벌로 지정되기 때문에 문제가 발생할 수 있습니다.
2. aws cli 연결하기
클러스터가 생성되는 동안 aws cli를 연결해 줍니다.
자신의 운영체제에 맞는 aws cli를 설치해야 합니다.
맥OS는 homebrew를 이용하시는걸 추천드립니다.
brew install awscli
설치가 완료되었으면 이제 위에서 생성한 Access key를 이용해 연결해 줍니다.
aws configure
순서대로 Access key, Secret key, region, format을 입력하면 되는데 region은 "ap-northeast-2"(서울 리전)으로 지정합니다!
그리고 형식은 json으로 하겠습니다.
연결이 완료되었다면 아래 명령어를 이용해서 생성된 ec2를 확인해 봅니다.
aws ec2 describe-instances
KeyName을 "eks-work-test1"으로 하는 인스턴스가 정상적으로 생성된 것을 확인할 수 있습니다.
aws sts get-caller-identity
위의 명령어를 입력해서 출력되는 자신의 계정 정보가 일치하는지 콘솔에서 확인해보셔도 됩니다.
콘솔에서도 확인 가능합니다.
3. 환경 변수 설정하기
1. 클러스터 네임 변수 설정
export CLUSTER_NAME=my-eks-stack-test1
my-eks-stack-test1에 클러스터의 이름(cloudformation에서 생성한 스택이름)이 들어가야 합니다.
2. VPCID 설정
export VPCID=<VPCID>
echo $VPCID
VPC이름이 아닌 ID가 들어가야 합니다.
3. 서브넷 설정
export PubSubnet1=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].SubnetId" --output text)
echo $PubSubnet1
여기서 Values=$CLUSTER_NAME-PublicSubnet1 부분이 myeks-PublicSubnet1 로 되어있을 겁니다. (실제 서브넷 이름인데) 만일 클라우드 포메이션의 스택이름을 저 처럼 다르게 해줬다면 다음과 같이 수정한 코드를 입력해 주어야 합니다.
이름을 myeks로 지정하셨다면 문제없이 진행하시면 됩니다.
# 수정된 코드
export PubSubnet1=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=myeks-PublicSubnet1" --query "Subnets[0].SubnetId" --output text)
echo $PubSubnet1
export PubSubnet2=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].SubnetId" --output text)
echo $PubSubnet2
서브넷2도 마찬가지로 다음과 같이 수정된 코드를 입력해 줍니다.
# 수정된 코드
export PubSubnet2=$(aws ec2 describe-subnets --filters "Name=tag:Name,Values=myeks-PublicSubnet2" --query "Subnets[0].SubnetId" --output text)
echo $PubSubnet2
subnet-0af9f3377c70a823c
이런 식으로 잘 출력되면 됩니다.
4. 기본 리전 설정
export AWS_DEFAULT_REGION=<기본 리전 이름>
echo $AWS_DEFAULT_REGION
서울 리전에서 진행했으니 다음과 같이 설정해줍니다.
export AWS_DEFAULT_REGION=ap-northeast-2
4. 쿠버네티스 클러스터(EKS)를 코드로 생성
eksctl create cluster \
--name $CLUSTER_NAME \
--region $AWS_DEFAULT_REGION \
--nodegroup-name $CLUSTER_NAME-nodegroup \
--node-type t3.medium \
--node-volume-size 30 \
--vpc-public-subnets "$PubSubnet1,$PubSubnet2" \
--version 1.29 \
--ssh-access \
--ssh-public-key <본인의 키페어 이름> \
--external-dns-access
주의)
위의 명령어를 터미널에 입력해 주시는데 주의할 점이 있습니다.
--ssh-public-key <본인의 키페어 이름> \ 이 부분에서 다음과 같이
--ssh-public-key eks-work-test1 \ 이렇게 적어주셔야 합니다. 키 페어의 확장자명 .pem을 적으시면 실행이 안될 겁니다.
시간이 걸리니 차분하게 기다려줍니다.
콘솔에서 EKS로 들어가 생성 된 것을 확인했습니다.
kubectl get nodes
위의 명령어 입력해서 노드 2개 잘 생성되었는지 확인
5. 쿠버네티스 노드에 게임 올리기
1) 게임 파일 다운
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/1/mario.yaml
위의 명령어를 입력해서 현재 터미널이 있는 디렉토리에 mario.yaml 파일을 다운 받습니다.
2) 배포
다운이 완료 되었으면 노드에 디플로이먼트 배포를 해줍니다.
kubectl apply -f mario.yaml
3) 접속
kubectl get services
브라우저 주소창에 로드밸런서 주소 입력
4) 확인
s 키는 선택 또는 점프 키이고, a키로는 마리오가 불꽃을 발사할 수 있습니다.
'[Cloud] > [AWS]' 카테고리의 다른 글
[AWS] EKS에서 트래픽 유발해서 HPA 스케일링 확인하기(with ECR) (1) | 2024.08.30 |
---|---|
[AWS] AWS CLI로 EKS 클러스터 만들기 (0) | 2024.08.29 |
[AWS] IAM 계정에 액세스 키 만들기 (0) | 2024.08.27 |
[AWS] SSH 인바운드 규칙 추가 (0) | 2024.08.11 |
[AWS] 권한(permission), IAM 정책(policy), IAM 역할(role) (0) | 2024.08.07 |