[클라우드/쿠버네티스] 라벨, 노드셀렉터

    728x90
    반응형

    라벨

    1) 키-값 쌍의 형태로 리소스에 추가하는 메타데이터

    2) 다양한 리소스를 관리, 필터링, 선택할 수 있음

    3) 리소스를 식별하고 그룹화하는 데 사용함

    4) pod, node에 부여 가능함

     

     

    Label value조회

    특정 key의 value를 조회

    #kubectl get po -L key 
    [root@]$ kubectl get po -L run

    NAME        READY   STATUS    RESTARTS   AGE   RUN
    applyfyml   1/1     Running   1          6d    applyfyml
    #kubectl get po pod명 -oyaml
    [root@]$ kubectl get po applyfyml -oyaml

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"run":"applyfyml"},"name":"applyfyml","namespace":"default"},"spec":{"containers":[{"image":"nginx","name":"nginx"}]}}
      creationTimestamp: "2024-08-14T06:30:01Z"
      labels:
        run: applyfyml # label에 등록된 key: value
      name: applyfyml
      namespace: default
      resourceVersion: "18940"
    ...

     

     

    Label 전체 조회

    Pod별 등록된 label의 key=value를 조회

    #kubectl get po --show-lables
    [root@]$ kubectl get po --show-labels

    NAME        READY   STATUS    RESTARTS   AGE   LABELS
    applyfyml   1/1     Running   1          6d    run=applyfyml

     

     

    pod 필터링

    key 또는 key,value를 사용해 특정 pod를 조회

    #yaml파일 출력
    #kubectl get pod pod명 -oyaml

    [root@]$ kubectl get pod applyfyml -oyaml

    apiVersion: v1
    kind: Pod
    metadata:
      annotations:
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"run":"applyfyml"},"name":"applyfyml","namespace":"default"},"spec":{"containers":[{"image":"nginx","name":"nginx"}]}}
      creationTimestamp: "2024-08-14T06:30:01Z"
      labels: #등록된 라벨
        author: taejoolim
        blog: tistory
        run: applyfyml
      name: applyfyml
      namespace: default
      resourceVersion: "20103"
      selfLink: /api/v1/namespaces/default/pods/applyfyml
      uid: d082ff3a-59e4-42cd-b7e1-f75f5b0db93c

    #label에 필터링 조건(key)이 있는 pod만 조회
    #kubectl get po -l key

    [root@]$ kubectl get po -l author

    NAME        READY   STATUS    RESTARTS   AGE
    applyfyml   1/1     Running   1          6d

    #label에 필터링 조건(key=value)이 있는 pod만 조회
    #kubectl get po -l key=value

    [root@]$ kubectl get po -l blog=tistory

    NAME        READY   STATUS    RESTARTS   AGE
    applyfyml   1/1     Running   1          6d



    [root@]$ kubectl get po -l blog=naver

    error: name cannot be provided when a selector is specified

     

     

    노드셀렉터

    1) pod가 특정 노드에서만 실행되도록 제어하는 기능을 제공함

    2) pod가 적절한 노드에서 실행되도록 보장할 수 있음

    3) 특정 하드웨어나 소프트웨어 요구 사항을 충족시킬 수 있음

    4) 더욱 상세한 제어가 필요하다면 nodeAffinity를 사용해야 함

     

     

    노드 라벨 부여

    #라벨 부여
    #kubectl label nodes 노드명 key=value

    [root@]$ kubectl label nodes master disktype=ssd

    node/master labeled
    #yaml파일 출력
    #kubectl get node node명 -oyaml

    [root@]$ kubectl get node master -oyaml

    apiVersion: v1
    items:
    - apiVersion: v1
      kind: Node
      metadata:
        annotations:
          flannel.alpha.coreos.com/backend-type: vxlan
          flannel.alpha.coreos.com/kube-subnet-manager: "true"
        creationTimestamp: "2024-08-12T05:46:04Z"
        finalizers:
        - wrangler.cattle.io/node
        labels:
          beta.kubernetes.io/arch: amd64
          beta.kubernetes.io/instance-type: k3s
          beta.kubernetes.io/os: linux
          disktype: ssd # 부여된 라벨 확인
          weather: tooHot
        name: master
    ...

     

     

    노드셀렉터를 사용한 pod 실행

    라벨이 부여된 노드에서만 pod를 실행하도록 설정할 수 있음

    #nodeSelector 추가
    [root@]$ vi applyfyml.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        run: applyfyml
      name: applyfyml
    spec:
      containers:
      - name: nginx
        image: nginx
      nodeSelector: #nodeSelector 추가
        disktype: ssd #노드의 라벨이 disktype: ssd인 노드에 pod를 실행


    #pod 생성
    [root@]$ kubectl apply -f applyfyml.yaml

    pod/applyfyml created

     

     

     

    728x90
    반응형

    댓글