Kubernetes 에서 HorizontalPodAutoscaler 사용하기

KubernetesBeginner
지금 연습하기

소개

HorizontalPodAutoscaler (수평 Pod 자동 스케일러) 는 리소스 사용률을 기반으로 배포의 Pod 수를 자동으로 스케일링할 수 있게 해주는 Kubernetes 기능입니다. 이 랩에서는 HorizontalPodAutoscaler 를 사용하여 배포를 자동으로 스케일링하는 방법을 배우겠습니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이 아니면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

배포 생성

먼저 HorizontalPodAutoscaler 를 적용할 배포를 생성해야 합니다.

  1. 다음 내용으로 deployment.yaml이라는 배포 파일을 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hpa-demo
  template:
    metadata:
      labels:
        app: hpa-demo
    spec:
      containers:
        - name: hpa-demo
          image: nginx
          resources:
            limits:
              cpu: "1"
              memory: 512Mi
            requests:
              cpu: "0.5"
              memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
  name: hpa-demo
spec:
  selector:
    app: hpa-demo
  ports:
    - name: http
      port: 80
      targetPort: 80

이 배포는 CPU 및 메모리에 대한 리소스 제한 및 요청과 함께 Nginx 컨테이너의 단일 레플리카를 지정합니다.

  1. 배포 생성:
kubectl apply -f deployment.yaml

HorizontalPodAutoscaler 생성

이제 배포가 있으므로 배포를 자동으로 스케일링하기 위해 HorizontalPodAutoscaler 를 생성할 수 있습니다.

  1. 다음 내용으로 hpa.yaml이라는 HorizontalPodAutoscaler 파일을 생성합니다.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-demo
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-demo
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          averageUtilization: 1
          type: Utilization

이 HorizontalPodAutoscaler 는 hpa-demo 배포를 1 개에서 10 개의 레플리카 사이로 스케일링하고, 평균 CPU 사용률을 50% 로 목표로 하도록 지정합니다.

  1. HorizontalPodAutoscaler 생성:
kubectl apply -f hpa.yaml

HorizontalPodAutoscaler 테스트

이제 HorizontalPodAutoscaler 가 있으므로 배포에 부하를 생성하여 테스트할 수 있습니다.

  1. metrics-server 활성화
minikube addons enable metrics-server
  1. 부하 생성 (load generation) pod 생성:
kubectl run -i --tty load-generator --image=busybox /bin/sh
  1. 부하 생성 pod 에서 다음 명령을 실행하여 배포에 부하를 생성합니다.
while true; do wget -q -O- http://hpa-demo; done
  1. 다른 터미널을 열고 HorizontalPodAutoscaler 의 상태를 확인합니다.
kubectl get hpa

hpa-demo의 복제본 수가 10으로 확장된 것을 확인할 수 있습니다. 다음 명령으로 레플리카 수를 확인할 수 있습니다.

kubectl get pods -l app=hpa-demo
  1. 부하 생성 pod 에서 ctrl+c를 입력하여 부하 생성을 중지합니다.

요약

이 랩에서는 HorizontalPodAutoscaler 를 사용하여 리소스 사용률을 기반으로 배포를 자동으로 스케일링하는 방법을 배웠습니다. 배포를 생성하고, HorizontalPodAutoscaler 를 생성한 다음, 배포에 부하를 생성하여 테스트했습니다. 또한 HorizontalPodAutoscaler 가 증가된 부하에 대응하여 배포를 스케일링하는 방법도 확인했습니다.