1️⃣ 시작하며: 왜 리소스 관리가 중요한가요?
Kubernetes 환경에서는 수많은 리소스가 서로 얽혀 작동합니다.
이 리소스들을 구분하고 정리하고 관리할 수 없다면, 운영은 점점 복잡해집니다.
이번 장에서는 다음과 같은 내용을 배웁니다:
🎯 학습 목표
- ✅ 레이블과 어노테이션의 차이와 역할
- ✅
commonLabels
,commonAnnotations
활용법 - ✅ 네임스페이스를 이용한 리소스 분리
- ✅ 패치로 리소스 설정 일부 수정하는 방법
🏷️ 2. 공통 레이블과 어노테이션: 리소스에 이름표 달기
2.1 레이블 vs 어노테이션
구분 | 레이블(Label) | 어노테이션(Annotation) |
---|---|---|
목적 | 리소스 검색, 분류, 선택 | 리소스에 부가 정보 저장 |
사용 대상 | kubectl get 등에서 사용 | 운영 도구, 사용자의 설명 |
예시 | app=my-app | managed-by=kustomize |
📚 비유로 이해하기
- 레이블: 책장에 붙여진 분류 스티커
- 어노테이션: 책 안쪽에 적힌 개인 메모
2.2 Kustomize에서 공통 레이블/어노테이션 설정하기
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
app: my-app
environment: dev
commonAnnotations:
managed-by: kustomize
version: "1.0"
resources:
- deployment.yaml
- service.yaml
📌 위 설정을 적용하면 deployment.yaml
, service.yaml
에 공통 레이블과 어노테이션이 자동으로 붙습니다.
2.3 리소스 검색도 레이블로 간편하게!
kubectl get all -l app=my-app
레이블은 리소스를 논리적으로 그룹화하고, 필요한 리소스만 쏙쏙 골라볼 수 있게 해줍니다!
🗂️ 3. 네임스페이스: 리소스 정리 정돈하기
3.1 네임스페이스란?
- Kubernetes 클러스터 내 논리적 공간 구분 도구
- 마치 회사의 부서처럼, 팀/환경 별로 리소스를 격리해서 관리할 수 있어요.
📚 비유로 이해하기
한 클러스터 안에 있는 여러 개의 책장
→ dev용 책장, prod용 책장, test용 책장
3.2 Kustomize에서 네임스페이스 설정
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
resources:
- deployment.yaml
- service.yaml
⛳ 위 설정으로 배포되는 모든 리소스는 my-namespace
에 들어가게 됩니다.
3.3 특정 네임스페이스의 리소스 확인
kubectl get all -n my-namespace
🛠️ 4. 리소스 변형의 기초: 필드만 살짝 수정하기
Kustomize는 전체 리소스를 복사하지 않고 필드만 골라서 수정할 수 있는 기능을 제공합니다.
4.1 patchesStrategicMerge 사용
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
patchesStrategicMerge:
- patch-replica.yaml
resources:
- deployment.yaml
- service.yaml
4.2 patch-replica.yaml 예시
# patch-replica.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 5
🎯 위 설정은 my-app
Deployment의 리플리카 수를 5개로 변경합니다.
⚠️ 주의: 필드 구조를 정확히 이해하고 작성해야 합니다!
틀린 경로나 구조는 패치가 적용되지 않거나 오류를 유발할 수 있어요.
🧪 5. 예제 통합: 실전에서 모두 적용해 보기
🧾 예제 파일 구성
deployment.yaml
service.yaml
patch-replica.yaml
kustomization.yaml
📄 kustomization.yaml 예시
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: my-namespace
commonLabels:
app: my-app
environment: dev
commonAnnotations:
managed-by: kustomize
version: "1.0"
patchesStrategicMerge:
- patch-replica.yaml
resources:
- deployment.yaml
- service.yaml
🚀 적용 방법
kubectl apply -k .
이 명령으로:
- 네임스페이스:
my-namespace
- 레이블:
app: my-app
,environment: dev
- 어노테이션:
managed-by
,version
- 리플리카 수: 5
가 적용된 리소스가 배포됩니다.
🧠 마무리하며: 리소스 관리의 전문가 되기!
Kustomize는 단순한 템플릿 도구가 아닙니다.
공통 정보의 중앙 관리, 리소스 분리와 필드 단위 변경,
이 모든 것이 여러분의 클러스터 운영을 훨씬 더 쉽게 만들어줍니다