들어가며
쿠버네티스 v1.28 기준으로 쿠버네티스는 다음과 같은 기준까지 수용하도록 설계되었다.
- 노드 당 파드 110개 이하
- 노드 5,000개 이하
- 전체 파드 150,000개 이하
- 전체 컨테이너 300,000개 이하
나는 최근 '쿠버네티스 교과서'라는 도서로 스터디를 진행하며 쿠버네티스에 대해 공부하고 있다.
나의 상황의 경우 단일 노드 클러스터로도 충분하기 때문에, 이번 포스트에서는 앞으로 진행할 예제의 준비물로 단일 노드 쿠버네티스 클러스터를 생성하는 과정에 대해 알아본다.
현재 사용 중인 M1 맥북 로컬 환경에 Minikube 등을 사용하여 쿠버네티스 환경을 구성할까? 생각도 하였지만,
- AWS 서비스에 친숙해지고 싶어서
맨땅에 헤딩으로 실패한 경험이 있어서
- (가능하다면) 추후 프로젝트에 도입하고 싶어서
- 로컬에서의 실습은 언제든 가능하지만, 금전적 부담 없이 AWS를 사용할 기회는 프로젝트 지원비 720만원 주는 소마 과정이 처음이자 마지막(?)이 될 수 있어서
라는 이유로 AWS의 매니지드 서비스인 EKS에서 실습을 진행하고자 한다!
스터디가 끝나고 실습 환경을 삭제해주는거 꼭 잊지 말자 !!
EKS 과금에 대해 알고 시작하기
AWS에서 가장 무서운 Best 0 ...! 요금 폭탄 !!!
조심 또 조심해야 한다 ... 나는 이제까지 써오던 서비스(EC2, RDS, S3 등...)만 쭉 사용해왔기 때문에 해당 부분에 대해서는 과금에 대해 나름 잘 알지만 ... 클러스터 서비스는 처음 사용해보니 짚고 넘어가자!
AWS 공식문서로부터 발췌하길 ...
- 생성하는 각 Amazon EKS 클러스터에 대해 시간당 0.10 USD를 지불합니다.
- EC2(Amazon EKS 관리형 노드 그룹 포함)를 사용하는 경우, 해당 리소스에 대한 비용을 지불해야 합니다.
- (Linux/X86, Seoul Region 기준) Fargate를 사용할 경우, 시간당 vCPU당 0.04656 USD & 시간당 GB 당 0.00511 USD를 지불해야 합니다.
나는 (기존 프로젝트에서 bastion으로 사용하고 있던) 인스턴스 유형이 t2.micro인 EC2 인스턴스 위에서 진행할 것이다.
(저사양으로 인한 이슈가 생긴다면 추후 업그레이드할 계획이다.)
기존에 이미 지불하고 있던 EC2 비용을 제외하고, 추가되는 비용만 고려한다면 10일(스터디 예정 진행 기간)동안
0.10 USD * 24 * 10 = 24 USD = 약 32,426 KRW
를 더 지불하게 될 것이다!
삭제하기로 꼬옥 ... 약속 ... one more ... and start ... and 끝나고 요금 얼마 나갔는지 확인하기 ... 🤙
eksctl 설치
EKS 클러스터는 AWS 사이트에서도 만들 수 있지만, CLI로 명령어를 통해 만드는 것 또한 가능하다.
eksctl가 EKS에서 클러스터를 생성하기 위한 간단한 CLI 도구이다. (aws-cli 같은 느낌?)
먼저, 실습을 진행할 EC2 인스턴스로 접속한다. (참고: 나는 Ubuntu 22.04.02를 사용하고 있다.)
만약 aws-cli 세팅(설치 및 configure 작성)이 안되어 있다면 진행해준다. (해당 포스트에서는 aws-cli에 대한 설명을 생략한다)
아래 명령어를 입력하여 eksctl을 설치할 수 있다.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
운영체제에 맞는 최신 버전의 eksctl을 다운로드 받고, mv 명령어를 통해 /usr/local/bin 디렉토리로 옮긴다.
버전이 잘 출력되는 것을 통해 설치가 잘 됐음을 확인할 수 있다.
단일 노드 클러스터 생성하기
아래 명령어를 통해 두 개의 CPU 코어와 8GB 메모리를 가진 단일 노드 클러스터를 생성할 수 있다.
eksctl create cluster --name={클러스터 이름} --nodes=1 --node-type=t3.large
클러스터가 생성되는데 대략 15~20분쯤이 걸린다.
터미널에 waiting for CloudFormation stack "{클러스터 이름}"가 계속 뜬다고 불안해할 필요 없다!
그리고 출력된 문구처럼 AWS 콘솔의 CloudFormation 탭에 들어가 진행 중임을 확인할 수 있다.
kubectl 설치
Oops! 쿠버네티스 API를 이용하여 명령어를 사용하려면 kubectl 설치가 필요한데 앞에서 까먹었다 ... 호다닥 설치해주자!
# 1. 최신 릴리즈 다운로드
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 2-1. 바이너리 검증을 위한 체크섬 파일 다운로드 (선택)
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# 2-2. 체크섬 파일을 통한 바이너리 검증
# 검증 성공 시, 'kubectl: OK'라는 문구가 떠야 함
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
# 3. kubectl 설치
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# 4. 설치 버전 확인
kubectl version --client
설치 굿
.
.
.
인줄 알았는데 아녔음
구글링하니 kubectl 12.4.x 버전과 EKS를 연동할 때 발생하는 오류라 한다.
해당 블로그 를 참고하여 해결했다! :)
WARNING이 불안하지만 ... 나중에 문제가 발생했을 때 고치도록 하자 ㅎㅎ
마지막으로 간단한 kubectl 명령어로 생성한 클러스터를 확인해보자.
kubectl get nodes
ㅎㅎ 굿 ~ 아래 사진처럼 AWS 콘솔의 EKS 탭에서도 정상적으로 생성된 것을 확인할 수 있다.
마치며
쿠버네티스를 향한 첫 걸음마 ... EKS 생성하기에 성공했다!
개발 블로그들을 따라 만들려고 시도했을 때는 원리를 이해하지 않고 무작정 따라했기 때문에 어려움을 겪었는데, 책과 공식문서를 따라 차근차근하니 크게 막히는 점 없이 진행할 수 있었다.
개념을 이해하는데는 개발 블로그가 한국어로 쉽게 써져있어 이해하기 편하지만, 설치를 할 때는 확실히 공식 문서를 참고하는 것이 Best임을 한번 더 느꼈다! :)
👍 Reference
https://kubernetes.io/ko/docs/setup/best-practices/cluster-large/
https://awskocaptain.gitbook.io/aws-builders-eks/4.-eksctl#eksctl
https://aws.amazon.com/ko/eks/pricing/
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/getting-started-eksctl.html
https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/