Kubernetes

[k8s] Lables&Selectors 개념

코딩 못하는 감자 2025. 2. 5. 14:09

📌 1. Labels & Selectors 개념

✔️ Labels (레이블)

  • Kubernetes 객체(Objects) 에 추가하는 키-값(Key-Value) 형식의 메타데이터.
  • 객체를 특정 기준으로 그룹화할 때 사용.
  • 예시: app=web, env=production, tier=frontend 등.

✔️ Selectors (셀렉터)

  • 특정 레이블이 붙은 객체를 필터링하여 선택하는 기능.
  • kubectl get 명령어에서 l 옵션을 사용하여 특정 레이블을 가진 객체만 조회 가능.

✔️ 필요성

  • 쿠버네티스 클러스터 내에는 많은 리소스들이 존재한다. (Pod, ReplicaSet, Service)
  • 이 Pod들을 관리하기 위해서는 필터링이 필요한데, 이를 구현해주는 것이 Labels 와 Selectors이다.
  • Labels를 통해 Pod를 여러 종류들로 나눌 수 있고 Selectors를 통해 지정할 Pod들을 선택할 수 있다.

kubectl를 통해 pod 필터링 하여 가져오기

kubectl get pods --selector app=App1

상단 명령어와 같이 입력하면 app=App1 label이 등록되어 있는 Pod들만 분류하여 조회할 수 있다.

📌 2. Labels & Selectors의 활용

✔️ ReplicaSet과 Labels

  • ReplicaSet이 특정 Pod를 관리하려면 Pod에 설정된 Labels과 Selectors를 일치시켜야 함.
  • 주의! ReplicaSet과 Pod의 Labels 위치:
    • Pod 템플릿 내부의 Labels → Pod에 적용.
    • ReplicaSet 자체의 Labels → ReplicaSet 자체의 정보.

📌 예제: ReplicaSet과 Label Matching

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
  labels:
    app: web  # ReplicaSet 자체의 Label
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web  # 이 Selector가 Pod의 Labels과 일치해야 함
  template:
    metadata:
      labels:
        app: web  # Pod에 적용될 Label
    spec:
      containers:
        - name: nginx-container
          image: nginx
  • ReplicaSet은 app=web 레이블이 붙은 Pod만 관리.

📌 예제: 특정 ReplicaSet의 Pod만 조회

kubectl get pods -l app=web

📌 3. Annotations (어노테이션)

  • 레이블과 다르게 객체를 그룹화하는 목적이 아닌, 추가적인 메타데이터 저장 용도.
  • 시스템 정보, 빌드 정보, 연락처 정보 등을 저장 가능.
  • Kubernetes 내부에서 자동 생성된 메타데이터 저장 시에도 사용.

📌 예제: Pod에 Annotation 추가

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  annotations:
    description: "This is a web server"
    owner: "admin@example.com"
spec:
  containers:
    - name: nginx-container
      image: nginx
  • description, owner 등의 정보를 Annotation으로 저장.

📌 Annotation 조회

kubectl describe pod my-pod
  • Pod의 Annotation을 포함한 상세 정보 확인 가능.

labels에 해당하는 리소스 개수 구하기

kubectl get all -l env=dev --no-headers | wc -l