본문으로 건너뛰기
버전: docs v25.02

Manage Nodegroup

Updated 2024.10.02

Topics

  1. 사전 준비
  2. Nodegroup 추가
  3. Nodegroup 수정
  4. Nodegroup 삭제


자세한 단계

{변수}의 자세한 설명은 Terminology 페이지를 참고하세요

  • Nodegroup 설명
    • Nodegroup 은 학습을 실행할 때만 사용됩니다.
    • Nodegroup 은 Workspace 별로 생성됩니다. (과금 분리)
  • Nodegroup 종류 (Label)
    • 사용자에게 편의성을 제공하기 위해서 친숙한 용어(Label)로 선택할 수 있게 제공합니다.
      • {PROJECT_NODEGROUP_SPEC} : low, standard, high, low-gpu, standard-gpu, high-gpu
  • Nodegroup 스펙
    • {PROJECT_NODEGROUP_EC2_NAME} : Nodegroup 의 종류에 따라서 EC2 의 성능을 정의합니다.
    • {PROJECT_NODEGROUP_MAX} : 학습 서비스의 정의에 따라서 한번에 실행가능한 최대 EC2의 개수를 정의합니다.
    • availabilityZones 은 {PROJECT_NODEGROUP_EC2_NAME}에 의해 정의됩니다.

1. 사전 준비

설치를 위한 환경 설정이 완료 되어야 합니다. (1. 설치 환경 셋업하기 참고)

export AWS_CLUSTER_NAME=
export AWS_DEFAULT_REGION=
export AWS_DEFAULT_REGION_ALIAS=
export INFRA_NAME=
export DEPLOY_ENV=
export AIC_BACKEND_URL=
export PROJECT_NAME=
export WORKSPACE_NAME=${PROJECT_NAME}-ws
export KUBEFLOW_NAMESPACE_NAME=aic-ns-${WORKSPACE_NAME}
export KUBEFLOW_USER_NAME=aic-user-${WORKSPACE_NAME}
export KUBEFLOW_USER_PASSWD='$2a$12$A6GAI7xf1CjfPCF3MnycvuDcXUdP4O.Ruo7PvQUFUkmKGSYcCiieS'
export KUBEFLOW_USER_UNIQUE_ID=`$(echo date +"%Y%m%d%H%M%S")`
export PROJECT_S3_BUCKET_NAME=s3-${AWS_DEFAULT_REGION_ALIAS}-${INFRA_NAME}-${DEPLOY_ENV}-${PROJECT_NAME}
export PROJECT_NODEGROUP_SPEC=standard
export PROJECT_NODEGROUP_LABEL=${PROJECT_NAME}-ws-${PROJECT_NODEGROUP_SPEC}
export PROJECT_NODEGROUP_NAME=ng-${AWS_DEFAULT_REGION_ALIAS}-aicond-${PROJECT_NAME}-ws-${PROJECT_NODEGROUP_SPEC}
export PROJECT_NODEGROUP_DESIRED_SIZE=
export PROJECT_NODEGROUP_MIN=0
export PROJECT_NODEGROUP_MAX=
export PROJECT_NODEGROUP_EC2_NAME=
export PROJECT_NODEGROUP_EC2_VCPU=
export PROJECT_NODEGROUP_EC2_MEM=
export PROJECT_NODEGROUP_EC2_GPU=


2. Nodegroup 추가

  • Nodegroup 인프라를 생성합니다.

    • Nodegroup 생성을 정의한 create-nodegroup.yaml 을 생성합니다.

      [Expand create-nodegroup.yaml]

      NOTE : "propagateASGTags: true" 필수 설정

      cat <<EOT > create-nodegroup.yaml
      apiVersion: eksctl.io/v1alpha5
      kind: ClusterConfig
      managedNodeGroups:
      - amiFamily: AmazonLinux2
      desiredCapacity: ${PROJECT_NODEGROUP_DESIRED_SIZE}
      disableIMDSv1: false
      disablePodIMDS: false
      iam:
      withAddonPolicies:
      albIngress: false
      appMesh: false
      appMeshPreview: false
      autoScaler: true
      awsLoadBalancerController: false
      certManager: false
      cloudWatch: false
      ebs: false
      efs: false
      externalDNS: false
      fsx: false
      imageBuilder: false
      xRay: false
      instanceSelector: {}
      instanceType: ${PROJECT_NODEGROUP_EC2_NAME}
      labels:
      aic-role: ${PROJECT_NODEGROUP_LABEL}
      alpha.eksctl.io/cluster-name: ${AWS_CLUSTER_NAME}
      alpha.eksctl.io/nodegroup-name: ${PROJECT_NODEGROUP_NAME}
      maxSize: ${PROJECT_NODEGROUP_MAX}
      minSize: ${PROJECT_NODEGROUP_MIN}
      name: ${PROJECT_NODEGROUP_NAME}
      availabilityZones: ["${AWS_DEFAULT_REGION}a", "${AWS_DEFAULT_REGION}c"]
      privateNetworking: true
      releaseVersion: ""
      securityGroups:
      withLocal: null
      withShared: null
      ssh:
      allow: false
      publicKeyPath: ""
      tags:
      alpha.eksctl.io/nodegroup-name: ${PROJECT_NODEGROUP_NAME}
      alpha.eksctl.io/nodegroup-type: managed
      volumeIOPS: 3000
      volumeSize: 50
      volumeThroughput: 125
      volumeType: gp3
      propagateASGTags: true
      metadata:
      name: ${AWS_CLUSTER_NAME}
      region: ${AWS_DEFAULT_REGION}
      EOT
    • 아래 명령어로 Nodegroup을 생성합니다.

      eksctl create nodegroup --config-file=create-nodegroup.yaml
      [Expand Trouble Shooting : 'AccessConfig']
      error getting cluster stack template: failed to parse GetStackTemplate response: json: unknown field "AccessConfig

      eksctl 업데이트 후 실행

  • 생성된 Nodegroup을 AI Conductor의 Workspace에 반영합니다.

    • {AIC_BACKEND_URL} 에 접속하여, ADMIN 권한의 사용자로 로그인 합니다.

    • POST/api/v1/workspaces/{workspace_id}/exespecs 으로 Nodegroup의 정보를 추가합니다.

      • workspace_id : GET/api/v1/workspaces 를 통해 확인 가능합니다.
      • name : {PROJECT_NODEGROUP_SPEC}
      • vcpu : {PROJECT_NODEGROUP_EC2_VCPU}
      • ram_gb : {PROJECT_NODEGROUP_EC2_MEM}
      • gpu : {PROJECT_NODEGROUP_EC2_GPU}
      [Expand Example of adding nodegroups]

      2개의 노드그룹 추가 예제입니다.

      [
      {
      "name": "standard",
      "vcpu": 2,
      "ram_gb": 8,
      "gpu": 0
      },
      {
      "name": "high",
      "vcpu": 8,
      "ram_gb": 32,
      "gpu": 0
      }
      ]



3. Nodegroup 수정

  • 수정된 Nodegroup을 AI Conductor의 Workspace에 반영합니다.
    • {AIC_BACKEND_URL} 에 접속하여, ADMIN 권한의 사용자로 로그인 합니다.

    • PATCH/api/v1/workspaces/{workspace_id}/exespecs 으로 Nodegroup의 정보를 수정합니다.

      • workspace_id : GET/api/v1/workspaces 를 통해 확인 가능합니다.
      • name : {PROJECT_NODEGROUP_SPEC}
        • NOTE : name은 기존 생성된 Nodegroups 을 사용합니다.
      • vcpu : {PROJECT_NODEGROUP_EC2_VCPU}
      • ram_gb : {PROJECT_NODEGROUP_EC2_MEM}
      • gpu : {PROJECT_NODEGROUP_EC2_GPU}
      [Expand Example of updating nodegroups]

      2개의 노드그룹 수정 예제입니다.

      [
      {
      "name": "standard",
      "vcpu": 4,
      "ram_gb": 16,
      "gpu": 0
      },
      {
      "name": "high",
      "vcpu": 16,
      "ram_gb": 64,
      "gpu": 0
      }
      ]



4. Nodegroup 삭제

  • Nodegroup 인프라를 삭제합니다.

    • create-nodegroup.yaml 을 활용하여 nodegroup을 삭제합니다.
      eksctl delete nodegroup --config-file=create-nodegroup.yaml --approve
    • eksctl 명령어로 nodegroup을 삭제합니다.
      eksctl delete nodegroup --cluster ${AWS_CLUSTER_NAME} --region ${AWS_DEFAULT_REGION} --name ${PROJECT_NODEGROUP_NAME}
  • 삭제된 Nodegroup을 AI Conductor의 Workspace에 반영합니다.

    • {AIC_BACKEND_URL} 에 접속하여, ADMIN 권한의 사용자로 로그인 합니다.

    • POST/api/v1/workspaces/{workspace_id}/exespecs/delete 으로 Nodegroup의 정보를 삭제합니다.

      • workspace_id : GET/api/v1/workspaces 를 통해 확인 가능합니다.
      • name : {PROJECT_NODEGROUP_SPEC}
        • NOTE : name은 기존 생성된 Nodegroups 을 사용합니다.
      [Expand Example of deleting nodegroups]

      2개의 노드그룹 삭제 예제입니다.

      [
      {
      "name": "standard",
      },
      {
      "name": "high",
      }
      ]