Ncloud Kubernetes로 GPU 노드 생성하기

Private로 생성시 GPU의 경우 반드시 NAT GW를 생성하고 Route table 설정하여 GPU Node의 subnet이 외부 통신 가능한 상태에서 생성하여야 합니다.

CNI Plugin은 cilium으로만 생성 가능합니다.

클러스터당 Subnet은 5개까지 적용 가능합니다.

[+] GPU 노드

Cluster 생성

  • 클러스터 설정

※ 하이퍼바이저가 KVM인 경우 최대 노드 수를 설정할 수 없음.

※ 하이퍼바이저가 KVM이며 Zone이 KR-2 인경우 GPU 노드 생성 불가

※ 하이퍼바이저가 XEN이며 Zone이 KR-1 인경우 Tesla T4만 생성 가능

※ 네트워크 타입과 상관없이 클러스터의 LB Subnet은 Private, Public 둘 다 필요

※ Audit Log : CLA(Cloud Log Analytics와 연동하여 클러스터 사용 이력을 로그로 저장 가능

  • 노드풀 설정

※ GPU Node는 clilum-operator 등 기본 모듈 등이 설치될 일반 노드풀이 반드시 1개 이상 필요.

※ 안정적인 운영을 위해서는 일단 노드풀의 워커노드를 2개 이상 혹은 GPU에도 기본 모듈 스케줄링하여 사용 권장.

  • 최종 확인

Kubernetes 설정

  • iam auth

Kubernetes Service는 ncp-iam-authenticator를 통해 IAM 인증을 제공합니다.

IAM 인증을 통해 kubectl 명령을 사용하려면 ncp-iam-authenticator를 설치하고 kubectl 설정 파일을 수정합니다

  • ncp-iam-authenticator 설치
curl -o ncp-iam-authenticator -L https://github.com/NaverCloudPlatform/ncp-iam-authenticator/releases/latest/download/ncp-iam-authenticator_darwin_amd64

  • kube config

ncp-iam-authenticator를 사용하기 위해서 먼저 API 인증키 값을 설정합니다

vim configure

[DEFAULT]
ncloud_access_key_id = {SubAccount Access Key}
ncloud_secret_access_key = {SubAccount Secret Key}
ncloud_api_url = https://ncloud.apigw.ntruss.com

Access Key와 Secret Key는 Sub Account의 API 접근 허용 설정 후 생성 가능합니다.

ncp-iam-authenticator create-kubeconfig --region <region-code> --clusterUuid <cluster-uuid> --output kubeconfig.yaml (--credentialConfig {configure PATH})

  • kubectl 설치
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
chmod +x kubectl
mkdir -p ~/.local/bin
mv ./kubectl ~/.local/bin/kubectl
# and then append (or prepend) ~/.local/bin to 
kubectl version --client

Nvidia plugin 설치

  • helm 설치
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \
   && chmod 700 get_helm.sh \
   && ./get_helm.sh

  • nvidia-device-plugin helm 저장소 추가
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin \
   && helm repo update

  • nvidia device plugin 배포
helm install --generate-name nvdp/nvidia-device-plugin

ALB Ingress 설정

  • ALB Ingress Controller 설치
wget https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml

  • vim install.yaml

Ingress의 리소스에 spec.ingressClassName: alb 필드를 추가합니다.

rules에 타겟이 될 경로를 지정합니다.

Deployment에 tolerations 추가

ALB ingress 는 Port 단위 분기를 지원하지 않습니다.

Port 단위 분기를 해야한다면 nginx ingress를 사용해야 합니다.

[+] ALB Ingress Controller 활용 예제

[+] Ingress 활용 예제


※ 추가

Cluster가 2개 이상인 경우 한개의 kubeconfig.yaml 파일로 kubectl 명령어 사용할 수 있는 방법

멀티 클러스터 환경 변수 설정하기

[+] 다중 클러스터 접근 구성

생성되어있는 kubeconfig.yaml에 두번째 클러스터에 대한 context config 정보 update 설정

ncp-iam-authenticator update-kubeconfig --region <region-code> --clusterUuid <cluster-uuid> --kubeconfig=kubeconfig.yaml (--credentialConfig {configure PATH})

확인하기

kubeconfig 환경 변수 설정

  • vim ~/.bashrc

cluster 스위칭 방법

kubectl --kubeconfig=${KUBE_CONFIG} config use-context {Cluster Name}