우노
[K8S] labels, selector, match_labels의 차이 본문
들어가기 앞서,
- Kubernetes의 Service는 특정 Pod에 네트워크 트래픽을 라우팅하는 역할을 합니다.
- Service는 라벨 셀렉터(spec.selector)를 통해,
- 해당 라벨과 동일한 라벨(spec.template.metadata.labels)을 가지고 있는 Pod에게 네트워크 트래픽을 라우팅하게 됩니다.
- 하지만, 라우팅 설정에 사용되는 라벨 관련 필드는 다양하기 때문에 헷갈릴 수 있습니다.
- service
- spec.selector (Service가 어떤 Pod에 라우팅할지 정하기 위한 라벨 셀렉터)
- deployment
- metadata.labels (Deployment에 할당되는 라벨)
- spec.selector.match_labels (Deployment가 어떤 Pod를 관리할지 정하기 위한 라벨 셀렉터)
- spec.template.metadata.labels (Pod에 할당되는 라벨)
- service
- 따라서, 해당 포스팅에선 Service, Deployment 생성 예제를 통해 labels, selector, match_labels의 차이에 대해서 이해해보겠습니다.
- 자원 생성 예제는 Terraform을 기반으로 설명하겠습니다.
Service 생성 코드
resource "kubernetes_service" "nginx" {
metadata {
name = "nginx-service"
}
spec {
# Service가 어떤 Pod에 라우팅할지 정하기 위한 라벨 셀렉터
selector = {
app = "nginx"
}
port {
port = 80 # 서비스로 라우팅할 포트
target_port = 80 # 선택한 Pod의 어떤 포트로 트래픽을 전달할지 설정
}
}
}
Deployment 생성 코드
resource "kubernetes_deployment" "nginx" {
metadata {
name = "nginx-deployment"
labels = {
app = "nginx" # Deployment에 할당되는 라벨
}
}
spec {
replicas = 2
# Deployment가 어떤 Pod를 관리할지 정하기 위한 라벨 셀렉터
selector {
match_labels = {
app = "nginx"
}
}
template {
metadata {
labels = {
app = "nginx" # Pod에 할당되는 라벨
}
}
spec {
container {
image = "nginx:latest"
name = "nginx"
port {
container_port = 80
}
}
}
}
}
}
요약
- Service, Pod 라우팅을 위해선 Service의 spec.selector와 Deployment의 spec.template.metadata.labels가 일치해야합니다!
- 또한, Deployment가 Pod를 관리하기 위해선 Deployment의 spec.selector.match_labels와 spec.template.metadata.labels가 일치해야합니다!
- 즉, 아래 3가지 구성요소가 모두 일치해야합니다.
- Service
- spec.selector (Service가 어떤 Pod에 라우팅할지 정하기 위한 라벨 셀렉터)
- Deployment
- spec.selector.match_labels (Deployment가 어떤 Pod를 관리할지 정하기 위한 라벨 셀렉터)
- spec.template.metadata.labels (Pod에 할당되는 라벨)
- Service
'DevOps > Kubernetes' 카테고리의 다른 글
[K8S] ExternalName이란? (0) | 2023.11.01 |
---|---|
[K8S] Node, Pod, Container 리소스 사용량 확인 방법 (0) | 2023.10.20 |
[K8S] kubectl set image 명령어 (0) | 2023.09.20 |
[K8S] kubectl config context 명령어 정리 (0) | 2023.08.17 |
[K8S] kubectl secret 명령어 (0) | 2023.06.10 |
Comments