웹 파이프라인/Kubernetes

쿠버네티스 서비스와 볼륨

thinktank911 2025. 12. 15. 17:48

쿠버네티스 서비스와 볼륨

서비스

클러스터에 외부에서 클러스터에 접속하는 방법

  • 클러스터 내부에서 동작하는 기능을 외부로 노출하는 것을 서비스라고 부름

서로 다른 서비스의 종류

  • 클러스터 IP(ClusterIP)
  • 노드포트(NodePort)
  • 로드밸런서(LoadBalancer)
  • 인그레스(Ingress)

클러스터IP

  • 클러스터 내부에서만 접근할 수 있는 IP 할당
  • 포트 포워딩 또는 프록시를 통해 클러스터 외부로부터 접근 가능
  • 테스트, 디버깅 등의 목적에 제한적으로 이용

노드포트
동작 방식

  • 모든 워커 노드의 특정 포트를 열고 여기로 오는 모든 요청을 노드포트 서비스에 전달
  • 노드포트 서비스는 해당 요청을 처리할 수 있는 포드로 요청을 전달
  • 디플로이먼트에 속한 포드들이 제공하는 웹 서비스를 클러스터 외부로 노출하기 위해 적용했던 방법

로드밸런서

  • 클러스터 외부의 로드밸런서를 이용하여 부하 균등화 수행
  • 노드포트와 달리 특정 노드가 접근 불가한 경우에도 서비스 제공 가능
  • 클러스터 외부에 존재하는 로드밸런서가 노드들의 상태를 체크하고 부하 균등화하여 노드들에 트래픽 전달
    (k8s는 이를 지원하기 위하여 LoadBalancer라는 서비스 타입 제공)

인그레스

  • 엄밀히 말하자면 k8s 서비스의 한 종류는 아니고, 복수의 서비스에 대해 목적에 따라 트래픽 연결하는 도구

동적 수평 오토스케일링

HPA(Horizontal Pod Autoscaler)

  • 부하량에 따라 디플로이먼트의 수를 유동적으로 관리하는 k8s의 기능
    • 보통의 경우 고려되는 부하량 : CPU 및 메모리 사용량
  • 메트릭스 서버(metrics server)로부터 부하 계측값을 전달받아 동일한 기능을 제공하는 포드의 수를 동적으로 조절

스케일링 기준이 되는 값과 최소/최대 포드의 수를 지정

메트릭스 서버의 설치(배포)

  • 명령어
    kubectl apply -f metrics.yaml
  • 메트릭스 서버 확인
    kubectl get pods --all-namespaces
    kubectl top pods
    kubectl top nodes

응용 배포, 오토스케일러 설정

응용 (웹 서버) 배포

HPA

  • kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  • CPU 사용율 50%를 기준으로 동적 스케일링(최소 1개, 최대 10개의 포드 운용)

명령어

  • kubectl apply -f php-apache.yaml
  • 오토스케일링 : kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
  • 부하걸기
    • kubectl run -it load-gen --rm --image=busybox --restart=Never --
      /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
    • 상태 주기적 모니터링 : ubectl get hpa php-apache --watch
    • kubectl get pods : pods 늘어난 것 볼 수 있다.
    • kubectl get hpa : cpu 체크 가능

볼륨(Volume)

k8s는 클러스터 내에서 이용할 수 있는 저장 장치의 추상화된 객체로 볼륨을 정의

  • PV (PersistentVolume)
    • 클러스터 내에 존재하는 스토리지를 추상화한 것
    • 클러스터 내의 노드에 존재하는 물리적 저장장치를 이용할 수도 있으며, 다양한 원격 저장소 및 클라우드 서비스들도 이용할 수 있음
  • PVC (PersistentVolumeClaim)
    • 사용자에 의한 PV를 이용하기 위한 요청
    • Pod: Node = PVC : PV
    • 저장 공간의 크기와 접근 모드 (읽기/쓰기,...)를 지정

실습

로컬 컴퓨터에 볼륨으로 생성할 디렉토리 만들고 이 안에 테스트 파일을 작성

  • PV 생성
  • PVC 생성
  • nginx 웹 서버를 실행하는 포드 생성
    • 여기에 앞에서 생성한 볼륨을 "/"URL에 대하여 서비스되는 경로로 마운트
  • 웹 브라우저로 결과 확인

요약

k8s 서비스

  • 클러스터 내부에서 실행되고 있는 기능을 클러스터 외부에 노출

HPA(Horizontal Pod Autoscaler)

  • 부하 상황에 따라 동적으로 디플로이먼트의 레플리카셋 크기를 조정

PV(Persistent Volume)

  • 포드에서 바인드 마운트로 이용할 수 있는 저장 장치
  • 변화하는 데이터 기록, 저장하기 위해서 반드시 필요