레이블과 셀렉터
레이블은 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/
'Kubernetes' 카테고리의 다른 글
[K8S] 쿠버네티스 - Pod에 정보 전달하기 (0) | 2022.08.07 |
---|---|
[K8S] 쿠버네티스 - 볼륨(volume) (0) | 2022.08.07 |
[K8S] 쿠버네티스 - YAML 파일로 Pod 생성 (0) | 2022.08.07 |
[K8S] 쿠버네티스 - k3s 구성 (0) | 2022.08.07 |
[K8S] 쿠버네티스 - k3s 명령어 (0) | 2022.08.07 |