kubectl로 Karpenter에서 EKS Auto Mode로 마이그레이션하기

kubectl로 Karpenter에서 EKS Auto Mode로 마이그레이션하기

이 주제는 kubectl로 워크로드를 Karpenter에서 Amazon EKS Auto Mode로 마이그레이션하는 과정을 안내합니다. 마이그레이션은 점진적으로 수행할 수 있어, 전환 내내 클러스터 안정성과 애플리케이션 가용성을 유지하면서 자신의 속도에 맞춰 워크로드를 이동할 수 있어요.

아래의 단계별 접근 방식은 마이그레이션 기간 동안 Karpenter와 EKS Auto Mode를 나란히 실행할 수 있게 합니다. 이 이중 운영 전략은 Karpenter를 완전히 폐기하기 전에 EKS Auto Mode에서 워크로드 동작을 검증할 수 있게 해 매끄러운 전환을 보장합니다. 애플리케이션을 개별적으로 또는 그룹으로 마이그레이션할 수 있어 특정 운영 요구와 위험 허용도에 맞는 유연성을 제공합니다.

출처: 문서

본문

사전 조건

마이그레이션을 시작하기 전에 다음이 있는지 확인하세요.

  • 클러스터에 Karpenter v1.1 이상이 설치되어 있어야 합니다. 자세한 내용은 Karpenter 문서의 Upgrading to 1.1.0+를 참고하세요.
  • kubectl이 설치되고 클러스터에 연결되어 있어야 합니다. 자세한 내용은 Set up to use Amazon EKS를 참고하세요.

이 주제는 Karpenter와 NodePools에 익숙하다고 가정합니다. 자세한 내용은 Karpenter Documentation을 참고하세요.

Note: 일부 CRD(예: nodepools.karpenter.sh, nodeclaims.karpenter.sh)는 EKS Auto Mode와 Karpenter가 공유합니다. 마이그레이션 중에 이 CRD를 업데이트하거나 수정하지 마세요.

1단계: 클러스터에서 EKS Auto Mode 활성화

AWS CLI 또는 Management Console로 기존 클러스터에서 EKS Auto Mode를 활성화합니다. 자세한 내용은 Enable EKS Auto Mode on an existing cluster를 참고하세요.

Note: EKS Auto Mode를 활성화하는 동안 이 단계에서는 general purpose nodepool을 활성화하지 마세요. 이 노드 풀은 선택적이지 않습니다. 자세한 내용은 Enable or Disable Built-in NodePools를 참고하세요.

2단계: taint가 있는 EKS Auto Mode NodePool 생성

taint가 있는 EKS Auto Mode용 새 NodePool을 만듭니다. 이렇게 하면 기존 Pod가 새 EKS Auto Mode 노드에 자동으로 스케줄링되지 않습니다. 이 노드 풀은 EKS Auto Mode에 내장된 default NodeClass를 사용합니다. 자세한 내용은 Create a Node Class for Amazon EKS를 참고하세요.

taint가 있는 노드 풀 예시:

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: eks-auto-mode
spec:
  template:
    spec:
      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m", "r"]
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      taints:
        - key: "eks-auto-mode"
          effect: "NoSchedule"

노드 풀의 requirements를 마이그레이션 대상 Karpenter 구성과 일치하도록 업데이트합니다. 최소 하나의 requirement가 필요합니다.

3단계: 마이그레이션용 워크로드 업데이트

EKS Auto Mode로 마이그레이션하려는 워크로드를 식별하고 업데이트합니다. 이 워크로드에 tolerations와 node selectors를 모두 추가합니다.

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      tolerations:
      - key: "eks-auto-mode"
        effect: "NoSchedule"
      nodeSelector:
        eks.amazonaws.com/compute-type: auto

이 변경으로 워크로드가 새 EKS Auto Mode 노드에 스케줄링될 수 있습니다.

EKS Auto Mode는 Karpenter와 다른 라벨을 사용합니다. EC2 관리형 인스턴스 관련 라벨은 eks.amazonaws.com으로 시작합니다. 자세한 내용은 Create a Node Pool for EKS Auto Mode를 참고하세요.

4단계: 워크로드 점진적으로 마이그레이션

마이그레이션하려는 각 워크로드에 대해 3단계를 반복합니다. 이를 통해 요구사항과 위험 허용도에 따라 워크로드를 개별적으로 또는 그룹으로 이동할 수 있어요.

5단계: 원래 Karpenter NodePool 제거

모든 워크로드가 마이그레이션되면 원래 Karpenter NodePool을 제거할 수 있습니다.

kubectl delete nodepool

6단계: EKS Auto Mode NodePool에서 taint 제거(선택)

EKS Auto Mode가 새 워크로드의 기본이 되게 하려면 EKS Auto Mode NodePool에서 taint를 제거할 수 있습니다.

apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: eks-auto-mode
spec:
  template:
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default
      # Remove the taints section

7단계: 워크로드에서 node selectors 제거(선택)

EKS Auto Mode NodePool에서 taint를 제거했다면 EKS Auto Mode가 이제 기본이므로 워크로드에서 node selectors를 선택적으로 제거할 수 있어요.

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      # Remove the nodeSelector section
      tolerations:
      - key: "eks-auto-mode"
        effect: "NoSchedule"

8단계: 클러스터에서 Karpenter 제거

Karpenter 제거 단계는 설치 방법에 따라 다릅니다. 자세한 내용은 Karpenter 설치 지침을 참고하세요.

더 알아보기 (Learn more)