TOP
class="layout-aside-left paging-number">
본문 바로가기
프로그래밍 및 기타/Cloud : AWS

[Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기

by 기록자_Recordian 2025. 3. 1.
728x90
반응형
이전 내용
 

[Cloud] aws : aws console로 쿠버네티스 클러스터 만들기

이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커로 DB 연결하기이전 내용 [Cloud] 컨테이너 이미지 경량화 시키기이전 내용 [Cloud] 도커 허브에서 컨테이너 이미지 다운로

puppy-foot-it.tistory.com


★ 중요 ★
eksctl 명령을 이용해서 AWS EKS 클러스터를 생성하기 전 요구되는 선행 작업
※ 기본적으로 VPC, 퍼블릭 서브넷, 프라이빗 서브넷, IGW, NAT GW 등은 생성되어 있다고 가정

1. ubuntu 서버 필요: AWS EC2 인스턴스 생성 (필자의 경우 인스턴스명: aws-managed-server)
2. ubuntu 서버에 AWS CLI 설치
3. ubuntu 서버에 eksctl 설치
4. ubuntu 서버에 kubectl 설치
5. XShell (또는 WSL)에서 ubuntu 서버 연결
6. XShell 에서 aws 관리 위한 CLI 로그인 (aws configure) - aws 액세스 키, 시크릿 키 필요
7. aws ECR에 컨테이너 이미지 등록

 

EKS에 쿠버네티스 클러스터 만들기
2. AWS CLI 사용


AWS CLI라는 명령줄 인터페이스를 사용하여 클러스터를 생성할 수 있는데, 이는 스크립트로 자동화할 수 있어 보다 효율적이다.
[AWS CLI 사용 시 장점]

  • 자동화 및 최신 배포 방식에 적합
  • 설정 파일을 통해 재현 가능하고 버전 관리가 용이

이제 AWS CLI를 이용하여 EKS에 클러스터를 생성하는 법을 진행해 본다.

※ 진행 전에, 프라이빗 서브넷을 연결하는 NAT 게이트웨이가 생성되어 잘 연결되어 있는지 확인하고 시작한다.

 

쿠버네티스에서는 YAML 파일을 사용하여 애플리케이션의 배포, 서비스, ConfigMap, Secret 등의 리소스를 정의할 수 있다. 역시 AWS CLI를 사용하여 EKS 클러스터를 생성하는 과정에서도 YAML 파일을 활용할 수 있다.

★ YAML 파일이란
YAML은 "YAML Ain't Markup Language"의 약자로, 데이터 직렬화를 위한 포맷으로, 주로 설정 파일 및 데이터 교환 형식으로 사용된다. YAML 파일은 사람에게 읽기 쉬운 구조를 가지고 있으며, hierarchies(계층 구조)를 표현하는 데 적합하다.

 

1. 클러스터 생성을 위한 yaml 파일 만들기

1-1. yaml 파일 작성을 위한 프라이빗 서브넷 (필자의 경우 TOMCAT-2A, TOMACT-2C)의 서브넷 ID가 필요한데, aws console에 로그인하여 [VPC] - [서브넷]에 들어가서 서브넷 ID를 복사한다.

 

1-2. 클러스터를 생성할 수 있는 yaml 파일을 작성한다. yaml 파일의 경우, 대소문자와 들여쓰기를 구분하므로 vs code 처럼 코드의 가독성이 높은 곳에 작성해두는 것이 좋다.

 

★ 클러스터를 생성하는 yaml 파일에 들어가야 하는 내용

  • 클러스터 이름, 클러스터 생성하는 리전, 프라이빗 서브넷의 ID
  • 워커노드의 이름, 역할(라벨), 인스턴스 타입, 원하는 노드 수 등

 

[Amazon EKS 클러스터를 설정하는 yaml 파일 작성의 예]

apiVersion: eksctl.io/v1alpha5 # 사용하고자 하는 eksctl의 API 버전 정의
kind: ClusterConfig # 클러스터의 종류 정의
metadata:
  name: Basic-cluster # 생성할 클러스터의 이름 정의
  region:  ap-northeast-2 # 클러스터를 생성할 AWS 리전 설정
vpc: # EKS 클러스터가 사용할 VPC 및 서브넷 설정 정의
  subnets:
    private: # 클러스터의 노드가 위치할 프라이빗 서브넷 설정
      ap-northeast-2a: { id: 본인의 프라이빗 서브넷 2a id }
      ap-northeast-2c: { id: 본인의 프라이빗 서브넷 2c id } 

nodeGroups: # 클러스터 내에서 사용할 워커 노드 그룹 정의
  - name: VEC-PRD-NG-worker1 # 노드 그룹의 이름
    labels: { role: workers } # 그룹의 역할이나 특성 정의
    instanceType: t3.micro # 사용될 EC2 인스턴스의 유형
    desiredCapacity: 1 # 해당 노드 그룹의 원하는 노드 수
    privateNetworking: true # true: 노드가 프라이빗 서브넷에서 실행되어 퍼블릭 IP를 받지 않도록 함
    subnets:
      - 본인의 프라이빗 서브넷 2a id # 노드 그룹에 사용할 서브넷 ID
  - name: VEC-PRD-NG-worker2
    labels: { role: workers }
    instanceType: t3.micro
    desiredCapacity: 1
    privateNetworking: true
    subnets:
      - 본인의 프라이빗 서브넷 2c id
    iam: #  IAM 역할과 추가 정책 설정
      withAddonPolicies:
        imageBuilder: true # 두 번째 노드 그룹에서 imageBuilder 정책을 사용할 수 있도록 설정

2. Xshell 에서 우분투 서버(필자의 경우 aws-managed-server) 로 접속하여 root 계정으로 이동 후, nginx 폴더로 이동하여 cluster.yaml 파일 생성

# 루트 계정으로 이동
sudo -i

# 파일 목록 보기
ls

# nginx 폴더로 이동
cd nginx

# cluster.yaml 파일 생성
vi cluster.yaml

 

cluster.yaml 파일에는 앞서 만들어둔 yaml 파일을 복사 붙여넣기 한다. (yaml 파일을 본인 클러스터 내용에 맞게 작성 필요)

 

3. eksctl을 이용하여 클러스터 생성하기

Xshell에서 클러스터를 생성하는 eksctl 명령어를 입력하면 앞서 작성해둔 cluster.yaml 파일 내의 내용을 기반으로 EKS에 클러스터가 생성된다. (약 10-15분 소요)

# eksctl에서 yaml 파일 이용하여 클러스터 생성하는 명령어
eksctl create cluster -f cluster.yaml

 

★ eksctl은?
eksctl은 AWS EKS (Elastic Kubernetes Service) 클러스터를 쉽게 생성하고 관리하기 위해 설계된 오픈소스 커맨드 라인 툴이다. eksctl은 Amazon 웹 서비스에서 제공하는 EKS의 설정 및 운영을 간편화하여, 사용자가 복잡한 설정 없이도 클러스터를 빠르고 쉽게 생성하고 관리할 수 있도록 돕는다.

[주요 기능]
- 클러스터 생성: 단일 명령어로 EKS 클러스터를 생성할 수 있다. YAML 형식의 구성 파일을 사용하여 클러스터의 설정을 정의할 수 있다.
- 노드 그룹 관리: 노드 그룹의 생성, 업데이트 및 삭제를 지원한다. 다양한 인스턴스 타입과 설정을 통해 유연한 구축이 가능하다.
- IAM 역할 자동 생성: 쿠버네티스와 AWS 리소스 간의 권한을 관리하기 위해 필요한 IAM 역할을 자동으로 생성한다.
- VPC 및 서브넷 설정: 클러스터 구축 시 VPC 및 서브넷 설정을 간편하게 처리할 수 있다.
- Kubernetes 배포 및 관리: 클러스터가 준비된 후, kubectl을 사용하여 애플리케이션을 쉽게 배포하고 관리할 수 있다.

 

★ 중요!

클러스터 생성에는 보통 10-15분이 소요되는 데, 일정 시간(보통 15분)이 경과했는 데도 클러스터가 생성되지 않는다면 timed out 에러를 발생시키고 작업이 중단된다.

▶ 필자가 앞서 해당 작업 실행 전에 먼저 NAT 게이트웨이가 잘 생성되어 프라이빗 서브넷에 연결되어 작동하고 있는지 꼭 확인하라고 했는데, 프라이빗 서브넷이 인터넷에 연결되기 위해 NAT 게이트웨이에 연결되어 있어야 하는데, 필자는 NAT 게이트웨이를 비용 상의 이유로 실습이 끝날 때마다 없애버려둬서 생성하는 것을 잊어버려 프라이빗 서브넷에 인터넷이 연결되지 않아 계속 클러스터 생성이 실패했기 때문이다. (아마 원인을 모른체 반나절을 날려버린 거 같다.)

NAT게이트웨이 절대 잊지말 것!

 

★ 클러스터 생성 진행 상황 확인하기 (cloudformation)

클러스터가 생성되는 데 일정 시간이 소요되는데, AWS Console에서 이 진행과정을 볼 수 있다.

콘솔에서 'cloudformation'을 검색한 뒤 들어가보면

 

스택에서 현재 생성 중인 클러스터 진행 상황이 자동으로 표시된다.

 

시간이 지나고 클러스터가 생성되면 아래와 같은 안내문이 뜬다.

EKS cluster "클러스터 이름" in "리전" regiion is ready

 

그리고나서 aws 콘솔에 들어가보면 그에 맞춰 Auto Scaliing 그룹이 자동으로 생성되고, 인스턴스들도 자동으로 생성된다.

 


eksctl 로 생성된 클러스터 삭제하기

 

앞서 한 줄의 명령어로 클러스터를 생성할 수 있었는데, 마찬가지로 한 줄의 명령어로 클러스터를 삭제할 수도 있다. (콘솔에서 진행할 경우에는 일일이 지워줘야 하는데, 그에 비하면 아주 편리하다.)

명령어는 다음과 같다.

# 생성된 클러스터 삭제하기
eksctl delete cluster -f cluster.yaml

cluster.yaml 파일 내의 정보가 현재 생성된 클러스터와 동일해야 한다.

▶ clsuter.yaml 내의 정보만 바꿔주면 이 두 줄의 명령어 가지고 클러스터를 쉽게 생성 및 삭제할 수 있다. (효율성 극대화)

 

삭제 역시 생성처럼 일정 시간이 필요하다. (생성에 소요되는 시간과 비슷)

 

마찬가지로, cloudformation의 스택에서도 삭제 관련 진행 상황을 확인할 수 있다.

 

삭제를 하고나면 인스턴스 역시 자동으로 종료(삭제)되는 것을 확인할 수 있다.

Auto Scailing 역시 자동으로 삭제되는 데, 혹시 모르니 콘솔에 접속하여 확인해 보는 습관이 필요하다. (혹시 남아 있게 되면 비용이 청구됨)

 

 

다음에는 kubectl 과 kubectl 관련 명령어에 대해 안내 및 실습해 보려 한다.


다음 내용

 

[Cloud] aws: eksctl, kubectl 주요 명령어

이전 내용 [Cloud] aws : aws cli 로 쿠버네티스 클러스터 만들기이전 내용 [Cloud] aws : aws console로 쿠버네티스 클러스터 만들기이전 내용 [Cloud] aws: ECR(Amazon Elastic Container Registry)이전 내용 [Cloud] 도커

puppy-foot-it.tistory.com

728x90
반응형