Kubernetes · 2 min read · Dec 08, 2025

Kubernetes의 레이블과 셀렉터

레이블은 Pods, Service 등과 같은 Kubernetes 객체에 할당된 키-값 쌍입니다. 레이블은 Kubernetes 객체를 조직하고 선택하는 데 사용될 수 있습니다. 레이블은 객체 생성 시 첨부할 수 있으며 언제든지 수정할 수 있습니다. 우리는 Kubernetes 객체에 여러 개의 레이블을 추가할 수 있습니다.

셀렉터는 사용자가 객체 집합을 선택하는 데 사용됩니다. 레이블 셀렉터는 Kubernetes의 핵심 그룹화 기본 요소입니다. Kubernetes API는 두 가지 유형의 셀렉터를 지원합니다.

  1. 동등성 기반 셀렉터:
    이는 키와 값으로 필터링을 허용하며, 일치하는 객체는 지정된 모든 레이블을 만족해야 합니다.
  2. 집합 기반 셀렉터:
    이는 값 집합에 따라 키를 필터링할 수 있게 해줍니다.

레이블과 셀렉터에 대해 더 알고 싶다면 여기 클릭하세요.

이 기사에서는 레이블이 있는 Pod를 생성하고 셀렉터를 사용하여 서비스에서 해당 Pod로 요청을 리디렉션합니다. 또한 명령줄에서 레이블/셀렉터를 사용하여 Pod와 Service에 대한 가져오기 및 삭제 작업을 수행합니다.

전제 조건

  1. 최소 1개의 워커 노드가 있는 Kubernetes 클러스터.
    Kubernetes 클러스터를 만드는 방법을 배우고 싶다면 여기 클릭하세요. 이 가이드는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드를 가진 Kubernetes 클러스터를 만드는 데 도움이 될 것입니다.

우리가 할 일

  1. 레이블과 셀렉터가 있는 Pod 및 Service 생성
  2. 레이블 이해하기

레이블과 셀렉터가 있는 Pod 및 Service 생성

레이블이 있는 Pod를 생성하려면 새 파일을 만들고 다음 내용을 추가합니다.

vim my-lable-demo-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: label-demo-pod
  labels:
    environment: test
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

label-demo-pod

셀렉터가 있는 서비스를 생성하려면 기본 네임스페이스를 사용하는 다음 서비스 정의로 파일을 만듭니다.

vim my-selector-demo-service.yml
apiVersion: v1
kind: Service
metadata:
  name: selector-demo-service
  namespace: default
  labels:  
    environment: test
    app: nginx
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:    
    app: nginx
  type: NodePort

selector-demo-service

Pod를 생성하려면 다음 명령을 실행합니다.

kubectl create -f my-lable-demo-pod.yml
kubectl get pods

create-pod-with-label

서비스를 생성하려면 다음 명령을 실행합니다.

kubectl create -f my-selector-demo-service.yml
kubectl get service

create-service-with-selector

이제 레이블 셀렉터가 작동하는지 확인하려면 NodeIP:NodePort에서 서비스를 액세스해 보세요.

여기서 내 노드의 IP는 106.210.138.189이고 서비스는 Port=30385에서 노출됩니다.

우리가 생성한 서비스를 사용하여 Nginx Pod에 액세스할 수 있으므로 레이블과 셀렉터가 작동했음을 의미합니다.

레이블 이해하기

이제 레이블을 사용하여 생성한 Pod와 Service에서 다양한 작업을 수행할 수 있습니다.

우리가 원하는 레이블과 일치하는 Pod를 가져오려면 명령에서 “–selector”를 사용할 수 있습니다.

kubectl get pods --selector environment=test
kubectl get pods --selector app=nginx

get-pods-with-matching-labels

우리는 또한 원하는 레이블과 일치하는 Pod를 가져오기 위해 “-l”을 사용할 수 있습니다.

kubectl get pods -l environment=test
kubectl get pods -l environment=prod

alternative-to-selector-command

우리는 레이블을 지정하여 Pod 삭제 작업을 수행할 수도 있습니다. 레이블과 일치하는 Pod는 다음 명령을 사용하여 삭제할 수 있습니다.

kubectl get pods
kubectl delete pods -l environment=test
kubectl get pods

delete-pods-with-matching-label

우리가 레이블과 일치하는 Pod를 삭제할 수 있었던 것처럼, 서비스도 삭제할 수 있습니다.

레이블과 일치하는 서비스를 삭제하려면 다음 명령을 사용하세요. 또한, 명령에서 지정된 레이블과 일치하는 서비스가 없으면 삭제 작업이 수행되지 않습니다.

kubectl get service
kubectl delete service -l environemt=test
kubectl delete service -l environment=test
kubectl get service

delete-service-with-matching-label

결론

이 기사에서는 레이블이 있는 Pod를 생성하고 해당 레이블과 일치하는 Pod로 서비스를 생성하고 포인팅했습니다. 또한 레이블과 일치하는 Pod와 서비스가 삭제되는 방법을 보았습니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.