728x90
■ 쿠버네티스(Kubernetes) Label & Annotation 개요
- Label
- 파드와 같은 오브젝트에 첨부된 키와 값의 쌍
- 오브젝트의 특성을 식별하는 데 사용되어 사용자에게 중요하지만, 코어 시스템에 직접적인 의미는 없음.
- 오브젝트를 생성할 때에 붙이거나 생성 이후에 붙이거나 언제든지 수정이 가능하다. 오브젝트마다 키와 값으로 레이블을 정의할 수 있으며 오브젝트에 붙이는 키 값은 고유한 값이어야 한다.
- 레이블은 UI와 CLI에서 효율적인 쿼리를 사용하고 검색에 사용하기에 적합하며, 식별되지 않는 정보는 어노테이션으로 기록 한다.
- Annotation
- 어노테이션도 레이블과 같이 키와 값의 쌍의 정보를 사용함.
- 레이블을 사용하여 오브젝트를 선택하고, 특정 조건을 만족하는 오브젝트 컬렉션을 찾을 수 있다. 반면에, 어노테이션은 오브젝트를 식별하고 선택하는데 사용되지 않는다.
- 어노테이션의 메타데이터는 작거나 크고, 구조적이거나 구조적이지 않을 수 있으며, 레이블에서 허용되지 않는 문자를 포함할 수 있다.
- 어노테이션을 활용하면 임의의 비-식별 메타데이터를 오브젝트에 첨부할 수 있음.
■ 쿠버네티스(Kubernetes) Label & Annotation 문법
- 문법 구성은 키와 값의 쌍으로 이루어 지며, 키를 구성하는 값은 접두사와 이름으로 구성할 수 있다. 키를 구성할 때 이름은 필수이다. 접두사를 포함하여 사용할 경우 슬래시(/)로 구분한다.
- 이름 세그먼트는 영문 숫자([a-z0-9A-Z])로 시작하고 끝나는 63자 이하이어야 하고, 사이에 대시(-), 밑줄(_), 점(.)이 들어갈 수 있다.
- 접두사는 DNS 서브도메인이어야 한다. 점(.)으로 구분된 일련의 DNS 레이블은 총 253자를 넘지 않고, 뒤에 슬래시(/)가 붙는다. kubernetes.io/와 k8s.io/ 접두사는 쿠버네티스 핵심 구성 요소를 위해 예약되어 있다.
- 접두사가 생략된 키는 일반적으로 사용자 정의 항목으로 간주되며, 쿠버네티스 시스템이나 다른 사용자에게 공개되지 않고 특정 애플리케이션 또는 팀 내에서만 사용 가능하다.
# Label & Annotations
apiVersion: v1
kind: Pod
metadata:
name: label-annotation-demo
labels:
environment: production
app: nginx
annotations:
imageregistry: "https://hub.docker.com/"
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
■ 쿠버네티스(Kubernetes) Label Selector
- Label Selector를 통해 클라이언트와 사용자는 오브젝트 식별이 가능함
- Label Selector는 쿠버네티스 코어 그룹의 기본이며 "일치성 기준"과 "집합성 기준" 이라는 두 종류의 셀렉터를 지원함. 그리고 두 종류 모두 OR(||) 연산자를 지원하지 않음
- 일치성 기준
- =,==,!= 3가지 연산자를 지원함. =, == 일치성(동의어)를 !=는 불일치를 의미함
-
environment = production tier != frontend
- environment 키를 가지는 것과 production 이라는 값을 가지는 모든 리소스를 선택하고, tier 키를 가지는 것 중에 frontend라는 값을 제외한 모든 리소스를 선택하는 구문. != 연산자는 공백을 포함한다.
- 레이블 셀럭터는 Pod를 검색하는 필터 목적으로도 사용되지만 노드를 선택하는 기준으로 지정하는 목적으로도 사용할 수 있다.
-
해당 샘플은 Pod가 노드를 선택하는 기준을 지정하는 예제이며, Pod는 accelerator: nvidia-tesla-p100 라는 레이블을 가진 노드를 선택하게 된다.apiVersion: v1 kind: Pod metadata: name: cuda-test spec: containers: - name: cuda-test image: "registry.k8s.io/cuda-vector-add:v0.1" resources: limits: nvidia.com/gpu: 1 nodeSelector: accelerator: nvidia-tesla-p100
- 집합성 기준
- 값 집합을 키로 필터링을 수행 할 수 있다. in, notin, exists 3개의 연산자를 지원하며 키 식별자만 해당 한다.
-
environment in (production, qa) tier notin (frontend, backend) partition !partition
- 첫 번째 예시에서 키가 environment이고 값이 production 또는 qa인 모든 리소스를 선택한다.
- 두 번째 예시에서 키가 tier이고 값이 frontend와 backend를 가지는 리소스를 제외한 모든 리소스와 키로 tier를 가지고 값을 공백으로 가지는 모든 리소스를 선택한다.
- 세 번째 예시에서 레이블의 값에 상관없이 키가 partition을 포함하는 모든 리소스를 선택한다.
- 네 번째 예시에서 레이블의 값에 상관없이 키가 partition을 포함하지 않는 모든 리소스를 선택한다.
- 일치성 기준
728x90
'K8S' 카테고리의 다른 글
쿠버네티스(Kubernetes) Pod Quality of Service (QoS) (0) | 2024.08.23 |
---|---|
쿠버네티스(Kubernetes) NameSpace (0) | 2024.08.20 |
쿠버네티스(Kubernetes) Pod 설계 디자인 (0) | 2024.08.02 |
쿠버네티스(Kubernetes) Pod 생성과 관리 (0) | 2024.07.28 |
쿠버네티스(Kubernetes) Node Internal IP 변경 (0) | 2024.07.21 |