Labels & Selectors
Labels
각 항목에 붙은 속성
Selectors
항목을 필터링하는 데 사용한다.
레이블과 셀렉터는 항목을 그룹화하는 표준 방법이다.
유튜브 동영상이나 블로그 포스트에 붙인 태그처럼 클래스, 유형, 그룹 등의 기준으로 레이블을 붙이면 기준에 따라 필터링할 수 있다.
쿠버네티스에는 수많은 개체가 있을 수 있기 때문에 유형, 애플리케이션, 기능 등의 다양한 범주를 기준으로 필터링하여 볼 수 있는 방법이 필요하다.
레이블 지정 방법
일반적으로 정의 파일에 지정할 수 있다.
apiVersion: v1
kind: Pod
metadata:
name: simple-webapp
labels:
app: App1
function: Front-end
spec:
containers:
- name: simple-webapp
image: simple-webapp
ports:
- containerPort: 8080
metadata 아래에 labels 항목을 추가하여 키-값 형식으로 레이블을 지정한다. 레이블은 원하는 만큼 자유롭게, 개수 제한 없이 추가할 수 있다.
셀렉터를 이용한 개체 확인
--selector 옵션으로 필터링할 레이블의 키와 값을 지정하여 검색할 수 있다
kubectl get pods --selector <KEY>=<VALUE>
# 예시
kubectl get pods --selector app=App1
개체 연결
포드에 레이블을 지정하고, replicaset의 셀렉터를 포드의 레이블과 일치하도록 구성하면 포드를 그룹화할 수 있다.
레이블은 하나만 일치하면 되지만, 레이블이 같으나 기능이 다른 포드가 있는 경우, 좀 더 명확하게 그룹화할 수 있도록 다수의 레이블을 매칭 시킬 수도 있다.
kind: ReplicaSet
metadata:
name: simple-webapp
labels: # replicaset labels
app: App1
function: Front-end
spec:
replicas: 3
selector:
matchLabels:
app: App1
template:
metadata:
labels: # pod labels
app: App1
function: Front-end
spec:
containers:
- name: simple-webapp
image: simple-webapp
레이블이 정상적으로 설정되면 replicaset이 정상적으로 생성된다.
replicaset의 레이블은 다른 개체가 이 replicaset을 선택하도록 구성하는데 사용한다.
다른 개체인 서비스도 비슷한 방식으로 포드를 연결할 수 있다.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: App1
ports:
- protocol: TCP
port: 80
targetPort: 9376
Annotations
정보 제공 목적으로 세부 정보를 기록하는데 사용한다.
예시 ) 이름, 버전, 빌드 정보, 연락처, 전화번호, 이메일, ID 등
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: simple-webapp
labels:
app: App1
function: Front-end
annotations:
buildversion: 1.34
spec:
replicas: 3
selector:
matchLabels:
app: App1
template:
metadata:
labels:
app: App1
function: Front-end
spec:
containers:
- name: simple-webapp
image: simple-webapp