기존 자체 관리형 노드 그룹 업데이트 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.

기존 자체 관리형 노드 그룹 업데이트

이 주제에서는 기존 AWS CloudFormation 자체 관리형 노드 스택을 새 AMI로 업데이트하는 방법을 설명합니다. 이 절차를 사용하여 클러스터 업데이트 후 새 버전의 Kubernetes로 노드를 업데이트할 수 있습니다. 그렇지 않으면 기존 Kubernetes 버전에 대해 최신 Amazon EKS 최적화 AMI로 업데이트할 수 있습니다.

중요

이 주제에서는 자체 관리형 노드 그룹에 대한 노드 업데이트에 대해 설명합니다. 관리형 노드 그룹 사용에 대한 자세한 내용은 관리형 노드 그룹 업데이트을 참조하십시오.

최신 기본 Amazon EKS 노드 AWS CloudFormation 템플릿은 예전 인스턴스를 제거하기 전에 한 번에 하나씩 새 AMI로 인스턴스를 시작하도록 구성되어 있습니다. 이렇게 구성하면 업데이트를 적용하는 동안 클러스터의 Auto Scaling 그룹에 항상 활성 인스턴스 수를 원하는 대로 항상 유지할 수 있습니다.

참고

이 방법은 eksctl로 생성한 노드 그룹에는 사용할 수 없습니다. eksctl을 사용하여 클러스터 또는 노드 그룹을 생성한 경우, 새 노드 그룹으로 마이그레이션 부분을 참조하세요.

기존 노드 그룹을 업데이트하려면
  1. 클러스터의 DNS 공급자를 결정합니다.

    kubectl get deployments -l k8s-app=kube-dns -n kube-system

    예제 출력은 다음과 같습니다. 이 클러스터는 DNS 확인에 CoreDNS를 사용하고 있지만, 클러스터는 그 대신 kube-dns를 반환할 수 있습니다. 출력은 사용 중인 버전에 따라 다르게 보일 수 있습니다.kubectl

    NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE coredns 1 1 1 1 31m
  2. 현재 배포가 두 개 미만의 복제본을 실행하고 있는 경우, 배포를 복제본 두 개로 확장합니다. 이전 명령 출력에서 해당 값이 대신 반환된 경우 corednskube-dns로 교체합니다.

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  3. (선택 사항) Kubernetes Cluster Autoscaler를 사용하는 경우 배포를 복제본 0개로 축소하여 조정 작업의 충돌을 방지합니다.

    kubectl scale deployments/cluster-autoscaler --replicas=0 -n kube-system
  4. 현재 노드 그룹의 인스턴스 유형과 원하는 인스턴스 수를 결정합니다. 나중에 그룹에 대한 AWS CloudFormation 템플릿을 업데이트할 때 이러한 값을 입력합니다.

    1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

    2. 왼쪽 탐색 창에서 시작 구성(Launch Configurations)을 선택하고 기존 노드 시작 구성에 대한 인스턴스 유형을 기록해 둡니다.

    3. 왼쪽 탐색 창에서 Auto Scaling 그룹(Auto Scaling Groups)을 선택하고 기존 노드 Auto Scaling 그룹에 대해 원하는(Desired) 인스턴스 수를 적어둡니다.

  5. AWS CloudFormation 콘솔(https://console.aws.amazon.com/cloudformation)을 엽니다.

  6. 노드 그룹 스택을 선택한 다음 [업데이트(Update)]를 선택합니다.

  7. Replace current template(현재 템플릿 대치)을 선택하고 Amazon S3 URL을 선택합니다.

  8. Amazon S3 URL에서 다음 URL을 텍스트 영역에 붙여 넣어 최신 버전의 노드 AWS CloudFormation 템플릿을 사용하고 있는지 확인합니다. 그리고 다음(Next)을 선택합니다.

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  9. Specify stack details(스택 세부 정보 지정) 페이지에서 다음 파라미터를 입력하고 다음을 선택합니다.

    • NodeAutoScalingGroupDesiredCapacity - 이전 단계에서 기록한 원하는 인스턴스 수를 입력합니다. 또는 스택을 업데이트할 때 조정할 원하는 새 노드 수를 입력합니다.

    • NodeAutoScalingGroupMaxSize - Auto Scaling 그룹이 확장할 수 있는 노드의 최대 노드 수를 입력합니다. 이 값은 원하는 용량보다 하나 이상의 노드여야 합니다. 이는 업데이트 중에 노드 수를 줄이지 않고 노드의 롤링 업데이트를 수행할 수 있도록 하기 위한 것입니다.

    • NodeInstanceType - 이전 단계에서 기록한 인스턴스 유형을 선택합니다. 또는 노드에 대해 다른 인스턴스 유형을 선택합니다. 다른 인스턴스 유형을 선택하려면 Amazon EC2 인스턴스 유형 선택 부분을 검토하세요. 각 Amazon EC2 인스턴스 유형은 탄력적 네트워크 인터페이스(네트워크 인터페이스)의 최대 수를 지원하며 각 네트워크 인터페이스는 최대 IP 주소 수를 지원합니다. 각 워커 노드와 Pod에는 고유한 IP 주소가 할당되므로 각 Amazon EC2 노드에서 실행할 최대 Pods 수를 지원하는 인스턴스 유형을 선택하는 것이 중요합니다. 인스턴스 유형이 지원하는 네트워크 인터페이스 및 IP 주소의 수 목록은 인스턴스 유형별 네트워크 인터페이스당 IP 주소를 참조하세요. 예를 들어, m5.large 인스턴스 유형은 작업자 노드 및 Pods에 대해 최대 30개의 IP 주소를 지원합니다.

      참고

      최신 Amazon VPC CNI plugin for Kubernetes 버전에 대해 지원되는 인스턴스 유형은 GitHub의 vpc_ip_resource_limit.go에 표시되어 있습니다. 지원되는 최신 인스턴스 유형을 사용하려면 Amazon VPC CNI plugin for Kubernetes 버전을 업데이트하는 것이 좋습니다. 자세한 내용은 Amazon VPC CNI plugin for Kubernetes Amazon EKS 추가 기능을 사용한 작업 단원을 참조하십시오.

      중요

      AWS 리전에 따라 일부 인스턴스 유형은 사용할 수 없습니다.

    • NodeImageIdSSMParam – 업데이트하려는 AMI ID의 Amazon EC2 Systems Manager 파라미터입니다. 다음 값은 Kubernetes 버전 1.30에 대해 최신 Amazon EKS 최적화 AMI를 사용합니다.

      /aws/service/eks/optimized-ami/1.30/amazon-linux-2/recommended/image_id

      1.30지원되는 동일한 Kubernetes 버전으로 바꿀 수 있습니다. 또는 제어 영역에서 실행 중인 Kubernetes 버전보다 최대 한 버전 이전이어야 합니다. 노드를 제어 영역과 동일한 버전으로 유지하는 것이 좋습니다. amazon-linux-2를 다른 AMI 유형으로 바꿀 수도 있습니다. 자세한 내용은 Amazon EKS 최적화 Amazon Linux AMI ID 검색 단원을 참조하십시오.

      참고

      Amazon EC2 Systems Manager 파라미터를 사용하면 AMI ID를 조회하고 지정하지 않아도 나중에 노드를 업데이트할 수 있습니다. AWS CloudFormation 스택에서 이 값을 사용 중이라면 모든 스택 업데이트에서는 지정된 Kubernetes 버전에 권장되는 최신 Amazon EKS 최적화 AMI를 항상 시작합니다. 템플릿에서 값을 변경하지 않은 경우에도 마찬가지입니다.

    • NodeImageId – 고유한 사용자 지정 AMI를 사용하려면 사용할 AMI의 ID를 입력하십시오.

      중요

      이 값은 NodeImageIdSSMParam에 지정된 값을 재정의합니다. NodeImageIdSSMParam 값을 사용하려면 NodeImageId의 값이 비어 있는지 확인하십시오.

    • DisableIMDSv1 - 기본적으로 각 노드는 인스턴스 메타데이터 서비스 버전 1(IMDSv1) 및 IMDSv2를 지원합니다. 그러나 IMDSv1을 사용 중지할 수 있습니다. 노드 그룹에서 예약된 노드 또는 Pods가 IMDSv1을 사용하지 않도록 하려면 true를 선택합니다. IMDS에 대한 자세한 내용은 인스턴스 메타데이터 서비스 구성을 참조하세요. 서비스 계정에 대한 IAM 역할을 구현한 경우 AWS 서비스에 대한 액세스 권한이 필요한 모든 Pods에 직접 필요한 권한을 할당합니다. 이렇게 하면 현재 AWS 리전 검색 등의 다른 이유로 클러스터의 Pods가 IMDS에 액세스할 필요가 없습니다. 그런 다음 호스트 네트워킹을 사용하지 않는 Pods에 대해 IMDSv2 액세스를 사용 중지할 수도 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로파일에 대한 액세스 제한 부분을 참조하세요.

  10. (선택 사항) 옵션(Options) 페이지에서 스택 리소스에 태그를 지정합니다. Next(다음)를 선택합니다.

  11. [검토(Review)] 페이지에서 정보를 검토하고, 스택이 IAM 리소스를 생성할 수 있는지 확인한 다음, [스택 업데이트(Update stack)]를 선택합니다.

    참고

    클러스터의 각 노드를 업데이트하는 데 몇 분 정도 걸립니다. 모든 노드의 업데이트가 완료될 때까지 기다린 후 다음 단계를 수행합니다.

  12. 클러스터의 DNS 공급자가 kube-dns인 경우 kube-dns 배포를 복제본 한 개로 축소합니다.

    kubectl scale deployments/kube-dns --replicas=1 -n kube-system
  13. (선택 사항) Kubernetes Cluster Autoscaler를 사용하는 경우 배포를 다시 원하는 양의 복제본으로 조정합니다.

    kubectl scale deployments/cluster-autoscaler --replicas=1 -n kube-system
  14. (선택 사항) 최신 Amazon VPC CNI plugin for Kubernetes 버전을 사용하고 있는지 확인합니다. 지원되는 최신 인스턴스 유형을 사용하려면 Amazon VPC CNI plugin for Kubernetes 버전을 업데이트하는 것이 좋습니다. 자세한 내용은 Amazon VPC CNI plugin for Kubernetes Amazon EKS 추가 기능을 사용한 작업 단원을 참조하십시오.