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}