Application 기능으로 이해하기 - PV/PVC, Deployment, Service, HPA

Moongchi·2025년 6월 3일
0

kubernetes

목록 보기
8/14

PV/PVC

용어

용어설명
PV (PersistentVolume)클러스터에 관리자가 미리 생성하거나 동적으로 생성된 실제 스토리지 볼륨
PVC (PersistentVolumeClaim)개발자가 사용하는 스토리지 요청 객체. 용량/AccessMode 등 요구사항을 명시
StorageClass동적 프로비저닝 시 어떤 스토리지를 사용할지 정의 (예: NFS, EBS, local 등)

연동구조

┌─────────────────────┐
│  물리 저장소 (예:   │
│  NFS, AWS EBS, ...│
└─────────┬───────────┘
         │
         ▼
┌────────────────────────┐
│    PV                │
│    (PersistentVolume)│
└─────────┬──────────────┘
         │ (Binding)
         ▼
┌─────────────────────────┐
│ PersistentVolumeClaim │
│ (PVC)                 │
└─────────┬──────────────┘
         │
         ▼
┌──────────────────────┐
│        Pod         │
│ ┌──────────────────┐ │
│ │   Container    │ │
│ └──────────────────┘ │
└──────────────────────┘           

PV 설정

persistentVolumeReclaimPolicy

정책설명
RetainPVC가 삭제돼도 PV는 유지됨 (데이터 보존)
RecyclePV가 삭제되면 기본적으로 rm -rf
DeletePVC 삭제 시 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         # 연결할 Pod의 라벨
  ports:
    - port: 80         # Service 포트
      targetPort: 8080 # Pod 내부 포트

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			# 최소 pod 수
  maxReplicas: 10			# 최대 pod 수
  metrics:
    - type: Resource		# autoScaling 기준 : Resource, Pods, ㅒObject
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 60	# cpu 사용율 60 초과 시 scale out
    - type: Resource
      resource:
        name: memory
        target:
          type: Utilization
          averageUtilization: 70 	# memory 사용율 70 초과 시 scale out

0개의 댓글