kubernetes를 처음에 공부했을 때 별로 필요없는 줄 알고 비중을 크게 두지 않았다. 근데 공부하고 나서 활용도가 높아서 정리하게 되었다.
예를 들어 ai모델을 클라우드에서 돌리고자 한다. 그런데 워커 노드에 어떤 gpu와 disk가 있는지 모른다. 그렇다면 어느 노드에 돌리는 것이 효율적인지 모른다.
이럴 경우를 대비하여 label를 사용한다.
위와 같이 node1에는 gpu가 있고, disk가 ssd임을 알려준다면 ai모델을 돌리는 워커 노드를 택하는 것이 쉬워질 것이다. 이럴 경우에 쓰이도록 한다.
1. 노드의 label 할당하기
1) 전체 노드의 label 확인하기
kubectl get nodes --show-labels
위와 같이 node들의 label들을 확인할 수 있다. 이는 기본적으로 node들에 있는 label이다.
2) 노드에 label 할당하기
예를 들어 위의 그림처럼
- node1 : gpu = true, disk = ssd
- node2 : gpu = true
- node3 : disk = ssd
할당하고자 한다면 아래와 같이 코드를 작성하여 할당한다.
kubectl label node <nodeName> key=value
2-1) label 할당하기
kubectl label node w1-k8s gpu=true disk=ssd
labeled가 나오면서 label이 할당됨을 알 수 있다.
2-2) label 삭제하기
kubectl label node <nodeName> <key>-
위와 같이 해주면 해당 label의 key값이 빠진 것을 확인할 수 있다.
3) 노드의 특정 label 확인하기
위와 같이 노드를 할당했다면 전체 노드의 label을 보게 되면 어디에 label할당되었는지 한눈에 알기가 어렵다. 그래서 노드의 특정 label을 볼 수 있게 command를 작성하면 된다.
kubectl get node -l disk,gpu
위와 같이 옵션을 -l하면 label을 포함하고 노드를 보여주게 된다.
kubectl get node -L disk,gpu
-L 옵션을 쓸 경우에 노드와 함께 해당 label의 key, value값과 같이 보여주게 된다.
2. yaml 파일에 적용하기
아래와 같이 yaml을 파일을 작성해보자.
그러면 yaml 파일에 nodeSelector부분에 gpu, disk가 할당되어 있다. 이에 맞는 노드가 있다면 pod가 할당될 것이고, 아니라면 pending상태가 된다.
위와 같이 할당되어질 노드가 없다면 pending상태가 되고, 할당되어질 노드가 있다면 Node에 그에 맞는 노드가 할당되어지는 것을 확인이 된다.