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 purposenodepool을 활성화하지 마세요. 이 노드 풀은 선택적이지 않습니다. 자세한 내용은 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 설치 지침을 참고하세요.