클러스터의 하이브리드 노드 업그레이드 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

클러스터의 하이브리드 노드 업그레이드

하이브리드 노드 업그레이드 지침은 Amazon EC2에서 실행되는 자체 관리형 Amazon EKS 노드와 유사합니다. 대상 Kubernetes 버전에서 새 하이브리드 노드를 생성하고, 기존 애플리케이션을 새 Kubernetes 버전의 하이브리드 노드로 정상적으로 마이그레이션하고, 클러스터에서 이전 Kubernetes 버전의 하이브리드 노드를 제거할 수 있습니다. 업그레이드를 시작하기 전에 업그레이드에 대한 Amazon EKS 모범 사례를 검토해야 합니다. Amazon EKS Hybrid Nodes는 표준 및 확장 지원을 포함하여클라우드 노드가 있는 Amazon EKS 클러스터에 대해 동일한 Kubernetes 버전 지원을 제공합니다.

Amazon EKS Hybrid Nodes는 노드에 대해 업스트림 Kubernetes와 동일한 버전 스큐 정책을 따릅니다. Amazon EKS Hybrid Nodes는 Amazon EKS 컨트롤 플레인보다 최신 버전일 수 없으며, 하이브리드 노드는 Amazon EKS 컨트롤 플레인 마이너 버전보다 최대 3개의 Kubernetes 마이너 버전일 수 있습니다.

전환 마이그레이션 업그레이드 전략을 위해 대상 Kubernetes 버전에 새 하이브리드 노드를 생성할 예비 용량이 없는 경우 Amazon EKS Hybrid Nodes CLI(nodeadm)를 사용하여 하이브리드 노드의 Kubernetes 버전을 업그레이드할 수 있습니다.

중요

nodeadm을 사용하여 하이브리드 노드를 현재 상태로 업그레이드하는 경우 이전 버전의 Kubernetes 구성 요소가 종료되고 새 Kubernetes 버전 구성 요소가 설치 및 시작되는 프로세스 중에 노드에 대한 가동 중지가 발생합니다.

사전 조건

업그레이드하기 전에 다음 사전 조건을 완료했는지 확인합니다.

  • 하이브리드 노드 업그레이드의 대상 Kubernetes 버전은 Amazon EKS 컨트롤 플레인 버전과 같거나 낮아야 합니다.

  • 전환 마이그레이션 업그레이드 전략을 따르는 경우 대상 Kubernetes 버전에 설치 중인 새 하이브리드 노드가 하이브리드 노드에 대한 사전 조건 설정 요구 사항을 충족해야 합니다. 여기에는 Amazon EKS 클러스터 생성 중에 전달한 원격 노드 네트워크 CIDR 내에 IP 주소가 있는 것이 포함됩니다.

  • 전환 마이그레이션과 인플레이스 업그레이드의 경우 하이브리드 노드는 하이브리드 노드 종속성의 새 버전을 가져오는 데 필요한 도메인에 액세스할 수 있어야 합니다.

  • Amazon EKS Kubernetes API 엔드포인트와 상호 작용하는 데 사용 중인 로컬 시스템 또는 인스턴스에 kubectl이 설치되어 있어야 합니다.

  • CNI 버전은 업그레이드하려는 Kubernetes 버전을 지원해야 합니다. 그렇지 않은 경우 하이브리드 노드를 업그레이드하기 전에 CNI 버전을 업그레이드합니다. 자세한 정보는 하이브리드 노드에 대한 CNI 구성을 참조하세요.

전환 마이그레이션(블루-그린) 업그레이드

전환 마이그레이션 업그레이드는 대상 Kubernetes 버전을 사용하여 새 호스트에서 새 하이브리드 노드를 생성하고, 기존 애플리케이션을 대상 Kubernetes 버전의 새 하이브리드 노드로 정상적으로 마이그레이션하고, 클러스터에서 이전 Kubernetes 버전의 하이브리드 노드를 제거하는 프로세스를 나타냅니다. 이 전략을 블루-그린 마이그레이션이라고도 합니다.

  1. 하이브리드 노드 연결 단계에 따라 새 호스트를 하이브리드 노드로 연결합니다. nodeadm install 명령을 실행할 때 대상 Kubernetes 버전을 사용합니다.

  2. 대상 Kubernetes 버전의 새 하이브리드 노드와 이전 Kubernetes 버전의 하이브리드 노드 간에 통신을 활성화합니다. 이 구성을 사용하면 워크로드를 대상 Kubernetes 버전의 하이브리드 노드로 마이그레이션하는 동안 포드가 서로 통신할 수 있습니다.

  3. 대상 Kubernetes 버전의 하이브리드 노드가 클러스터에 성공적으로 조인되었고 준비됨 상태인지 확인합니다.

  4. 다음 명령을 사용하여 제거하려는 각 노드를 예약 불가로 표시합니다. 이는 바꾸고 있는 노드에서 새 포드가 예약되거나 다시 예약되지 않도록 하기 위한 것입니다. 자세한 내용은 Kubernetes 문서의 kubectl cordon을 참조하세요. NODE_NAME을 이전 Kubernetes 버전의 하이브리드 노드 이름으로 바꿉니다.

    kubectl cordon NODE_NAME

    다음 코드 조각을 사용하여 특정 Kubernetes 버전(이 경우 1.28)의 모든 노드를 식별하고 연결할 수 있습니다.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Cordoning $node" kubectl cordon $node done
  5. 현재 배포가 하이브리드 노드에서 2개 미만의 CoreDNS 복제본을 실행하고 있는 경우, 배포를 복제본 2개 이상으로 확장합니다. 정상 작업 중에 복원력을 위해 하이브리드 노드에서 최소 2개의 CoreDNS 복제본을 실행하는 것이 좋습니다.

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  6. 다음 명령을 사용하여 클러스터에서 제거할 기존 Kubernetes 버전의 각 하이브리드 노드를 드레이닝합니다. 노드 드레이닝에 대한 자세한 내용은 Kubernetes 설명서의 Safely Drain a Node을 참조하세요. NODE_NAME을 이전 Kubernetes 버전의 하이브리드 노드 이름으로 바꿉니다.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data

    다음 코드 조각을 사용하여 특정 Kubernetes 버전(이 경우 1.28)의 모든 노드를 식별하고 드레이닝할 수 있습니다.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-emptydir-data done
  7. nodeadm을 사용하여 호스트에서 하이브리드 노드 아티팩트를 중지하고 제거할 수 있습니다. root/sudo 권한이 있는 사용자와 함께 nodeadm을 실행해야 합니다. 노드에 포드가 남아 있는 경우 기본적으로 nodeadm uninstall이 진행되지 않습니다. 자세한 정보는 하이브리드 노드 nodeadm 참조 섹션을 참조하세요.

    nodeadm uninstall
  8. 하이브리드 노드 아티팩트가 중지 및 제거된 상태에서, 클러스터에서 노드 리소스를 제거합니다.

    kubectl delete node node-name

    다음 코드 조각을 사용하여 특정 Kubernetes 버전(이 경우 1.28)의 모든 노드를 식별하고 삭제할 수 있습니다.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Deleting $node" kubectl delete node $node done
  9. CNI 선택에 따라 위의 단계를 실행한 후 하이브리드 노드에 아티팩트가 남아 있을 수 있습니다. 자세한 정보는 하이브리드 노드에 대한 CNI 구성을 참조하세요.

인플레이스 업그레이드

인플레이스 업그레이드 프로세스는 nodeadm upgrade를 사용하여 새로운 물리적 또는 가상 호스트 및 전환 마이그레이션 전략을 사용하지 않고 하이브리드 노드용 Kubernetes 버전을 업그레이드하는 것을 말합니다. 이 nodeadm upgrade 프로세스는 하이브리드 노드에서 실행되는 기존 구형 Kubernetes 구성 요소를 종료하고, 기존 구형 Kubernetes 구성 요소를 제거하고, 새 대상 Kubernetes 구성 요소를 설치하고, 새 대상 Kubernetes 구성 요소를 시작합니다. 하이브리드 노드에서 실행되는 애플리케이션에 미치는 영향을 최소화하기 위해 한 번에 하나의 노드를 업그레이드하는 것이 좋습니다. 이 프로세스의 지속 시간은 네트워크 대역폭 및 지연 시간에 따라 달라집니다.

  1. 다음 명령을 사용하여 업그레이드하는 노드를 예약 불가로 표시합니다. 이는 업그레이드하는 노드에서 새 포드가 예약되거나 다시 예약되지 않도록 하기 위한 것입니다. 자세한 내용은 Kubernetes 문서의 kubectl cordon을 참조하세요. NODE_NAME을 업그레이드하려는 하이브리드 노드의 이름으로 바꿉니다.

    kubectl cordon NODE_NAME
  2. 다음 명령을 사용하여 업그레이드하려는 노드를 드레이닝합니다. 노드 드레이닝에 대한 자세한 내용은 Kubernetes 설명서의 Safely Drain a Node을 참조하세요. NODE_NAME을 업그레이드하려는 하이브리드 노드의 이름으로 바꿉니다.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data
  3. 업그레이드하려는 하이브리드 노드에서 nodeadm upgrade를 실행합니다. root/sudo 권한이 있는 사용자와 함께 nodeadm을 실행해야 합니다. 노드 이름은 AWS SSM 및 AWS IAM Roles Anywhere 자격 증명 공급자 모두에 대한 업그레이드를 통해 보존됩니다. 업그레이드 프로세스 중에는 자격 증명 공급자를 변경할 수 없습니다. 하이브리드 노드 nodeadm 참조의 구성 값은 nodeConfig.yaml 섹션을 참조하세요. K8S_VERSION을 업그레이드할 대상 Kubernetes 버전으로 바꿉니다.

    nodeadm upgrade K8S_VERSION -c file://nodeConfig.yaml
  4. 업그레이드한 후 노드에서 포드를 예약하도록 허용하려면 다음을 입력합니다. NODE_NAME을 노드의 이름으로 바꿉니다.

    kubectl uncordon NODE_NAME
  5. 하이브리드 노드의 상태를 확인하고 노드가 종료될 때까지 기다렸다가 준비 상태로 새 Kubernetes 버전에서 다시 시작합니다.

    kubectl get nodes -o wide -w