Fairy ' s
[K8s] Labels & Selectors 본문
우리는 Pod, Service, ReplicaSet, Deployment 등 다양한 유형의 서로 다른 오브젝트를 만들었다. 시간이 지나면 이런 오브젝트가 수없이 많아질 수 있는데, 그렇기 때문에 유형별로 오브젝트를 그룹화하거나, 기능별로 개체를 보는 것과 같이 다양한 범주별로 개체를 필터링하고 볼 수 있는 방법이 필요하다. 이럴 때 label과 selector를 사용하면 오브젝트를 애플리케이션이나 기능에 따라 레이블을 부착하여 그룹화하고 선택할 수 있다. 선택하는 동안 특정 오브젝트를 필터링할 조건을 지정할 수 있다. (ex. app=App1)
Labels
# pod-definition.yaml
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
Select
파드가 생성된 후, 레이블이 있는 파드를 선택하려면 selector 옵션과 함께 kubectl get pods 명령을 사용하고 조건을 지정한다. 쿠버네티스 오브젝트는 내부적으로 레이블과 selector를 사용해 서로 다른 오브젝트를 함께 연결한다.
$ kubectl get pods --selector app=App1
ReplicaSet
3개의 서로 다른 파드로 구성된 ReplicaSet을 생성하기 위해서는 먼저 파드 정의에 레이블을 지정하고 ReplicaSet에서 selector를 사용해 파드를 그룹화한다.
apiVersion: apps/v1
kine: ReplicaSet
metadata:
name: simple-webapp
labels:
app: App1
function: Front-end
spec:
replicas: 3
selector:
matchLabels:
app: App1
template:
metadata:
labels:
app: App1
function: Front-end
spec:
containers:
- name: simple-webapp
image: simple-webapp
위 ReplicaSet Definition file에서 정의된 두 레이블을 볼 수 있는데, 상단에 표시되는 레이블은 ReplicaSet 자체의 레이블이며, template 섹션 아래 정의된 레이블은 파드에 구성된 레이블이다. ReplicaSet이 파드를 검색하고 있기 때문에 현재 상황에서는 ReplicaSet의 레이블에 대해 신경쓰지 않아도 되지만, ReplicaSet의 레이블은 ReplicaSet을 검색하는 다른 오브젝트를 구성하는 경우에 사용된다.
ReplicaSet을 파드에 연결하기 위해서는 파드에 정의된 레이블에 일치하도록 ReplicaSet의 spec 아래 selector 필드를 구성한다. 단일 label로 매칭된다면 하나만 사용해도 되지만, label은 같지만 기능이 다른 파드가 있다면, 두 레이블을 모두 지정해 ReplicaSet에서 원하는 부분을 검색하도록 할 수 있다. ReplicaSet 생성 시 레이블이 일치하면 ReplicaSet이 성공적으로 생성된다.
Service
서비스가 생성되면 서비스 definition 파일에 정의된 selector를 사용해 ReplicaSet definition 파일의 파드에 설정된 레이블을 일치시킨다.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: App1
ports:
- protocol: TCP
port: 80
targetPort: 9376
Annotations (주석)
label와 selector는 오브젝트를 그룹화하고 선택하는 데 사용되는 반면, 주석을 정보 제공 목적으로 기타 세부 정보를 기록하는 데 사용된다. 예를 들어 이름, 버전, 빌드 정보 등과 같은 도구 세부 정보 또는 연락처 세부 정보, 전화 번호, 이메일 ID 등을 기록한다.
apiVersion: apps/v1
kine: 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
'Study > K8s' 카테고리의 다른 글
[K8s] Node Selectors & Affinity (0) | 2023.08.23 |
---|---|
[K8s] Taints and Tolerations (0) | 2023.08.17 |
[K8s] Scheduling (0) | 2023.08.10 |
[K8s] kubectl apply command (0) | 2023.08.09 |
[K8s] Imperative vs Declarative (0) | 2023.08.08 |