[Docker] ECR 이미지를 활용한 EKS 운영 (1) - 클러스터와 노드 그룹 생성

yedi·2025년 3월 25일
post-thumbnail

ECR에 등록된 이미지를 기반으로 EKS를 운영하려 한다.
이를 위해 EKS의 구조를 이해하고 각 개념을 직접 생성하며 실습해보자.


EKS 구성요소의 관계

클러스터, 노드 그룹, 노드, 파드, 컨테이너, 디플로이먼트, 서비스, 네임 스페이스는 EKS (Elastic Kubernetes Service)에서 컨테이너화된 애플리케이션을 관리하는 기본적인 단위로, 각 구성 요소의 개념을 예시를 통해 간략히 살펴보고 그 관계를 알아보자.

클러스터 (Cluster)

  • 예시 ) 큰 건물
  • 설명 ) 클러스터는 EKS에서 여러 리소스를 관리하는 가장 큰 단위입니다. 마치 큰 건물처럼, 클러스터는 여러 개의 노드(EC2 인스턴스)를 포함하고 있으며, 이 리소스들이 애플리케이션을 실행하는 데 필요한 환경을 제공합니다. 클러스터 안에는 여러 개의 방(노드)이 있을 수 있으며, 각 방에서 다양한 작업이 수행됩니다.

노드 그룹 (Node Group)

  • 예시 ) 같은 층에 있는 여러 개의 방
  • 설명 ) 노드 그룹은 특정 역할을 하는 노드들의 모음입니다. 한 층에 있는 방들이 특정한 용도로 사용될 수 있듯이, 노드 그룹도 특정 애플리케이션을 운영하는 데 필요한 노드들을 묶어 관리합니다.

노드 (Node)

  • 예시 ) 건물 안의 방
  • 설명 ) 노드는 컨테이너를 실행할 수 있는 실제 서버(EC2 인스턴스)입니다. 한 방에는 여러 개의 가전제품(컨테이너)이 있을 수 있으며, 각각 특정한 역할을 수행합니다.

파드 (Pod)

  • 예시 ) 방 안의 선반 또는 멀티탭
  • 설명 ) 파드는 하나 이상의 컨테이너를 담고 있는 논리적 단위입니다. 방 안에 가전제품을 놓을 선반이 있듯이, 하나의 파드는 여러 개의 컨테이너를 그룹으로 묶어 관리할 수 있습니다.

컨테이너 (Container)

  • 예시 ) 방 안에서 실행되는 가전제품 (TV, 냉장고, 컴퓨터 등)
  • 설명 ) 컨테이너는 실제 애플리케이션이 실행되는 환경을 제공합니다. 하나의 방(노드)에는 여러 개의 가전제품(컨테이너)이 있을 수 있으며, 각각 특정한 기능을 수행합니다.

디플로이먼트 (Deployment)

  • 예시 ) 가전제품이 언제, 어떻게 동작할지 설정하는 매뉴얼
  • 설명 ) 디플로이먼트는 파드를 어떻게 배포하고 관리할지를 결정하는 설정입니다. 특정 가전제품(컨테이너)이 언제 켜지고, 몇 개가 필요하며, 문제가 발생하면 어떻게 대처할지를 정해줍니다.

서비스 (Service)

  • 예시 ) 방 밖에서 가전제품을 찾을 수 있는 주소
  • 설명 ) 서비스는 외부에서 특정 파드로 접근할 수 있도록 IP와 DNS를 제공합니다. 가전제품이 방 안에 있어도 외부에서 쉽게 접근할 수 있도록 주소를 부여하는 것과 같습니다.

네임스페이스 (Namespace)

  • 예시 ) 여러 개의 건물(환경)
  • 설명 ) 네임스페이스는 여러 개의 환경을 구분하는 역할을 합니다. 하나의 건물(클러스터)에 여러 개의 층(네임스페이스)이 존재할 수 있으며, 각 층은 서로 독립적으로 운영될 수 있습니다.

앞서 살펴본 클러스터, 노드 그룹, 노드, 파드, 컨테이너, 디플로이먼트, 서비스, 네임 스페이스의 예시와 설명을 바탕으로 이들 간의 관계를 아래와 같이 정리할 수 있다.

  • 클러스터는 노드와 노드 그룹을 관리하여 애플리케이션을 실행할 리소스를 제공합니다.
  • 노드 그룹은 동일한 역할을 하는 노드들을 그룹화하여 노드를 보다 효율적으로 관리합니다.
  • 노드는 실제 컨테이너를 실행하는 서버 역할을 합니다.
  • 파드는 컨테이너들이 실행되는 논리적인 단위입니다.
  • 컨테이너는 애플리케이션을 실행하는 최소 단위로, 파드 안에서 실행됩니다.
  • 디플로이먼트는 파드를 어떻게 배포하고, 관리할지 설정합니다.
  • 서비스는 파드의 안정적이고 지속적인 실행을 보장합니다.
  • 네임스페이스는 클러스터 내에서 환경을 구분합니다.

클러스터는 리소스를 제공하고, 노드와 파드는 컨테이너를 실행하며, 디플로이먼트와 서비스는 이를 배포하고 안정적으로 관리합니다.


EKS 구성요소 개념과 실습

각 개념을 깊이 있게 알아보고, AWS 콘솔을 통해 실습을 진행하며 EKS를 이용해 ECR에 등록된 이미지인 web과 api 컨테이너를 운영하려고 한다.

1. 클러스터 (Cluster)

EKS(Elastic Kubernetes Service)에서 클러스터는 여러 리소스를 관리하는 가장 큰 단위로, 컨테이너화된 애플리케이션을 실행하기 위한 서버들의 집합입니다. 클러스터 안에는 여러 노드가 있어 애플리케이션을 실행하며, 클러스터는 이 노드를 효율적으로 관리합니다.

클러스터의 역할

  • 서버 환경 제공
    : 애플리케이션이 실행될 서버 환경을 제공하며, 여러 노드를 관리합니다.

  • 애플리케이션 배포
    : 애플리케이션의 배포를 자동화하여, 컨테이너들이 클러스터 내에서 실행되도록 합니다.

  • 관리 및 리소스 관리 자동화
    : 리소스를 효율적으로 분배하고 관리하며, 애플리케이션의 상태를 지속적으로 관리합니다.


클러스터의 구성

  • 클러스터는 노드 그룹으로 이루어져 있으며, 각 노드는 애플리케이션을 실행할 서버 역할을 합니다. 클러스터는 여러 노드를 관리하고, 파드를 통해 컨테이너들이 실행되도록 합니다.

EKS 클러스터 생성 실습

  1. AWS 콘솔에서 EKS > 클러스터로 이동한 뒤, 클러스터 생성 버튼을 클릭합니다.

  2. 클러스터 생성 화면으로 이동한 후, 1단계에서 클러스터 구성을 설정합니다.
    사용자 지정 구성을 선택하고, EKS 자율 모드를 비활성화합니다.

    빠른 구성 (EKS 자율 모드 사용)
    : 기본 설정으로 자동으로 클러스터를 생성하며, 설정이 간단하고 빠른 배포가 가능합니다. 하지만 세부 설정에 제약이 있습니다.

    사용자 지정 구성
    : 클러스터 생성 시 세부 설정을 자유롭게 할 수 있어, 구성 요소를 더 세밀하게 제어할 수 있습니다. EKS 자율 모드를 비활성화하고, 더 많은 옵션을 선택할 수 있습니다.


  1. 클러스터 구성을 설정하기 전에 먼저 클러스터 IAM 역할을 생성해야 합니다.
    '권장 역할 생성' 버튼을 클릭하여 IAM 역할 생성 화면으로 이동합니다.

    신뢰할 수 있는 엔터티 유형에서 'AWS 서비스'를 선택하고, 사용 사례에서 'EKS - Cluster'가 자동으로 설정된 상태에서 '다음' 버튼을 클릭합니다.

    자동으로 설정된 AmazonEKSClusterPolicy 권한 정책을 확인한 후, '다음' 버튼을 클릭합니다.

    이름 지정, 검토 및 생성 단계에서 역할 이름과 설명을 입력한 후, '역할 생성' 버튼을 클릭하여 역할을 생성합니다.

  2. IAM 역할을 생성한 후, 클러스터 구성 화면으로 돌아가 클러스터 이름과 이전에 생성한 클러스터 IAM 역할을 선택합니다. 이후 Kubernetes 버전은 현재 최신 버전인 1.32로 선택합니다.
    나머지 설정은 그대로 두고, '다음' 버튼을 클릭합니다.


  1. 2단계에서 네트워크 지정을 설정합니다.
    VPC와 해당 VPC 내 서브넷을 선택한 후, 보안 그룹을 설정합니다.
    이 보안 그룹에는 인바운드 규칙으로 22번, 80번, 8080번(Web 컨테이너), 60818번(API 컨테이너) 포트를 허용하도록 설정했습니다.

    '다음' 버튼을 클릭합니다.

  1. 3단계에서 관찰성 구성을 설정합니다.
    관찰성 구성에서는 지표 설정을 추후 CloudWatch와 연동할 수 있도록 그대로 두고, 클러스터의 실시간 모니터링과 디버깅을 위해 컨트롤 플레인 로그는 모두 활성화합니다.

    '다음' 버튼을 클릭합니다.

  1. 4단계에서 추가 기능 선택을 설정합니다.
    추가 기능이 자동으로 활성화된 상태에서 하단의 '다음' 버튼을 클릭합니다.

    추가 기능
    : 클러스터의 기능을 향상시키기 위해 자동으로 활성화되는 부가적인 설정 옵션들

  2. 5단계에서 선택한 추가 기능 설정 구성을 설정합니다.
    선택한 추가 기능 설정에서 버전을 선택할 수 있으며, 기본 설정된 버전으로 '다음' 버튼을 클릭합니다.

  3. 6단계에서 검토 및 생성을 확인합니다.
    앞서 설정한 내용을 한눈에 확인할 수 있으며, 확인 후 '생성' 버튼을 클릭합니다.

    약 10분 정도 후, 클러스터가 생성된 것을 확인할 수 있습니다.


2. 노드 그룹 (Node Group)

노드그룹은 클러스터 내에서 컨테이너를 실행할 물리적 또는 가상 서버들의 그룹입니다. 각 노드그룹은 동일한 설정을 가진 EC2 인스턴스로 구성되어, 애플리케이션을 실행하고 관리하는 역할을 합니다. 노드그룹은 클러스터의 리소스를 제공하며, 필요에 따라 자동으로 확장하거나 축소할 수 있습니다.

노드 그룹의 역할

  • 애플리케이션 실행
    : 노드 그룹은 실제로 컨테이너를 실행하는 EC2 인스턴스들을 포함하고, 클러스터 내에서 파드가 실행되도록 지원합니다.

  • 리소스 제공
    : 애플리케이션이 원활하게 실행될 수 있도록 CPU, 메모리 등 필요한 리소스를 제공합니다.

  • 자동 확장
    : 노드 그룹은 클러스터의 리소스 사용량에 따라 자동으로 확장하거나 축소할 수 있습니다.

  • 일관된 환경 제공
    : 동일한 설정을 가진 EC2 인스턴스로 구성되어 있어, 일관된 실행 환경을 제공합니다.


노드 그룹의 구성

노드 그룹은 동일한 설정을 가진 EC2 인스턴스들로 구성되며, 컨테이너를 실행하는 실제 서버 역할을 합니다. EKS는 이 노드 그룹을 자동으로 관리하여, 인스턴스를 필요에 따라 자동으로 추가하거나 제거할 수 있으며, 스케일링 기능을 통해 리소스를 효율적으로 조절합니다.


EKS 노드 그룹 생성 실습

  1. AWS 콘솔에서 EKS를 선택한 후, 하단에서 노드 그룹을 생성할 클러스터를 선택합니다. 그런 다음 클러스터 > 컴퓨팅 > '노드 그룹 추가' 버튼을 클릭합니다.

  2. 1단계에서 노드 그룹 구성을 설정합니다. 우선, 노드 그룹의 이름을 지정합니다.

  3. 노드 그룹 구성을 계속 설정하기 전에 노드 IAM 역할을 생성해야 합니다. '권장 역할 생성' 버튼을 선택합니다.

    신뢰할 수 있는 엔터티 유형에서 'AWS 서비스'를 선택하고, 사용 사례에서 ‘EC2’가 자동으로 설정된 상태에서 '다음' 버튼을 클릭합니다.

    권한 추가에서 자동으로 설정된 상태로 그대로 두고, '다음' 버튼을 클릭합니다.

    이름 지정, 검토 및 생성 단계에서 역할 이름과 설명을 입력한 후, '역할 생성' 버튼을 클릭하여 역할을 생성합니다.

  4. IAM 역할을 생성한 후, 노드 그룹 구성 화면으로 돌아가 이전에 생성한 노드 IAM 역할을 선택합니다. 나머지 자동 설정은 그대로 유지하고, '다음' 버튼을 클릭합니다.

  5. 2단계에서 컴퓨팅 및 조정 구성 설정을 통해 노드 그룹의 컴퓨팅 구성을 설정합니다.

    AMI(Amazon Machine Image) 유형 = 운영체제

    인스턴스 유형 = EC2 성능과 기능 (RAM, CPU, 스토리지 용량 등)

    용량 유형 On-Demand
    : 필요할 때 즉시 실행하고, 사용한 만큼만 요금 내는 일반 방식

  6. 노드 그룹 조정 구성에서는 하나의 EC2 인스턴스에 web 컨테이너와 api 컨테이너를 실행할 계획이므로, 원하는 크기와 최소 크기는 1, 최대 크기는 2로 설정합니다.

    나머지 설정은 그대로 두고 '다음' 버튼을 누릅니다.

  7. 3단계에서는 네트워크 지정을 설정합니다.
    클러스터 설정에서 이미 지정한 서브넷이 자동으로 선택됩니다. 확인 후 '다음' 버튼을 클릭합니다.

  8. 4단계에서는 검토 및 생성을 확인합니다. 이전에 설정한 내용을 한눈에 확인한 후, '생성' 버튼을 클릭합니다.

    약 5분 정도 후, 노드 그룹이 생성된 것을 확인할 수 있습니다.

    EC2에서 노드 그룹에서 설정한 AMI와 인스턴스 유형에 맞춰, 지정된 크기인 1개의 인스턴스가 생성된 것을 확인할 수 있습니다.


3. 동일한 VPC에 있는 EC2를 통해 EKS 설정을 위한 방화벽 설정

동일한 VPC에 존재하는 EC2를 통해 EKS 설정을 진행하려 한다.

EKS 클러스터 설정 및 EC2 인스턴스와 EKS 간의 통신은 AWS API와의 상호작용을 위해 HTTPS(443) 프로토콜을 사용하며, 이를 통해 데이터는 암호화되어 안전하게 전송되어 도중에 변조되거나 도청되지 않도록 보장됩니다.

방화벽 설정

  1. 접속하려는 EC2 인스턴스의 아웃바운드 규칙 설정

    해당 EC2의 아웃바운드 규칙에서 '아웃바운드 규칙 편집' 버튼을 클릭한다.

    HTTPS 443 규칙을 추가하고, '규칙 저장' 버튼을 클릭한다.

    아웃바운드 규칙이 추가된 것을 확인할 수 있다.

  2. EKS 클러스터 보안 그룹에 인바운드 규칙을 설정

    클러스터 > 네트워킹 > 클러스터 보안 그룹을 선택합니다.

    해당 보안 그룹에서 '인바운드 규칙 편집' 버튼을 클릭한다.

    HTTPS 443 규칙을 추가하고, '규칙 저장' 버튼을 클릭한다.

    인바운드 규칙이 추가된 것을 확인할 수 있다.



[AWS] ECR 이미지를 활용한 EKS 운영 (2)에서 계속 알아보겠습니다.

0개의 댓글