EKS 관리형 노드 그룹 - Eksctl 사용 설명서

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

EKS 관리형 노드 그룹

Amazon EKS 관리형 노드 그룹은 Amazon EKS Kubernetes 클러스터에 대한 노드(EC2 인스턴스)의 프로비저닝 및 수명 주기 관리를 자동화하는 기능입니다. 고객은 클러스터에 최적화된 노드 그룹을 프로비저닝할 수 있으며 EKS는 최신 Kubernetes 및 호스트 OS 버전으로 노드를 최신 상태로 유지합니다.

EKS 관리형 노드 그룹은 Amazon EKS 클러스터에 대해 AWS에서 관리하는 오토 스케일링 그룹 및 관련 EC2 인스턴스입니다. 각 노드 그룹은 Amazon EKS 최적화 Amazon Linux 2 AMI를 사용합니다. Amazon EKS를 사용하면 노드에 버그 수정 및 보안 패치를 쉽게 적용하고 최신 Kubernetes 버전으로 업데이트할 수 있습니다. 각 노드 그룹은 고가용성을 위해 여러 AWS VPC 가용 영역 및 서브넷에 걸쳐 있을 수 있는 클러스터의 Auto Scaling 그룹을 시작합니다.

관리형 노드 그룹에 대한 새로운 시작 템플릿 지원 관리형 노드 그룹에 대한 시작 템플릿 지원

참고

"비관리형 노드 그룹"이라는 용어는 eksctl이 처음부터 지원한 노드 그룹을 참조하는 데 사용되었습니다( nodeGroups 필드를 통해 표시됨). ClusterConfig 파일은 비관리형 노드 그룹을 정의하기 위해 nodeGroups 필드를 계속 사용하며 관리형 노드 그룹은 managedNodeGroups 필드로 정의됩니다.

관리형 노드 그룹 생성

$ eksctl create nodegroup

새 클러스터

관리형 노드 그룹을 사용하여 새 클러스터를 생성하려면를 실행합니다.

eksctl create cluster

여러 관리형 노드 그룹을 생성하고 구성을 더 잘 제어하려면 구성 파일을 사용할 수 있습니다.

참고

관리형 노드 그룹에는 비관리형 노드 그룹과의 완전한 기능 패리티가 없습니다.

# cluster.yaml # A cluster with two managed nodegroups --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large minSize: 2 maxSize: 3

관리형 노드 그룹을 생성하기 위한 구성 파일의 또 다른 예는 여기에서 찾을 수 있습니다.

관리형 노드 그룹과 비관리형 노드 그룹이 모두 있는 클러스터를 가질 수 있습니다. 비관리형 노드 그룹은 AWS EKS 콘솔에 표시되지 않지만 두 가지 유형의 노드 그룹을 모두 eksctl get nodegroup 나열합니다.

# cluster.yaml # A cluster with an unmanaged nodegroup and two managed nodegroups. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 nodeGroups: - name: ng-1 minSize: 2 managedNodeGroups: - name: managed-ng-1 minSize: 2 maxSize: 4 desiredCapacity: 3 volumeSize: 20 ssh: allow: true publicKeyPath: ~/.ssh/ec2_id_rsa.pub # new feature for restricting SSH access to certain AWS security group IDs sourceSecurityGroupIds: ["sg-00241fbb12c607007"] labels: {role: worker} tags: nodegroup-role: worker iam: withAddonPolicies: externalDNS: true certManager: true - name: managed-ng-2 instanceType: t2.large privateNetworking: true minSize: 2 maxSize: 3

신규 사용자 지정 AMI, 보안 그룹, instancePrefix, , instanceName, ebsOptimized, volumeType, volumeName, volumeKmsKeyID, volumeIOPS, maxPodsPerNode, 및 volumeEncrypted지원 preBootstrapCommands overrideBootstrapCommand disableIMDSv1

# cluster.yaml # A cluster with a managed nodegroup with customization. --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: managed-cluster region: us-west-2 managedNodeGroups: - name: custom-ng ami: ami-0e124de4755b2734d securityGroups: attachIDs: ["sg-1234"] maxPodsPerNode: 80 ssh: allow: true volumeSize: 100 volumeName: /dev/xvda volumeEncrypted: true # defaults to true, which enforces the use of IMDSv2 tokens disableIMDSv1: false overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh managed-cluster --kubelet-extra-args '--node-labels=eks.amazonaws.com/nodegroup=custom-ng,eks.amazonaws.com/nodegroup-image=ami-0e124de4755b2734d'

한 영역에서만 사용할 수 있는 인스턴스 유형을 요청하는 경우(eksctl 구성에 2개 사양 필요) 노드 그룹 요청에 가용 영역을 추가해야 합니다.

# cluster.yaml # A cluster with a managed nodegroup with "availabilityZones" --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: flux-cluster region: us-east-2 version: "1.23" availabilityZones: ["us-east-2b", "us-east-2c"] managedNodeGroups: - name: workers instanceType: hpc6a.48xlarge minSize: 64 maxSize: 64 labels: { "fluxoperator": "true" } availabilityZones: ["us-east-2b"] efaEnabled: true placement: groupName: eks-efa-testing

이는 한 영역에서만 사용할 수 있는 Hpc6 패밀리와 같은 인스턴스 유형에 해당될 수 있습니다.

기존 클러스터

eksctl create nodegroup --managed

팁: ClusterConfig 파일을 사용하여 전체 클러스터를 설명하는 경우 managedNodeGroups 필드에 새 관리형 노드 그룹을 설명하고 다음을 실행합니다.

eksctl create nodegroup --config-file=YOUR_CLUSTER.yaml

관리형 노드 그룹 업그레이드

노드 그룹을 사용 중인 AMI 유형에 대한 최신 EKS 최적화 AMI 릴리스 버전으로 언제든지 업데이트할 수 있습니다.

노드 그룹이 클러스터와 동일한 Kubernetes 버전인 경우 사용 중인 AMI 유형의 해당 Kubernetes 버전에 대한 최신 AMI 릴리스 버전으로 업데이트할 수 있습니다. 노드 그룹이 클러스터의 Kubernetes 버전에서 이전 Kubernetes 버전인 경우 노드 그룹을 노드 그룹의 Kubernetes 버전과 일치하는 최신 AMI 릴리스 버전으로 업데이트하거나 클러스터 Kubernetes 버전과 일치하는 최신 AMI 릴리스 버전으로 업데이트할 수 있습니다. 노드 그룹을 이전 Kubernetes 버전으로 롤백할 수 없습니다.

관리형 노드 그룹을 최신 AMI 릴리스 버전으로 업그레이드하려면:

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster

노드 그룹은 다음을 사용하여 지정된 Kubernetes 버전의 최신 AMI 릴리스로 업그레이드할 수 있습니다.

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --kubernetes-version=<kubernetes-version>

최신 버전 대신 특정 AMI 릴리스 버전으로 업그레이드하려면를 전달합니다--release-version.

eksctl upgrade nodegroup --name=managed-ng-1 --cluster=managed-cluster --release-version=1.19.6-20210310
참고

관리형 노드가 사용자 지정 AMIs를 사용하여 배포되는 경우 사용자 지정 AMI의 새 버전을 배포하려면 다음 워크플로를 따라야 합니다.

  • 노드 그룹의 초기 배포는 시작 템플릿을 사용하여 수행해야 합니다. 예:

    managedNodeGroups: - name: launch-template-ng launchTemplate: id: lt-1234 version: "2" #optional (uses the default version of the launch template if unspecified)
  • 사용자 지정 AMI의 새 버전을 생성합니다(AWS EKS 콘솔 사용).

  • 새 AMI ID를 사용하여 새 시작 템플릿 버전을 생성합니다(AWS EKS 콘솔 사용).

  • 노드를 시작 템플릿의 새 버전으로 업그레이드합니다. 예:

    eksctl upgrade nodegroup --name nodegroup-name --cluster cluster-name --launch-template-version new-template-version

노드에 대한 병렬 업그레이드 처리

여러 관리형 노드를 동시에 업그레이드할 수 있습니다. 병렬 업그레이드를 구성하려면 updateConfig 노드 그룹을 생성할 때 노드 그룹의를 정의합니다. 예제는 여기에서 찾을 updateConfig 수 있습니다.

한 번에 여러 노드를 업그레이드하여 워크로드가 가동 중지되지 않도록 하려면의 maxUnavailable 필드에 이를 지정하여 업그레이드 중에 사용할 수 없게 될 수 있는 노드 수를 제한할 수 있습니다updateConfig. 또는 사용할 수 없는 최대 노드 수를 총 노드 수의 백분율로 maxUnavailablePercentage정의하는를 사용합니다.

는 보다 클 수 maxUnavailable 없습니다maxSize. 또한 maxUnavailable 및는 동시에 사용할 수 maxUnavailablePercentage 없습니다.

이 기능은 관리형 노드에서만 사용할 수 있습니다.

관리형 노드 그룹 업데이트

eksctl를 사용하면 관리형 노드 그룹의 UpdateConfig 섹션을 업데이트할 수 있습니다. 이 섹션에서는 MaxUnavailable 및의 두 필드를 정의합니다MaxUnavailablePercentage. 노드 그룹은 업데이트 중에 영향을 받지 않으므로 가동 중지 시간을 예상해서는 안 됩니다.

명령은 --config-file 플래그를 사용하는 구성 파일과 함께 사용해야 update nodegroup 합니다. 노드 그룹에는 nodeGroup.updateConfig 섹션이 포함되어야 합니다. 자세한 내용은 여기에서 확인할 수 있습니다.

노드 그룹 상태 문제

EKS 관리형 노드 그룹은 노드 그룹 및 노드의 구성에서 상태 문제를 자동으로 확인하고 EKS API 및 콘솔을 통해 보고합니다. 노드 그룹의 상태 문제를 보려면:

eksctl utils nodegroup-health --name=managed-ng-1 --cluster=managed-cluster

레이블 관리

EKS 관리형 노드 그룹은 노드 그룹의 Kubernetes 노드에 적용되는 레이블 연결을 지원합니다. 클러스터 또는 노드 그룹 생성 중에 eksctl의 labels 필드를 통해 지정됩니다.

노드 그룹에서 새 레이블을 설정하거나 기존 레이블을 업데이트하려면:

eksctl set labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by=eks,kubernetes.io/role=worker

노드 그룹에서 레이블을 설정 해제하거나 제거하려면:

eksctl unset labels --cluster managed-cluster --nodegroup managed-ng-1 --labels kubernetes.io/managed-by,kubernetes.io/role

노드 그룹에 설정된 모든 레이블을 보려면:

eksctl get labels --cluster managed-cluster --nodegroup managed-ng-1

관리형 노드 그룹 조정

eksctl scale nodegroup는 관리형 노드 그룹도 지원합니다. 관리형 또는 비관리형 노드 그룹을 조정하기 위한 구문은 동일합니다.

eksctl scale nodegroup --name=managed-ng-1 --cluster=managed-cluster --nodes=4 --nodes-min=3 --nodes-max=5

추가 정보