오토 스케일링 - Eksctl 사용 설명서

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

오토 스케일링

Auto Scaling 활성화

클러스터 오토스케일러 사용을 허용하는 IAM 역할을 사용하여 클러스터(또는 기존 클러스터의 노드 그룹)를 생성할 수 있습니다.

eksctl create cluster --asg-access

이 플래그는 k8s.io/cluster-autoscaler/enabledk8s.io/cluster-autoscaler/<clusterName> 태그도 설정하므로 노드 그룹 검색이 작동해야 합니다.

클러스터가 실행되면 Cluster Autoscaler 자체를 설치해야 합니다.

또한 관리형 또는 비관리형 노드 그룹 정의(들)에 다음을 추가하여 Cluster Autoscaler가 노드 그룹을 조정하는 데 필요한 태그를 추가해야 합니다.

nodeGroups: - name: ng1-public iam: withAddonPolicies: autoScaler: true

0에서 확장

노드 그룹을 0에서 확장할 수 있고 노드 그룹에 레이블 및/또는 테인트가 정의되어 있는 경우 이를 Auto Scaling 그룹(ASGs.

이를 수행하는 한 가지 방법은 노드 그룹 정의의 tags 필드에 ASG 태그를 설정하는 것입니다. 예를 들어 다음과 같은 레이블과 테인트가 있는 노드 그룹을 지정합니다.

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: key: feaster value: "true" effect: NoSchedule

다음 ASG 태그를 추가해야 합니다.

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" tags: k8s.io/cluster-autoscaler/node-template/label/my-cool-label: pizza k8s.io/cluster-autoscaler/node-template/taint/feaster: "true:NoSchedule"

관리형 노드 그룹과 비관리형 노드 그룹 모두에서를 propagateASGTags로 설정하여 이를 자동으로 수행할 수 true있습니다. 그러면 레이블과 테인트가 Auto Scaling 그룹에 태그로 추가됩니다.

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" propagateASGTags: true

영역 인식 Auto Scaling

워크로드가 영역별 워크로드인 경우 각 영역에 대해 별도의 노드 그룹을 생성해야 합니다. 이는가 그룹의 모든 노드가 정확히 동일하다고 cluster-autoscaler 가정하기 때문입니다. 따라서 예를 들어 영역별 PVC가 필요한 포드(예: EBS 볼륨)에 의해 스케일 업 이벤트가 트리거되는 경우 새 노드가 잘못된 AZ에 예약되어 포드가 시작되지 않을 수 있습니다.

환경이 다음 기준을 충족하는 경우 각 AZ에 대해 별도의 노드 그룹이 필요하지 않습니다.

  • 영역별 스토리지 요구 사항은 없습니다.

  • 호스트 이외의 토폴로지가 있는 podAffinity는 필요하지 않습니다.

  • 영역 레이블에 필요한 nodeAffinity가 없습니다.

  • 영역 레이블에 nodeSelector가 없습니다.

(여기 및 여기에서 자세히 읽어보세요.)

위의 요구 사항(및 기타 요구 사항)을 모두 충족하는 경우 여러 AZs에 걸쳐 있는 단일 노드 그룹으로 안전해야 합니다. 그렇지 않으면 별도의 단일 AZ 노드 그룹을 생성해야 합니다.

이전:

nodeGroups: - name: ng1-public instanceType: m5.xlarge # availabilityZones: ["eu-west-2a", "eu-west-2b"]

이후:

nodeGroups: - name: ng1-public-2a instanceType: m5.xlarge availabilityZones: ["eu-west-2a"] - name: ng1-public-2b instanceType: m5.xlarge availabilityZones: ["eu-west-2b"]