Skip to main content

Docs

God shall bless us; and all the ends of the earth shall fear him.

Alt
파드를 원하는 노드에 할당하는 법

목차

사례와 설명​

쿠버네티스 클러스터를 운영하는 당신, ML 모델이 느리게 동작하는 것을 확인한다.
해결사인 당신은 원인을 찾게 되고, GPU 노드가 놀고 있음을 확인한다!

파드는 스케줄러가 배포 시점에 가장 최적화된 노드에 배치한다.(기회가 되면 더 다루겠다)

위의 사례가 적절한 예시가 될 지 모르겠지만, 여러가지 이유로 특정한 노드 집합에서만 동작하도록 파드 를 제한해야할 필요가 있다.

노드 설렉터는 쿠버네티스에서 권장하는 노드 선택 제약 조건이다. nodeSelector는 spec의 필드로서 키:값의 매핑으로 지정하게 된다.

노드에 파드 할당하기​

쿠버네티스 클러스터를 살펴보자

master@master:~$ kubectl get nodes

NAME STATUS ROLES AGE VERSION
gpu Ready <none> 51d v1.16.0
master Ready master 58d v1.16.0
slave Ready <none> 58d v1.16.0

gpu노드에 gpu 라벨(레이블)을 추가한다.

# kubectl label {node} {key=value}
master@master:~$ kubectl label nodes gpu gpu=true
node/gpu labeled

# 잘 되었나 확인해보자
master@master:~$ kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
gpu Ready <none> 51d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=gpu,kubernetes.io/os=linux
master Ready master 58d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
slave Ready <none> 58d v1.16.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=slave,kubernetes.io/os=linux

# 자세히 살펴보면 알겠지만, 미리 지정된 kubernetes.io/hostname=gpu 라벨을 사용할 수 있다

배포 테스트를 위해 적당한 pod 생성 yaml을 만들어주자.

apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
- name: test
image: alpine
imagePullPolicy: IfNotPresent
nodeSelector:
gpu: true

배포하고 확인해 본다.

master@master:~$ kubectl apply -f test.yaml
pod/test created

master@master:~$ kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test 0/1 Completed 2 115s 10.244.3.78 gpu <none> <none>

간단한 작업이지만 kubernetes 구조를 이해하는데 큰 도움이 될 것이다.

Tips​

kubernetes의 세계에 오신 걸 환영합니다
쿠버네티스 사용하기

Reference​

[공식]노드에 파드 할당하기