Manage Nodegroup
Topics
자세한 단계
{변수}의 자세한 설명은 Terminology 페이지를 참고하세요
- Nodegroup 설명
- Nodegroup 은 학습을 실행할 때만 사용됩니다.
- Nodegroup 은 Workspace 별로 생성됩니다. (과금 분리)
- Nodegroup 종류 (Label)
- 사용자에게 편의성을 제공하기 위해서 친숙한 용어(Label)로 선택할 수 있게 제공합니다.
- {PROJECT_NODEGROUP_SPEC} : low, standard, high, low-gpu, standard-gpu, high-gpu
- 사용자에게 편의성을 제공하기 위해서 친숙한 용어(Label)로 선택할 수 있게 제공합니다.
- 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}
- create-nodegroup.yaml 을 활용하여 nodegroup을 삭제합니다.
-
삭제된 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",
}
]
-