Amazon EKS 관리형 노드 그룹을 사용하여 스팟 인스턴스를 시작하고 문제를 해결하려면 어떻게 해야 합니까?

3분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에 사용할 스팟 용량을 갖춘 관리형 노드 그룹을 생성하고 문제를 해결하려고 합니다.

해결 방법

1.    eksctl을 설치합니다.

중요: 사용하기 전에 모든 AWS Command Line Interface(AWS CLI) 명령을 확인하고 예제 문자열의 인스턴스를 실제 값으로 바꾸세요. 예를 들어 example_cluster를 실제 클러스터 이름으로 바꿉니다.

2.    다음 명령을 실행하여 기존 클러스터에 스팟 용량을 갖춘 관리형 노드 그룹을 생성합니다.

#eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types=<Comma-separated list of instance types> --region <EKS cluster AWS region. Defaults to the value set in your AWS config (~/.aws/config)>

예:

#eksctl create nodegroup --cluster=demo --spot --instance-types=c3.large,c4.large,c5.large --region us-east-1

참고: 스팟 관리형 노드 그룹을 생성하는 동안 --name, --nodes, --nodes-min, --nodes-max 등의 다른 플래그도 설정할 수 있습니다. 사용 가능한 모든 플래그의 목록을 가져오려면 다음 명령을 실행하세요.

#eksctl create nodegroup --help

3.    클러스터의 eksctl ClusterConfig 구성 파일을 유지하는 경우 해당 파일을 사용하여 스팟 관리형 노드 그룹을 생성할 수도 있습니다. 다음 명령을 실행하여 spot-cluster.yaml 구성 파일이적용된 관리형 노드 그룹을 사용해 스팟 인스턴스를 생성합니다.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: <example_cluster>
  region: <example_region>
managedNodeGroups:
- name: spot
  instanceTypes: ["c3.large","c4.large","c5.large","c5d.large","c5n.large","c5a.large"]
  spot: true

4.    다음 명령을 실행하여 이 구성 파일을 사용해 노드 그룹을 생성합니다.

# eksctl create nodegroup -f spot-cluster.yaml

Amazon EKS에서 스팟 인스턴스 관련 문제 해결

다음과 같이 eksctl 또는 Amazon EKS 콘솔을 사용하여 관리형 노드 그룹의 상태를 확인합니다.

$ eksctl utils nodegroup-health --name=<example_nodegroup> --cluster=<example_cluster>

사용된 인스턴스 유형의 스팟 용량이 부족해 오류가 발생하고 스팟 관리형 노드 그룹의 성능이 저하될 수 있습니다. 예를 들어 다음 오류를 참조하세요.

AsgInstanceLaunchFailures Could not launch Spot Instances. UnfulfillableCapacity - Unable to fulfill capacity due to your request configuration. Please adjust your request and try again. Launching EC2 instance failed.

참고: 스팟 인스턴스를 성공적으로 도입하려면 스팟 관리형 노드 그룹 구성의 일부로 스팟 인스턴스 다양화를 구현하는 것이 좋습니다. 스팟 인스턴스 다양화는 여러 스팟 인스턴스 풀에서 용량을 확보하는 데 유용합니다. 확보된 용량은 스팟 인스턴스 종료 알림이 수신된 스팟 인스턴스를 스케일 업하고 교체하는 데 사용됩니다.

vCPU 1개당 RAM 4GB 비율에 부합하는 인스턴스 유형으로 클러스터 스팟 노드 그룹을 프로비저닝해야 하는 경우, 스팟 인스턴스 풀을 다양화하세요. 다음 전략 중 하나를 사용하여 인스턴스 풀을 다양화합니다.

  • 크기가 각각 다른 여러 노드 그룹을 생성합니다. vCPU가 4개이고 RAM이 16GB인 노드 그룹과 vCPU가 8개이고 RAM이 32GB인 다른 노드 그룹을 예로 들 수 있습니다.
  • 노드 그룹 내에서 인스턴스 다양화를 구현합니다. 이렇게 하려면 여러 스팟 인스턴스 풀에서 동일한 vCPU 및 메모리 기준을 충족하는 여러 인스턴스 유형과 패밀리를 혼합하여 선택합니다.

다음 명령을 실행하여 amazon-ec2-instance-selector를 사용해 충분한 수와 용량의 vCPU와 RAM이 있는 관련 인스턴스 유형 및 패밀리를 선택합니다.

curl -Lo ec2-instance-selector https://github.com/aws/amazon-ec2-instance-selector/releases/download/v2.0.3/ec2-instance-selector-`uname | tr '[:upper:]' '[:lower:]'`-amd64 && chmod +x ec2-instance-selector
sudo mv ec2-instance-selector /usr/local/bin/
ec2-instance-selector --version

예:

ec2-instance-selector --vcpus 4 --memory 16 --gpus 0 --current-generation -a x86_64 --deny-list '.*[ni].*'

이전 명령은 다음과 유사한 목록을 표시합니다. 이러한 인스턴스를 노드 그룹 중 하나의 일부로 사용하세요.

  • m4.xlarge
  • m5.xlarge
  • m5a.xlarge
  • m5ad.xlarge
  • m5d.xlarge
  • t2.xlarge
  • t3.xlarge
  • t3a.xlarge

참고: Amazon EKS API를 사용하여 기존 노드 그룹의 인스턴스 유형을 변경할 수는 없습니다. 원하는 인스턴스 유형의 스팟 노드 그룹을 새로 만드는 것이 좋습니다. eksctl create nodegroup 명령에 다음을 입력합니다. 노드 그룹이 스팟 인스턴스를 실행한다는 것을 나타내는 --spot이라는 새 eksctl 플래그가 표시됩니다.

$eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types m5.xlarge,m4.xlarge,m5a.xlarge,m5d.xlarge,m5n.xlarge,m5ad.xlarge --region <example_region>

AWS 공식
AWS 공식업데이트됨 일 년 전