반응형

레이블과 셀렉터

레이블은 Pod와 같은 오브젝트에 첨부된 키와 값의 쌍이다. 레이블은 오브젝트의 특성을 식별하는 데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없다. 레이블로 오브젝트의 하위 집합을 선택하고, 구성하는데 사용할 수 있다. 레이블은 오브젝트를 생성할 때에 붙이거나 생성 이후에 붙이거나 언제든지 수정이 가능하다. 오브젝트마다 키와 값으로 레이블을 정의할 수 있다. 오브젝트의 키는 고유한 값이어야 한다.

"metadata": {
  "labels": {
    "key1" : "value1",
    "key2" : "value2"
  }
}

레이블은 UI와 CLI에서 효율적인 쿼리를 사용하고 검색에 사용하기에 적합하다. 식별되지 않는 정보는 어노테이션으로 기록해야 한다.

 

사용 동기

레이블을 이용하면 사용자가 간단하게 결합한 방식으로 조직 구조와 시스템 오브젝트를 매핑할 수 있으며, 클라이언트에 매핑 정보를 저장할 필요가 없다.

 

레이블 셀렉터

이름과 UID와 다르게 레이블은 고유하지 않다. 일반적으로 우리는 많은 오브젝트에 같은 레이블을 사용한다.

레이블 셀렉터를 통해 클라이언트와 사용자는 오브젝트를 식별할 수 있다. 레이블 셀렉터는 쿠버네티스 코어 그룹의 기본이다.

API는 현재 일치성 기준 과 집합성 기준 이라는 두 종류의 셀렉터를 지원한다. 레이블 셀렉터는 쉼표로 구분된 다양한 요구사항 에 따라 만들 수 있다. 다양한 요구사항이 있는 경우 쉼표 기호가 AND(&&) 연산자로 구분되는 역할을 하도록 해야 한다.

비어있거나 지정되지 않은 셀렉터는 상황에 따라 달라진다. 셀렉터를 사용하는 API 유형은 유효성과 의미를 따로 정의하여 정리해야 한다.

참고: 레플리카셋(ReplicaSet)과 같은 일부 API 유형에서 두 인스턴스의 레이블 셀렉터는 네임스페이스 내에서 겹치지 않아야 한다. 그렇지 않으면 컨트롤러는 상충하는 명령으로 보고, 얼마나 많은 복제본이 필요한지 알 수 없다.
주의: 일치성 기준과 집합성 기준 조건 모두에 대해 논리적인 OR (||) 연산자가 없다. 필터 구문이 적절히 구성되어 있는지 확인해야 한다.

 

labels 확인 

master@master:~$ kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
jinsunginx    1/1     Running   0          9s
jinsu2nginx   1/1     Running   0          9s
master@master:~$ 

master@master:~$ kubectl get pod -L run
NAME          READY   STATUS    RESTARTS   AGE     RUN
jinsunginx    1/1     Running   0          2m58s   jinsunginx
jinsu2nginx   1/1     Running   0          2m58s   jinsu2nginx
master@master:~$ 

master@master:~$ kubectl get pod jinsunginx --show-labels
NAME         READY   STATUS    RESTARTS   AGE     LABELS
jinsunginx   1/1     Running   0          3m21s   run=jinsunginx
master@master:~$

 

 

labels 추가 및 확인

# color를 red로 labels 설정
master@master:~$ cat jinsu2nginx.yaml 
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: jinsu2nginx
    color: red 
  name: jinsu2nginx
spec:
  containers:
  - name: nginx
    image: nginx
master@master:~$

# labels 확인
master@master:~$ kubectl get pod jinsu2nginx --show-labels
NAME          READY   STATUS    RESTARTS   AGE   LABELS
jinsu2nginx   1/1     Running   0          27s   color=red,run=jinsu2nginx
master@master:~$

 

 

Pod edit으로 labels 수정

# kubectl edit pod로 color 오렌지색으로 labels 수정
master@master:~$ kubectl edit pod jinsunginx
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"labels":{"run":"jinsunginx"},"name":"jinsunginx","names
  creationTimestamp: "2022-08-07T07:08:05Z"
  labels:
    color: orange
    run: jinsunginx
  name: jinsunginx
  namespace: default
  resourceVersion: "7343"
  selfLink: /api/v1/namespaces/default/pods/jinsunginx
  uid: 22d83e8b-4d1e-4072-a09c-b19eabc47a95"
...

  
# color labels 수정 확인
master@master:~$ kubectl get pod jinsunginx --show-labels
NAME         READY   STATUS    RESTARTS   AGE   LABELS
jinsunginx   1/1     Running   0          12m   color=orange,run=jinsunginx
master@master:~$

 

 

labels 필터링으로 찾기

aster@master:~$ kubectl get pod -l run
NAME          READY   STATUS    RESTARTS   AGE
jinsu2nginx   1/1     Running   0          7m15s
jinsunginx    1/1     Running   0          14m
master@master:~$

master@master:~$ kubectl get pod -l run=jinsunginx
NAME         READY   STATUS    RESTARTS   AGE
jinsunginx   1/1     Running   0          15m
master@master:~$

 

 

node selector 이용하여 disktype 구분

master@master:~$ kubectl label node master disktype=ssd
# node/master labeld
master@master:~$ 

master@master:~$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: jinsunginx
  name: jinsunginx
spec:
  containers: 
  - name: jinsunginx
    image: nginx
  nodeSelector:
    disktype: ssd
EOF
master@master:~$

 

 

 

 

 

참고자료

https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/labels/

반응형

+ Recent posts