728x90
반응형

이번 포스팅에서는 EKS 클러스터에서 실제 애플리케이션이 실행되는 노드 그룹을 생성합니다.

1. 노드 그룹 구성

노드 그룹에 관한 기본적인 내용을 정의합니다. 노드 그룹 이름과 IAM 역할을 지정해줍니다. IAM이 없다면 IAM 콘솔에서 역할 생성 버튼으로 이동하여 기본 설정 그대로 진행해서 노드 IAM을 생성해줍시다. 저의 경우 아래의 정책으로 생성하였습니다.

  • AmazonEBSCSIDriverPolicy
  • AmazonEC2ContainerRegistryReadOnly (기본)
  • AmazonEC2FullAccess
  • AmazonEKS_CNI_Policy (기본)
  • AmazonEKSWorkerNodePolicy (기본)

  • 시작 템플릿 (Launch Template):
    • 설명: 시작 템플릿은 EC2 인스턴스를 생성할 때 사용할 사전 정의된 설정 집합입니다. 여기에는 AMI ID, 인스턴스 유형, 키 페어, 보안 그룹, 사용자 데이터, 블록 스토리지 구성 등이 포함됩니다.
    • 이점: 시작 템플릿을 사용하면 일관된 인스턴스 구성을 보장하고, 복잡한 설정을 쉽게 반복해서 적용할 수 있습니다. 특히, 다양한 사용자 지정 설정을 포함시킬 때 유용합니다.
    • 사용: EKS 노드 그룹을 구성할 때, 특정 요구사항에 맞춰 미리 준비된 시작 템플릿을 선택하여 EC2 인스턴스를 일관되게 생성할 수 있습니다.
  • 레이블 (Label):
    • 설명: 레이블은 쿠버네티스 노드에 할당되는 키-값 쌍으로, 클러스터 내에서 특정 노드를 식별하거나, 특정 워크로드를 특정 노드에서 실행되도록 지정하는 데 사용됩니다.
    • 이점: 레이블을 사용하면 파드가 특정 조건을 만족하는 노드에만 배치되도록 스케줄링할 수 있습니다. 예를 들어, env=production과 같은 레이블을 사용해 프로덕션 환경용 워크로드를 프로덕션 노드에서만 실행되도록 설정할 수 있습니다.
    • 사용: 노드 그룹 구성 단계에서 노드에 레이블을 지정하면, 클러스터 내에서 파드를 배포할 때 이 레이블을 기준으로 노드를 선택할 수 있습니다.
  • 테인트 (Taint):
    • 설명: 테인트는 특정 파드가 해당 노드에 스케줄링되지 않도록 제한하는 메커니즘입니다. 테인트는 노드에 설정되며, 파드는 특정 톨러레이션(Toleration)이 설정된 경우에만 그 노드에 스케줄링될 수 있습니다.
    • 이점: 테인트를 사용하면 특정 노드를 특정 유형의 파드에만 사용할 수 있게 제어할 수 있습니다. 예를 들어, 중요한 작업만 처리하는 노드를 설정할 때 유용합니다.
    • 사용: 노드 그룹 구성 시 테인트를 설정하여, 의도하지 않은 파드가 해당 노드에서 실행되지 않도록 제어할 수 있습니다. 이로써 특정 파드의 성능 또는 보안을 보장할 수 있습니다.

요약:

  • 시작 템플릿은 노드 그룹의 인스턴스 구성을 일관되게 관리하는 도구입니다.
  • 레이블은 파드를 특정 노드에 배치하기 위해 노드에 할당하는 메타데이터입니다.
  • 테인트는 특정 파드만 해당 노드에 배치되도록 제한하는 설정입니다.

2. 컴퓨팅 및 조정 구성 설정

EKS 노드 그룹의 컴퓨팅 리소스를 구성하고, 클러스터의 확장성과 자동 조정(오토스케일링) 관련 설정을 정의합니다.

  • On-Demand 용량 (On-Demand Capacity):
    • 설명: On-Demand 인스턴스는 사용자가 필요할 때 EC2 인스턴스를 생성하고, 사용한 만큼 시간당 비용을 지불하는 방식입니다.
    • 이점: On-Demand 인스턴스는 가용성이 높고, 언제든지 생성할 수 있어 안정적인 서비스 운영을 보장합니다. 인스턴스가 필요할 때 언제든지 추가하거나 제거할 수 있으며, 예측 가능한 비용 구조를 제공합니다.
    • 사용 사례: 예측 가능하고 안정적인 컴퓨팅 리소스가 필요한 워크로드에 적합합니다. 예를 들어, 프로덕션 환경이나 긴급히 확장이 필요한 서비스에 유용합니다.
  • Spot 용량 (Spot Capacity):
    • 설명: Spot 인스턴스는 AWS에서 미사용 EC2 인스턴스를 경매 방식으로 저렴하게 구매할 수 있는 옵션입니다. Spot 인스턴스는 On-Demand 인스턴스 대비 최대 90% 저렴할 수 있습니다.
    • 이점: 비용 절감 효과가 크며, 대규모의 일시적인 컴퓨팅 파워가 필요한 워크로드에 매우 유용합니다. 가격 변동에 따라 리소스를 동적으로 확장하거나 축소할 수 있습니다.
    • 주의사항: Spot 인스턴스는 AWS에서 더 이상 인스턴스를 제공할 수 없게 되면(예: 수요 증가로 인해) 언제든지 회수될 수 있습니다. 따라서, 회수에 대비한 내구성 있는 애플리케이션 설계가 필요합니다.
    • 사용 사례: 비즈니스 크리티컬하지 않거나, 일괄 처리 작업, 데이터 분석, 테스트 및 개발 환경 등에서 사용하기 적합합니다. 비용 절감이 중요한 경우에 활용됩니다.

만약 기본적으로 실행하려는 노드가 2개라면, 원하는 크기를 2, 최소 크기를 2, 최대 크기를 3 이상으로 설정하고, 최대 사용 불가 노드 수를 1로 설정합니다.

이렇게 설정하면 AWS는 롤링 업데이트(Rolling Update) 방식을 사용하여 노드 그룹을 업데이트합니다:

  • 노드 추가: 업데이트를 시작할 때, AWS는 클러스터의 가용성을 유지하기 위해 최대 노드 수에 따라 새로운 노드를 추가합니다. 이로 인해 노드 수가 일시적으로 증가합니다.
  • 파드 재배치: 기존 노드 중 하나를 업데이트할 때, 그 노드에서 실행 중이던 파드(애플리케이션)를 새로 추가된 노드로 자동으로 이동시킵니다.
  • 노드 업데이트: 파드가 다른 노드로 이동한 후, 기존 노드가 업데이트됩니다.
  • 노드 제거: 업데이트가 완료되면 클러스터는 다시 원하는 크기(2개)에 맞게 노드 수를 조정하여, 추가된 노드를 제거합니다.

롤링 업데이트 방식은 클러스터의 노드들을 순차적으로 업데이트하는 방식으로, 업데이트 도중에도 서비스의 가용성을 유지할 수 있습니다. 각 노드를 하나씩 업데이트하면서, 파드를 다른 노드로 재배치하여 다운타임을 최소화합니다. 이 과정은 자동으로 이루어지며, 클러스터의 가용성을 유지하면서 노드 그룹을 효율적으로 업데이트할 수 있도록 도와줍니다.

3. 네트워킹 지정

노드에 대한 원격 액세스 허용은 유연한 운영을 위해 허용으로 설정합니다.

4. 검토 및 생성

앞서 설정한 내용들을 다시 확인 후 생성합니다.

5. CLI에서 노드 그룹 생성 확인

노드 목록 확인:

kubectl get nodes

노드 상세 정보 확인:

kubectl describe node <node-name>

Pod 배포 확인:

  • 노드 그룹이 정상적으로 작동하는지 확인하기 위해, 기본 네임스페이스나 kube-system 네임스페이스에서 실행 중인 파드들을 확인해 볼 수 있습니다.
kubectl get pods -o wide --all-namespaces

AWS CLI로 노드 그룹 상태 확인:

aws eks describe-nodegroup --cluster-name <cluster-name> --nodegroup-name <node-group-name>
반응형