
이번 게시물에서는 노드 네임, label, 노드 셀렉터를 사용하는 것을 진행해보겠다.

현재 노드 구성과 레이블이 이렇게 되어있는데 노드에 레이블을 붙일 수 있다.
# worker 노드
kubectl label node multi-node-worker env=dev region=shared
# worker2 노드
kubectl label node multi-node-worker2 env=stage region=internal
# worker3 노드
kubectl label node multi-node-worker3 env=prod region=shared
env, region은 키값이며 dev, stage, shared, internal은 각각 value에 해당한다.
노드가 많을 경우 해당 키와 밸류값을 가진 노드를 찾을 때 효과적이다.
노드가 많아졌을 때, 특정 label을 가진 노드만 조회하려면
-l 옵션(label selector)을 사용하면 된다.
예를 들어,
region=shared label을 가진 노드만 찾고 싶다면
kubectl get nodes -l region=shared
위 명령어를 통해 찾을 수 있다.

그럼 다음과 같이 나온다.
특정 노드의 라벨을 삭제하고 싶을 땐 ,
kubectl label node <노드이름> <키>-
형식으로 키 이름 뒤에 하이픈(-) 을 붙인다.
예시
# 특정 키(env)만 삭제
kubectl label node multi-node-worker env-
# 여러 개의 라벨을 한 번에 삭제
kubectl label node multi-node-worker env- region-
삭제가 완료되면 다시 kubectl get nodes --show-labels 로 확인할 수 있다.

label을 지정하면 다음과 같이 labeled라고 뜬다.
또한 다시 노드의 정보를 검색해봤을 때,

다음과 같이 label이 등록된 것을 확인할 수 있다.
노드이름을 사용하여 worker3노드에 무조건 배치되도록 파드를 구성해본다.
파일명: pod-nodename.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodename
spec:
nodeName: multi-node-worker3
containers:
- name: test-container
image: nginx
ports:
- containerPort: 80
이렇게 nodeName:multi-node-worker3 이라고 노드명을 줘서
노드3번에 배치될 것이다.

이렇게 실제로 worker노드 3번에 배치된 것을 확인할 수 있다.
위 예시는 노드네임을 줘서 배치를 제어했지만, 여기에서는 노드의 label로 region=shared label을 주어 1번과 3번 중 아무 레이블에 가도록 할 것이다.
그러나 이미 3번에는 배치가 되어있기 때문에 1번으로 갈 것이라 예상한다.
파일명: pod-nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeselector
spec:
nodeSelector:
env: dev
region: shared
containers:
- name: test-container
image: nginx
ports:
- containerPort: 80
nodeSelector :
env: dev
라는 값을 줘서 같은 label을 가진 1번 3번 중 가도록 하였다.

이렇듯, 파드를 배포한 뒤 보면 이미 파드가 할당된 3번말고 1번에 자동으로 할당된 것을 확인할 수 있다.
참고자료:
[쿠버네티스 공식 홈페이지 - Labels and Selectors]
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/