-
[따배쿠] Node Labelkubernetes 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
'kubernetes' 카테고리의 다른 글
[따배쿠] Label을 이용한 Canary Deployment (0) 2024.12.10 [따배쿠] Annotation (0) 2024.12.10 [따배쿠] Label (0) 2024.12.10 [따배쿠] Ingress - 웹페이지 구현 (0) 2024.12.09 [따배쿠] Ingress - 개념 및 설치 (0) 2024.12.09 - Worker Node의 특성을 Label로 설정