EKS를 배포하는 방법에는 3가지가 있다고 했다. (관리콘솔, eksctl, IaC)
여기서 우리는 관리콘솔 및 eksctl을 통해서 배포하는 방법에 대해서 알아보도록 할 것이다.
(*Terraform을 이용한 IaC 배포 방식에 대해서는 추후 공부 후 정리 예정이다.)
본 글에서는 이러한 배포를 하기 위한 사전작업인 IAM 사용자 생성 및 CloudFormation을 통한 인프라 배포를 수행할 것이다.
✅ 필수
🔑 IAM 사용자 생성 및 액세스 키 생성 작업
사용자 추가
버튼을 클릭합니다.사용자는 다음 로그인 시 새 암호를 생성해야 합니다.
를 체크 해제하고 다음
버튼을 클릭합니다.다음
버튼을 클릭합니다.사용자 생성
버튼을 클릭합니다..csv 파일 다운로드
버튼을 클릭하여 자신의 PC의 디렉터리에 저장합니다.사용자 목록으로 돌아가기
버튼을 클릭하여 IAM 사용자 생성을 마무리합니다.생성한 사용자 이름
을 클릭합니다.보안 자격 증명
탭을 클릭하고 [액세스 키] 영역에서 액세스 키 만들기
버튼을 클릭합니다.다음
버튼을 클릭합니다.액세스 키 만들기
버튼을 클릭합니다..csv 파일 다운로드
버튼을 클릭하여 자신의 PC의 디렉터리에 저장합니다.완료
버튼을 클릭하여 IAM 사용자 액세스 키 생성을 마무리합니다.Note: IAM 사용자로 관리 콘솔에 로그인 할때 계정 ID가 필요하니 잘 메모해 둡니다.
먼저 CloudFormation을 통해서 기본적인 VPC 및 my-eks-host 라는 배스천 호스트를 만든다. 이 배스천 호스트를 통해서 우리는 EKS 환경을 만들고 접근하여 작업하게 된다.
템플릿 다운로드 : Goolge Drive
AWS CloudFormation 생성 : CloudFormation
준비된 템플릿을 선택하고, 받은 템플릿을 업로드하여 그대로 CloudFormation을 생성해주면 된다.
⚠ 주의 사항
- IAM 계정으로 로그인한 후 액세스 키를 발급받은 상태에서 진행한다.
- SSH 접속을 위한 EC2-KeyPair가 발급되어 있어야 한다.
이 때, 미리 발급받아 두었던 EC2 key 페어가 필요하다.
키페어가 없다면 EC2-KeyPair에서 생성해 주도록 하자.
이과정이 완료되면 다음은 부분들이 전부 한번에 배포가 완료된 것을 확인할 수 있다.
이제 관리를 위해서 생성해둔 EC2 인스턴스에 접속해보자.
내 로컬 컴퓨터 CMD를 열고, 각자의 SSH 키에 해당하는 접속을 하면된다.
ssh 명령어 확인
접속 성공
접속이 성공적으로 완료되었다면, 이제 제대로 설치가 완료되었는지 확인해 보자.
Ctrl + V
명령이 동작하지 않는다면, 마우스 오른쪽을 클릭하면 된다.
복사할 때도 쭉 드래그하고 마우스 오른쪽을 클릭하면 된다.
whoami
whoami를 입력하여 root 사용자임을 확인합니다.
Note: root 사용자로 전환하도록 미리 설정해 두었으며, 접속 타이밍에 따라 ec2-user 사용자라면 sudo su -를 입력하여 root 사용자로 전환합니다.
// kubectl 버전 확인
kubectl version --client=true -o yaml | yh
// eksctl 버전 확인
eksctl version
// awscli 버전 확인
aws --version
// 도커 정보 확인
docker info | yh
// awscli로 인스턴스 정보 확인 (IAM 자격 증명 X)
aws ec2 describe-instances | jq
// IAM 사용자 자격 구성
aws configure
// awscli로 인스턴스 정보 다시 확인 (IAM 자격 증명 O)
aws ec2 describe-instances | jq
IAM 사용자의 액세스 키 생성할 때 저장한 xxxx_accesskeys.csv 파일을 열어 값을 참조합니다. csv로 액세스키 비밀번호를 저장하지 않았다면, 키를 다시 생성하면 됩니다.
aws configure를 입력하여 Access Key ID
, Secret Access Key
, Region
코드를 입력합니다.
IAM 자격 증명이 이루어지면 awscli 도구로 인스턴스 정보를 다시 확인합니다.
// CLUSTER_NAME 변수 확인
echo $CLUSTER_NAME
// EKS를 배포할 myeks-VPC 정보 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq
// EKS를 배포할 myeks-VPC ID 값만 확인
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId
// VPCID 라는 환경변수로 myeks-VPC ID 값을 저장
export VPCID=$(aws ec2 describe-vpcs --filters "Name=tag:Name,Values=$CLUSTER_NAME-VPC" | jq -r .Vpcs[].VpcId)
// VPCID를 전역 변수로 선언
echo "export VPCID=$VPCID" >> /etc/profile
// VPCID 변수 호출
echo $VPCID
// EKS를 배포할 VPC의 전체 서브넷 정보 확인
aws ec2 describe-subnets --filters "Name=vpc-id,Values=$VPCID" --output json | jq
// EKS를 배포할 VPC의 퍼블릭 서브넷 정보 확인
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" | jq
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" | jq
// EKS를 배포할 VPC의 퍼블릭 서브넷 ID 값만 확인
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text
aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text
// 변수에 퍼블릭 서브넷 ID 값을 저장
export PubSubnet1=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet1" --query "Subnets[0].[SubnetId]" --output text)
export PubSubnet2=$(aws ec2 describe-subnets --filters Name=tag:Name,Values="$CLUSTER_NAME-PublicSubnet2" --query "Subnets[0].[SubnetId]" --output text)
// 퍼블릭 서브넷 ID를 전역 변수로 선언
echo "export PubSubnet1=$PubSubnet1" >> /etc/profile
echo "export PubSubnet2=$PubSubnet2" >> /etc/profile
// VPCID 변수 호출
echo $PubSubnet1
echo $PubSubnet2
echo $AWS_DEFAULT_REGION
echo $CLUSTER_NAME
echo $VPCID
echo $PubSubnet1,$PubSubnet2
이를 통해서 생성된 VPC 환경 및 설치된 CLI 도구들이 잘 생성된 것을 확인했다. 또한, 추후 사용할 환경 변수에도 잘 넣어주는 작업까지 완료했다.
이제 다음 과정으로 본격적으로 EKS를 배포해보도록 하자.🤩
Reference📎 | CloudNet@와 함께하는 Amazon EKS 기본 강의