본문 바로가기

Kubernetes

[Kubernetes] kubernetes node label

반응형

Node Label

 - Worker Node의 특성을 Label로 설정

  kubectl label nodes <노드이름> <레이블 키>=<레이블 값>

 - 노드를 선택해서 파드를 배치할 수 있다.

 

https://www.youtube.com/watch?v=1UlMwsSN45Y

Node Label 관리 명령어 실습

# kubectl get nodes
NAME                 STATUS   ROLES           AGE   VERSION
master.example.com   Ready    control-plane   23d   v1.25.4
node1.example.com    Ready    <none>          23d   v1.25.4
node2.example.com    Ready    <none>          23d   v1.25.4

# kubectl get nodes --show-labels 
NAME                 STATUS   ROLES           AGE   VERSION   LABELS
master.example.com   Ready    control-plane   23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
node1.example.com    Ready    <none>          23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.example.com,kubernetes.io/os=linux
node2.example.com    Ready    <none>          23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.example.com,kubernetes.io/os=linux

 

node1, node2에 label 추가

특정 label만 보기 위해서는 -L 옵션 추가 후 label 키 네임 입력으로 확인

# kubectl label nodes node1.example.com gpu=true disk=ssd
node/node1.example.com labeled

# kubectl label nodes node2.example.com gpu=true
node/node2.example.com labeled

# kubectl get nodes --show-labels
NAME                 STATUS   ROLES           AGE   VERSION   LABELS
master.example.com   Ready    control-plane   23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master.example.com,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
node1.example.com    Ready    <none>          23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1.example.com,kubernetes.io/os=linux
node2.example.com    Ready    <none>          23d   v1.25.4   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2.example.com,kubernetes.io/os=linux

# kubectl get nodes -L disk,gpu
NAME                 STATUS   ROLES           AGE   VERSION   DISK   GPU
master.example.com   Ready    control-plane   23d   v1.25.4          
node1.example.com    Ready    <none>          23d   v1.25.4   ssd    true
node2.example.com    Ready    <none>          23d   v1.25.4          true

 

gpu: "ture", disk: ssd 인 node에 pod를 실행한다는 yaml 

# cat 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

 

yaml 파일 실행 후 Label에 gpu: "ture", disk: ssd 설정이 되어있는 node1 에 실행되는지 확인 후 삭제

만약, node들 중에 gpu, ssd 가 없다면 STATUS는 Pending 상태가됨

# kubectl create -f nodeselector.yaml 
pod/pod-nodeselector created

# kubectl get pods -o wide
NAME               READY   STATUS    RESTARTS   AGE   IP          NODE                NOMINATED NODE   READINESS GATES
pod-nodeselector   1/1     Running   0          6s    10.36.0.2   node1.example.com   <none>           <none>

# kubectl delete pod pod-nodeselector 
pod "pod-nodeselector" deleted

 

 

[참고]

- https://www.youtube.com/watch?v=1UlMwsSN45Y

반응형