ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [따배쿠] Node Label
    kubernetes 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
Designed by Tistory.