Ncloud Kubernetes로 GPU 노드 생성하기

  • Post category:Ncloud
  • Post author:

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}