반응형

레이블과 셀렉터

레이블은 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