자체 관리형 Windows 노드 시작 - Amazon EKS

자체 관리형 Windows 노드 시작

이 주제는 Amazon EKS 클러스터에 등록하는 Windows 노드의 Auto Scaling 그룹을 시작하는 데 도움이 됩니다. 노드가 클러스터에 조인한 이후 Kubernetes 애플리케이션을 배포할 수 있습니다.

중요

Amazon EKS 노드는 표준 Amazon EC2 인스턴스이고, 일반 Amazon EC2 인스턴스 가격을 기반으로 비용이 청구됩니다. 자세한 내용은 Amazon EC2 요금을 참조하세요.

클러스터에 대해 Windows 지원을 사용하도록 설정해야 하며 Windows 노드 그룹을 시작하기 전에 중요한 고려 사항을 검토하는 것이 좋습니다. 자세한 내용은 섹션을 참조하세요Windows 지원 활성화

eksctl 또는 AWS Management Console을 사용하여 자체 관리형 Windows 노드를 시작할 수 있습니다.

eksctl

eksctl을 사용하여 자체 관리형 Windows 노드를 시작하려면

이 절차에서는 eksctl을 설치하고 eksctl 버전 0.70.0 이상을 요구합니다. 버전은 다음 명령을 통해 확인할 수 있습니다.

eksctl version

eksctl 설치 또는 업그레이드에 대한 자세한 내용은 eksctl 설치 또는 업그레이드 단원을 참조하십시오.

참고

이 방법은 eksctl로 생성된 클러스터에만 사용할 수 있습니다.

  1. (선택 사항) AmazonEKS_CNI_Policy 관리형 IAM 정책이 Amazon EKS 노드 IAM 역할에 연결되어 있는 경우 Kubernetes aws-node 서비스 계정에 연결하는 IAM 역할에 대신 할당하는 것이 좋습니다. 자세한 내용은 섹션을 참조하세요서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성

  2. 이 절차에서는 us-west-2 리전에 my-cluster라는 기존 클러스터가 있다고 가정합니다. 다른 기존 클러스터의 경우 값을 변경합니다. Windows 노드 그룹을 추가할 Amazon EKS 클러스터 및 Amazon Linux 노드 그룹이 아직 없는 경우에는 대신 Amazon EKS 시작하기 - eksctl 설명서를 따르는 것이 좋습니다. 이 설명서에는 Amazon Linux 노드로 Amazon EKS 클러스터를 생성하는 과정에 대한 전체 시연을 제공합니다.

    다음 명령을 사용하여 노드 그룹을 생성합니다. <example values>(<> 포함)를 사용자의 값으로 바꿉니다.

    중요

    AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷에 노드 그룹을 배포하려면 클러스터를 생성할 때 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷이 전달되지 않은 상태여야 합니다. 구성 파일을 사용하여 노드 그룹을 생성합니다. 이때 AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷을 지정합니다. 자세한 내용은 eksctl 문서에서 구성 파일을 사용하여 nodegroup 생성구성 파일 스키마 섹션을 참조하세요.

    eksctl create nodegroup \ --region <us-west-2> \ --cluster <my-cluster> \ --name <ng-windows> \ --node-type <t2.large> \ --nodes <3> \ --nodes-min <1> \ --nodes-max <4> \ --node-ami-family <WindowsServer2019FullContainer>
    참고
    • 노드가 클러스터에 조인하지 못한 경우 문제 해결 안내서의 노드가 클러스터 조인에 실패 섹션을 참조하세요.

    • eksctl 명령에 사용 가능한 옵션에 대한 자세한 정보를 보려면 다음 명령을 입력합니다.

      eksctl <command> -help

    결과:

    노드가 생성되면 여러 줄의 출력이 표시됩니다. 출력의 마지막 줄 중 하나는 다음 예제 줄과 유사합니다.

    [✔] created 1 nodegroup(s) in cluster "<my-cluster>"
  3. (선택 사항) 샘플 애플리케이션을 배포하여 클러스터 및 Windows 노드를 테스트합니다.

  4. (선택 사항) 모든 Kubernetes 서비스 계정에 IAM 역할을 할당하여 포드에 필요한 최소 권한만 부여하고 클러스터의 포드가 현재 리전 검색과 같은 다른 이유로 Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 액세스할 필요가 없는 경우는 IMDS에 대한 포드 액세스를 차단할 것을 권장합니다. 자세한 내용은 서비스 계정에 대한 IAM 역할IMDS 및 Amazon EC2 인스턴스 프로파일 자격 증명에 대한 액세스 제한 단원을 참조하십시오.

AWS Management Console

Prerequisites

  • 기존 Amazon EKS 클러스터 및 Linux 노드 그룹. 이러한 리소스가 없는 경우 Amazon EKS 시작하기 설명서 중 하나에 따라 리소스를 생성하는 것이 좋습니다. 이 설명서에는 Linux 노드로 Amazon EKS 클러스터를 생성하는 과정에 대한 전체 시연을 제공합니다.

  • Amazon EKS 클러스터의 요구 사항을 충족하는 기존 VPC 및 전용 보안 그룹. 자세한 내용은 클러스터 VPC 고려 사항Amazon EKS 보안 그룹 고려 사항 단원을 참조하십시오. Amazon EKS 시작하기 가이드는 요건을 충족하는 VPC를 생성합니다. 또는 Amazon EKS 클러스터에 대해 VPC 생성 가이드를 따라 수동으로 생성할 수 있습니다.

  • Amazon EKS 클러스터의 요구 사항을 충족하는 VPC 및 보안 그룹을 사용하는 기존 Amazon EKS 클러스터. 자세한 내용은 섹션을 참조하세요Amazon EKS 클러스터 생성 AWS Outposts, AWS Wavelength 또는 AWS Local Zones이 사용된 AWS 리전에 서브넷이 있는 경우 클러스터를 생성할 때 해당 서브넷이 전달되지 않은 상태여야 합니다.

1단계: AWS Management Console을 사용하여 자체 관리형 Windows 노드를 시작하려면

  1. 클러스터 상태가 ACTIVE가 되기를 기다립니다. 클러스터가 활성화되기 전에 노드를 시작하면 노드가 클러스터에 등록되지 않고 노드를 다시 시작해야 합니다.

  2. https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  3. 스택 생성(Create stack)을 선택합니다.

  4. [템플릿 지정(Specify template)]에서 [Amazon S3 URL]을 선택한 후 다음 URL을 복사하여 [Amazon S3 URL]에 붙여넣은 후 [다음(Next)]을 두 번 선택합니다.

    https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
  5. 빠른 스택 생성 페이지에서 다음 파라미터를 적절하게 입력합니다.

    • 스택 이름: AWS CloudFormation 스택에 대한 스택 이름을 선택합니다. 예를 들어 <cluster-name>-nodes로 이름을 지정할 수 있습니다.

    • ClusterName: Amazon EKS 클러스터 생성 시 사용할 이름을 입력합니다.

      중요

      이 이름은 1단계: Amazon EKS 클러스터 생성에서 사용하는 이름과 정확하게 일치해야 합니다. 그렇지 않은 경우 노드가 클러스터에 조인할 수 없습니다.

    • ClusterControlPlaneSecurityGroup: VPC를 만들 때 생성한 AWS CloudFormation 출력에서 보안 그룹을 선택합니다.

      다음 단계에서는 해당 그룹을 검색하는 한 가지 방법을 보여줍니다.

      1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

      2. 클러스터의 이름을 선택합니다.

      3. 구성 탭을 선택합니다.

      4. 네트워킹 탭을 선택합니다.

      5. ClusterControlPlaneSecurityGroup 드롭다운 목록에서 선택할 때 추가 보안 그룹(Additional Security Group) 값을 참조로 사용하세요.

    • NodeGroupName: 노드 그룹의 이름을 입력합니다. 이 이름은 나중에 노드에 대해 생성된 Auto Scaling 노드 그룹을 식별하는 데 사용할 수 있습니다.

    • NodeAutoScalingGroupMinSize: Auto Scaling 그룹이 축소할 수 있는 노드의 최소 노드 수를 입력합니다.

    • NodeAutoScalingGroupDesiredCapacity: 스택을 생성할 때 조정할 원하는 노드 수를 입력합니다.

    • NodeAutoScalingGroupMaxSize: Auto Scaling 그룹이 확장할 수 있는 노드의 최대 노드 수를 입력합니다.

    • NodeInstanceType: 노드에 대한 인스턴스 유형을 선택합니다.

      참고

      최신 버전의 Kubernetes용 Amazon VPC CNI 플러그인에 대해 지원되는 인스턴스 유형은 여기에 나와 있습니다. 지원되는 최신 인스턴스 유형을 활용하려면 CNI 버전을 업데이트해야 할 수 있습니다. 자세한 내용은 섹션을 참조하세요Amazon VPC CNI 자체 관리형 추가 기능 업데이트

    • NodeImageIdSSMParam: 현재 권장되는 Amazon EKS 최적화 Windows Core AMI ID의 Amazon EC2 Systems Manager 파라미터로 미리 채워집니다. 전체 버전의 Windows를 사용하려면 Core를 Full로 바꿉니다.

    • NodeImageId: (선택 사항) Amazon EKS 최적화 AMI 대신에 사용자 지정 AMI를 사용 중인 경우 해당 리전에 노드 AMI ID를 입력합니다. 여기에서 값을 지정하면 NodeImageIdSSMParam 필드에 있는 모든 값이 재정의됩니다.

    • NodeVolumeSize: 노드에 대해 루트 볼륨 크기를 GiB 단위로 지정합니다.

    • KeyName: 시작 이후 SSH를 사용하여 노드에 연결하는 데 사용할 수 있는 Amazon EC2 SSH 키 페어 이름을 입력합니다. Amazon EC2 키 페어가 아직 없는 경우 AWS Management Console에서 새로 생성할 수 있습니다. 자세한 내용은 Windows 인스턴스용 Amazon EC2 사용 설명서Amazon EC2 키 페어를 참조하세요.

      참고

      여기에 키 페어를 입력하지 않으면 AWS CloudFormation 스택이 생성되지 않습니다.

    • BootstrapArguments: -KubeletExtraArgs를 사용하여 별도의 kubelet 인수와 같이 노드 부트스트랩 스크립트에 전달할 선택적 인수를 지정합니다.

    • DisableIMDSv1: 각 노드는 기본적으로 인스턴스 메타데이터 서비스 버전 1(IMDSv1) 및 IMDSv2를 지원하지만 IMDSv1을 비활성화할 수 있습니다. 노드 그룹의 노드 또는 노드 그룹의 노드에 예약된 포드가 IMDSv1을 사용하지 않도록 하려는 경우 true를 선택합니다. IMDS에 대한 자세한 내용은 인스턴스 메타데이터 서비스 구성을 참조하세요.

    • VpcId: 생성한 VPC에 대한 ID를 선택합니다.

    • NodeSecurityGroups: VPC를 생성할 때 Linux 노드 그룹에 대해 생성된 보안 그룹을 선택합니다. Linux 노드에 둘 이상의 보안 그룹이 연결되어 있는 경우(예: eksctl로 Linux 노드 그룹을 생성한 경우) 여기서 모든 보안 그룹을 지정합니다.

    • Subnets: 생성한 서브넷을 선택합니다. Amazon EKS 클러스터에 대해 VPC 생성에 설명된 단계를 사용하여 VPC를 생성한 경우, VPC 내에서 노드가 시작될 프라이빗 서브넷만 지정합니다.

      중요
      • 서브넷 중 하나가 퍼블릭 서브넷인 경우 자동 퍼블릭 IP 주소 할당 설정을 사용하도록 설정해야 합니다. 퍼블릭 서브넷에 대해 이 설정을 사용하지 않으면 해당 퍼블릭 서브넷에 배포하는 노드에는 퍼블릭 IP 주소가 할당되지 않으며 클러스터 또는 기타 AWS 서비스와 통신할 수 없습니다. 서브넷이 2020년 3월 26일 이전에 Amazon EKS AWS CloudFormation VPC 템플릿 또는 eksctl을 사용하여 배포된 경우 퍼블릭 서브넷에 대해 자동 퍼블릭 IP 주소 할당이 사용 중지됩니다. 서브넷에 퍼블릭 IP 주소 할당을 활성화하는 방법에 대한 자세한 내용은 서브넷에 대한 퍼블릭 IPv4 주소 지정 속성 수정을 참조하십시오. 노드가 프라이빗 서브넷에 배포되면 NAT 게이트웨이를 통해 클러스터 및 다른 AWS 서비스와 통신할 수 있습니다.

      • 서브넷에 인터넷 액세스가 없는 경우 의 고려 사항 및 추가 단계를 알고 있는지 확인합니다프라이빗 클러스터

      • 1.18 또는 이전 버전의 클러스터에 노드를 배포하는 경우 선택한 서브넷에 클러스터 이름이 태깅되어 있는지 확인합니다. my-cluster(<> 포함)를 클러스터 이름으로 바꾸고 다음 명령을 실행하여 현재 클러스터 이름으로 태깅된 서브넷 목록을 확인합니다.

        aws ec2 describe-subnets --filters Name=tag:kubernetes.io/cluster/<my-cluster>,Values=shared | grep SubnetId

        선택하려는 서브넷이 이전 명령의 출력에 반환되어 있지 않으면 서브넷에 수동으로 태그를 추가해야 합니다. 자세한 내용은 섹션을 참조하세요서브넷 태깅

      • AWS Outposts, AWS Wavelength 또는 AWS Local Zones 서브넷을 선택하는 경우 클러스터를 생성할 때 해당 서브넷이 전달되지 않은 상태여야 합니다.

  6. 스택에서 IAM 리소스를 생성할 수 있는지 확인한 다음 [스택 생성(Create stack)]을 선택합니다.

  7. 스택이 생성된 후 콘솔에서 이를 선택하고 출력을 선택합니다.

  8. 생성된 노드 그룹에 대해 NodeInstanceRole을 기록합니다. Amazon EKS Windows 노드를 구성할 때 필요합니다.

2단계: 노드가 클러스터에 조인하도록 하려면

  1. AWS IAM Authenticator 구성 맵을 다운로드, 편집 및 적용합니다.

    1. 구성 맵 다운로드:

      curl -o aws-auth-cm-windows.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/aws-auth-cm-windows.yaml
    2. 즐겨찾는 텍스트 편집기에서 파일을 엽니다. <ARN of instance role (not instance profile) of **Linux** node><ARN of instance role (not instance profile) of **Windows** node> 코드 조각을 Linux 및 Windows 노드에 대해 기록한 NodeInstanceRole 값으로 바꾸고 파일을 저장합니다.

      중요

      이 파일에서 어떠한 행도 수정하지 마십시오.

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile) of **Linux** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of instance role (not instance profile) of **Windows** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows
    3. 구성을 적용합니다. 이 명령을 완료하는 데 몇 분이 걸릴 수 있습니다.

      kubectl apply -f aws-auth-cm-windows.yaml
      참고

      권한 부여 또는 리소스 유형 오류가 표시되는 경우 문제 해결 단원에서 권한이 없거나 액세스가 거부됨(kubectl)을 참조하십시오.

      노드가 클러스터에 조인하지 못한 경우 문제 해결 가이드의 노드가 클러스터 조인에 실패 섹션을 참조하세요.

  2. 노드의 상태를 확인하고 Ready 상태가 될 때까지 대기합니다.

    kubectl get nodes --watch
  3. (선택 사항) 샘플 애플리케이션을 배포하여 클러스터 및 Windows 노드를 테스트합니다.

  4. (선택 사항) AmazonEKS_CNI_Policy 관리형 IAM 정책이 Amazon EKS 노드 IAM 역할에 연결되어 있는 경우 Kubernetes aws-node 서비스 계정에 연결하는 IAM 역할에 대신 할당하는 것이 좋습니다. 자세한 내용은 섹션을 참조하세요서비스 계정에 IAM 역할을 사용하도록 Amazon VPC CNI 플러그인 구성

  5. (선택 사항) 모든 Kubernetes 서비스 계정에 IAM 역할을 할당하여 포드에 필요한 최소 권한만 부여하고 클러스터의 포드가 현재 리전 검색과 같은 다른 이유로 Amazon EC2 인스턴스 메타데이터 서비스(IMDS)에 액세스할 필요가 없는 경우는 IMDS에 대한 포드 액세스를 차단할 것을 권장합니다. 자세한 내용은 서비스 계정에 대한 IAM 역할IMDS 및 Amazon EC2 인스턴스 프로파일 자격 증명에 대한 액세스 제한 단원을 참조하십시오.