
파드를 원하는 노드에 할당하는 법  
목차
사례와 설명
쿠버네티스 클러스터를 운영하는 당신, 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의 세계에 오신 걸 환영합니다
쿠버네티스 사용하기
