PV/PVC
용어
| 용어 | 설명 |
|---|
| PV (PersistentVolume) | 클러스터에 관리자가 미리 생성하거나 동적으로 생성된 실제 스토리지 볼륨 |
| PVC (PersistentVolumeClaim) | 개발자가 사용하는 스토리지 요청 객체. 용량/AccessMode 등 요구사항을 명시 |
| StorageClass | 동적 프로비저닝 시 어떤 스토리지를 사용할지 정의 (예: NFS, EBS, local 등) |
연동구조
┌─────────────────────┐
│ 물리 저장소 (예: │
│ NFS, AWS EBS, ...│
└─────────┬───────────┘
│
▼
┌────────────────────────┐
│ PV │
│ (PersistentVolume)│
└─────────┬──────────────┘
│ (Binding)
▼
┌─────────────────────────┐
│ PersistentVolumeClaim │
│ (PVC) │
└─────────┬──────────────┘
│
▼
┌──────────────────────┐
│ Pod │
│ ┌──────────────────┐ │
│ │ Container │ │
│ └──────────────────┘ │
└──────────────────────┘
PV 설정
persistentVolumeReclaimPolicy
| 정책 | 설명 |
|---|
Retain | PVC가 삭제돼도 PV는 유지됨 (데이터 보존) |
Recycle | PV가 삭제되면 기본적으로 rm -rf |
Delete | PVC 삭제 시 PV도 자동 삭제 (주로 동적 프로비저닝에 사용) |
Deployment
무중단 롤링 업데이트, 자동 복구, 버전 관리 등 지원
| 설정 | 설명 |
|---|
replicas | 실행할 Pod 개수 |
strategy.type | 업데이트 전략: RollingUpdate (기본) or Recreate |
maxUnavailable | 업데이트 중 동시에 내려도 되는 최대 Pod 수 (비율 or 개수)
|
maxSurge | 업데이트 중 동시에 추가되는 최대 Pod 수 (비율 or 개수) |
업데이트 동작
strategy.type에 따른 신규버전 적용 (RollingUpdate, ReCreate, Blue/Green)
RollingUpdate인 경우 maxUnavailable에 따른 기존 버전 제거, maxSurge에 따른 신규 버전 추가
Service
역할
Service는 클러스터 내부 또는 외부의 네트워크 요청을 올바른 Pod로 라우팅하는 네트워크 추상화입니다.
Pod들이 생성/삭제되더라도, 안정적인 접점(고정 IP/이름/포트)을 제공해주는 Load Balancer + DNS 역할이라고 보면 됩니다.
- kube-proxy에 트래픽을 처리할 pod 목록을 제공
| 역할 | 설명 |
|---|
| 고정 DNS/IP 제공 | Pod는 IP가 변경되므로, Service를 통해 안정적인 접속점 제공 |
| 로드 밸런싱 | 여러 Pod 인스턴스로 요청을 라운드로빈 분산 |
| 네트워크 프록시 | 클러스터 내부 또는 외부 요청을 알맞은 Pod로 전달 |
| 서비스 디스커버리 | service-name.namespace.svc.cluster.local 형식의 DNS 지원 |
주요 설정
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: ClusterIP | NodePort | LoadBalancer | ExternalName
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
type
| Type | 설명 |
|---|
ClusterIP (기본) | 클러스터 내부에서만 접근 가능 |
NodePort | 각 Node의 포트(30000~32767)를 통해 외부 접근 허용 |
LoadBalancer | 클라우드에서 외부 Load Balancer 생성 (AWS, GCP 등) |
ExternalName | 외부 도메인으로 요청을 전달 (CNAME처럼 사용) |
HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 70