웹 파이프라인/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
응용 배포, 오토스케일러 설정
응용 (웹 서버) 배포
- kubectl apply -f https://k8s.io/examples/application/php-apache.yaml
- 간단한 웹 서버 응용을 배포(포드의수:1)하고 ClusterIP로 클러스터 내부에만 노출
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 체크 가능
- kubectl run -it load-gen --rm --image=busybox --restart=Never --
볼륨(Volume)
k8s는 클러스터 내에서 이용할 수 있는 저장 장치의 추상화된 객체로 볼륨을 정의
- PV (PersistentVolume)
- 클러스터 내에 존재하는 스토리지를 추상화한 것
- 클러스터 내의 노드에 존재하는 물리적 저장장치를 이용할 수도 있으며, 다양한 원격 저장소 및 클라우드 서비스들도 이용할 수 있음
- PVC (PersistentVolumeClaim)
- 사용자에 의한 PV를 이용하기 위한 요청
- Pod: Node = PVC : PV
- 저장 공간의 크기와 접근 모드 (읽기/쓰기,...)를 지정
실습
로컬 컴퓨터에 볼륨으로 생성할 디렉토리 만들고 이 안에 테스트 파일을 작성
- PV 생성
- PVC 생성
- nginx 웹 서버를 실행하는 포드 생성
- 여기에 앞에서 생성한 볼륨을 "/"URL에 대하여 서비스되는 경로로 마운트
- 웹 브라우저로 결과 확인
요약
k8s 서비스
- 클러스터 내부에서 실행되고 있는 기능을 클러스터 외부에 노출
HPA(Horizontal Pod Autoscaler)
- 부하 상황에 따라 동적으로 디플로이먼트의 레플리카셋 크기를 조정
PV(Persistent Volume)
- 포드에서 바인드 마운트로 이용할 수 있는 저장 장치
- 변화하는 데이터 기록, 저장하기 위해서 반드시 필요