kubernetes
[따배쿠] Node Label
bbiyak2da
2024. 12. 10. 11:12
Node Label
- Worker Node의 특성을 Label로 설정
- Kubectl label nodes <노드 이름> <레이블 키>=<레이블 값>
- 노드를 선택해서 파드를 배치할 수 있다.
Node Label 관리 명령어
예시
# node의 label 조회
root@master:~/Getting-Start-Kubernetes/9# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane 36d v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/ar ch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclud e-from-external-load-balancers=
node1 Ready <none> 36d v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/ar ch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2 Ready <none> 4d19h v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/ar ch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
# label 할당
root@master:~/Getting-Start-Kubernetes/9# kubectl label nodes node1 gpu=true disk=ssd
node/node1 labeled
root@master:~/Getting-Start-Kubernetes/9# kubectl label nodes node2 gpu=true
node/node2 labeled
# 확인
root@master:~/Getting-Start-Kubernetes/9# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane 36d v1.30.6 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/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
node1 Ready <none> 36d v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2 Ready <none> 4d19h v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
# 특정 Label만 필터링 하고 싶을 때
root@master:~/Getting-Start-Kubernetes/9# kubectl get nodes -L disk,gpu
NAME STATUS ROLES AGE VERSION DISK GPU
master Ready control-plane 36d v1.30.6
node1 Ready <none> 36d v1.30.6 ssd true
node2 Ready <none> 4d19h v1.30.6 true
*kubectl get nodes -L [Label의 Key] : node의 특정 label만 필터링 가능
예시 2
# nodeselector.yaml 파일 생성
root@master:~/Getting-Start-Kubernetes/9# vi nodeselector.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-nodeselector
spec:
nodeSelector:
gpu: "true"
disk: ssd
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
label이 gpu=true, disk, ssd인 node에 pod를 배포하려는 파일
* true 및 false 값은 반드시 묶어야한다. ex) "true", "false"
# 생성 및 확인
root@master:~/Getting-Start-Kubernetes/9# kubectl create -f nodeselector.yaml
pod/pod-nodeselector created
root@master:~/Getting-Start-Kubernetes/9# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready control-plane 36d v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kube rnetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
node1 Ready <none> 36d v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=lin ux
node2 Ready <none> 4d19h v1.30.6 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
root@master:~/Getting-Start-Kubernetes/9# kubectl get nodes -l gpu="true",disk=ssd
NAME STATUS ROLES AGE VERSION
node1 Ready <none> 36d v1.30.6
root@master:~/Getting-Start-Kubernetes/9# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
label-pod-demo 1/1 Running 0 54m 192.168.104.32 node2 <none> <none>
pod-demo 1/1 Running 0 54m 192.168.104.31 node2 <none> <none>
pod-nodeselector 1/1 Running 0 73s 192.168.166.175 node1 <none> <none>
gpu="true", disk=ssd 값을 가지는 node1에 pod가 배포된 것을 확인 가능하다.
참고 영상
https://www.youtube.com/watch?v=1UlMwsSN45Y&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c&index=31