이 페이지에서는 수평형 pod 자동 확장 처리(HPA)를 사용하여 다른 유형의 측정항목으로 배포를 자동 확장하는 방법을 설명합니다. 동일한 가이드라인을 사용하여 확장 가능한 배포 객체에 HPA를 구성할 수 있습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API가 사용 설정되었는지 확인합니다. Google Kubernetes Engine API 사용 설정
- Cloud SDK가 설치되었는지 확인합니다.
다음 방법 중 하나를 사용하여 기본 gcloud
설정을 진행합니다.
gcloud init
를 사용하여 기본값 설정 과정을 진행합니다.gcloud config
를 사용하여 프로젝트 ID, 영역, 리전을 개별적으로 설정합니다.
gcloud init 사용
One of [--zone, --region] must be supplied: Please specify
location
오류가 표시되면 이 섹션을 완료합니다.
-
gcloud init
를 실행하고 다음 안내를 따르세요.gcloud init
원격 서버에서 SSH를 사용하는 경우
--console-only
플래그를 사용하여 다음 명령어로 브라우저를 실행하지 못하게 할 수 있습니다.gcloud init --console-only
- 안내를 따라
gcloud
에서 Google Cloud 계정을 사용하도록 승인합니다. - 새 구성을 만들거나 기존 구성을 선택합니다.
- Google Cloud 프로젝트를 선택합니다.
- 기본 Compute Engine 영역을 선택합니다.
gcloud config 사용
HPA 객체용 API 버전
Google Cloud Console을 사용하면 HPA 객체가 autoscaling/v2beta2
API를 사용하여 생성됩니다.
kubectl
을 사용하여 HPA에 대한 정보를 만들거나 볼 때 autoscaling/v1
API 또는 autoscaling/v2beta2
API를 지정할 수 있습니다.
기본값은
apiVersion: autoscaling/v1
이며 CPU 사용률에만 기반한 자동 확장을 허용합니다. 다른 측정항목을 기반으로 자동 확장하려면 `apiVersion: autoscaling/v2beta2
을 사용하는 것이 좋습니다. 배포 구성의 예시에서는apiVersion: autoscaling/v1
을 사용합니다.새 HPA 객체를 만들 때는
apiVersion: autoscaling/v2beta2
을 사용하는 것이 좋습니다. 커스텀 측정항목 또는 외부 측정항목을 비롯한 여러 측정항목을 기반으로 자동 확장할 수 있습니다. 이 주제의 다른 모든 예시에서는apiVersion: autoscaling/v2beta2
을 사용합니다.
지원되는 API 버전을 확인하려면 kubectl api-versions
명령어를 사용합니다.
apiVersion: autoscaling/v2beta2
을 사용하는 HPA에 대한 세부정보를 볼 때 사용할 API를 지정할 수 있습니다.
배포 예시 만들기
HPA를 만들려면 먼저 모니터링하는 워크로드를 만들어야 합니다. 이 주제의 예시에서는 다음 nginx
배포에 서로 다른 HPA 구성을 적용합니다. 다른 예시에서는 리소스 사용률, 커스텀 측정항목 또는 외부 측정항목, 여러 측정항목을 기반으로 하는 HPA를 보여 줍니다.
다음 항목을 nginx.yaml
파일에 저장합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
이 매니페스트는 CPU 요청 값을 지정합니다. 리소스 사용률에 따라 백분율로 자동 확장하려면 해당 리소스에 대한 요청을 지정해야 합니다. 요청을 지정하지 않으면 CPU 사용률의 milliCPU와 같은 리소스 사용률의 절댓값만 기반으로 하여 자동 확장할 수 있습니다.
배포를 만들려면 nginx.yaml
매니페스트를 적용합니다.
kubectl apply -f nginx.yaml
배포에는 3으로 설정된 spec.replicas
가 있으므로 3개의 pod가 배포됩니다.
kubectl get deployment nginx
명령어를 사용하여 확인할 수 있습니다.
이 주제의 각 예시에서는 nginx 배포 예시에 다른 HPA를 적용합니다.
리소스 사용률 기반의 자동 확장
이 예시에서는 HPA 객체를 생성하여 CPU 사용률이 50%를 초과할 때 nginx
배포를 자동 확장하고 항상 최소 1개의 복제본과 최대 10개의 복제본이 있는지 확인합니다.
Cloud Console, kubectl apply
명령어를 사용하거나 평균 CPU만 해당되는 경우 kubectl autoscale
명령어를 사용하여 CPU를 타겟으로 하는 HPA를 만들 수 있습니다.
Console
Cloud Console에서 GKE 워크로드 메뉴로 이동합니다.
nginx
배포 이름을 클릭합니다.list 작업 > 자동 확장을 클릭합니다.
다음 값을 지정합니다.
- 최소 복제본 수: 1
- 최대 복제본 수: 10
- 자동 확장 측정항목: CPU
- 목표: 50
- 단위: %
완료를 클릭합니다.
자동 확장을 클릭합니다.
kubectl apply
다음 YAML 매니페스트를 nginx-hpa.yaml
이라는 파일로 저장합니다.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
targetCPUUtilizationPercentage: 50
HPA를 만들려면 다음 명령어를 사용하여 매니페스트를 적용합니다.
kubectl apply -f nginx-hpa.yaml
kubectl autoscale
평균 CPU 사용률만 대상으로 하는 HPA 객체를 만들려면 kubectl autoscale
명령어를 사용하면 됩니다.
kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10
클러스터에서 HPA 객체 목록을 가져오려면 다음 명령어를 사용합니다.
kubectl get hpa
출력은 다음과 비슷합니다.
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 0%/50% 1 10 3 61s
HPA의 세부정보를 확인하려면 Cloud Console 또는 kubectl
명령어를 사용합니다.
Console
Cloud Console에서 Google Kubernetes Engine 워크로드 메뉴로 이동합니다.
nginx
배포 이름을 클릭합니다.자동 확장 처리 섹션에서 HPA의 구성을 확인합니다.
자동 확장 이벤트에 대한 자세한 내용은 이벤트 탭을 참조하세요.
kubectl get
HPA의 세부정보를 확인하려면 kubectl get hpa
를 -o yaml
플래그와 함께 사용합니다. status
필드에는 현재 복제본 수 및 최근 자동 확장 이벤트 정보가 포함됩니다.
kubectl get hpa nginx -o yaml
출력은 다음과 비슷합니다.
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
annotations:
autoscaling.alpha.kubernetes.io/conditions: '[{"type":"AbleToScale","status":"True","lastTransitionTime":"2019-10-30T19:42:59Z","reason":"ScaleDownStabilized","message":"recent
recommendations were higher than current one, applying the highest recent recommendation"},{"type":"ScalingActive","status":"True","lastTransitionTime":"2019-10-30T19:42:59Z","reason":"ValidMetricFound","message":"the
HPA was able to successfully calculate a replica count from cpu resource utilization
(percentage of request)"},{"type":"ScalingLimited","status":"False","lastTransitionTime":"2019-10-30T19:42:59Z","reason":"DesiredWithinRange","message":"the
desired count is within the acceptable range"}]'
autoscaling.alpha.kubernetes.io/current-metrics: '[{"type":"Resource","resource":{"name":"cpu","currentAverageUtilization":0,"currentAverageValue":"0"}}]'
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"autoscaling/v1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"maxReplicas":10,"minReplicas":1,"scaleTargetRef":{"apiVersion":"apps/v1","kind":"Deployment","name":"nginx"},"targetCPUUtilizationPercentage":50}}
creationTimestamp: "2019-10-30T19:42:43Z"
name: nginx
namespace: default
resourceVersion: "220050"
selfLink: /apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers/nginx
uid: 70d1067d-fb4d-11e9-8b2a-42010a8e013f
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
targetCPUUtilizationPercentage: 50
status:
currentCPUUtilizationPercentage: 0
currentReplicas: 3
desiredReplicas: 3
이 주제의 나머지 예시를 따르기 전에 HPA를 삭제합니다.
kubectl delete hpa nginx
HPA를 삭제하면 배포의 복제본 수가 동일하게 유지됩니다. HPA가 적용되기 전에 배포가 자동으로 상태로 되돌아가지 않습니다.
HPA 삭제를 자세히 알아볼 수 있습니다.
커스텀 측정항목 또는 외부 측정항목에 기반한 자동 확장
단계별 가이드를 따라 커스텀 측정항목 및 외부 측정항목의 HPA를 만들 수 있습니다.
여러 측정항목에 기반한 자동 확장
이 예시에서는 CPU 사용률과 packets_per_second
라는 커스텀 측정항목에 따라 자동 확장되는 HPA를 만듭니다.
위의 예시를 따랐지만 여전히 nginx
라는 HPA가 있는 경우 먼저 삭제하고 이 예시를 따릅니다.
이 예시에는 apiVersion: autoscaling/v2beta2
이 필요합니다. 사용 가능한 API에 대한 자세한 내용은 HPA 객체용 API 버전을 참조하세요.
이 YAML 매니페스트를 nginx-multiple.yaml
이라는 파일로 저장합니다.
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 100Mi
# Uncomment these lines if you create the custom packets_per_second metric and
# configure your app to export the metric.
# - type: Pods
# pods:
# metric:
# name: packets_per_second
# target:
# type: AverageValue
# averageValue: 100
YAML 매니페스트를 적용합니다.
kubectl apply -f nginx-multiple.yaml
HPA는 생성된 후 평균 CPU 사용률, 평균 메모리 사용률, 커스텀 packets_per_second
측정항목(주석 처리를 삭제한 경우)의 nginx
배포를 모니터링합니다. HPA는 더 큰 자동 확장 이벤트를 생성하는 값을 가진 측정항목을 기반으로 배포를 자동 확장합니다.
HPA의 세부정보 보기
HPA의 구성 및 통계를 보려면 다음 명령어를 사용합니다.
kubectl describe hpa hpa-name
hpa-name을 HorizontalPodAutoscaler 객체의 이름으로 바꿉니다.
HPA가 apiVersion: autoscaling/v2beta2
을 사용하고 여러 측정항목을 기반으로 하는 경우 kubectl describe hpa
명령어는 CPU 측정항목만 표시합니다. 모든 측정항목을 보려면 다음 명령어를 사용합니다.
kubectl describe hpa.v2beta2.autoscaling hpa-name
hpa-name을 HorizontalPodAutoscaler 객체의 이름으로 바꿉니다.
각 HPA의 현재 상태는 Conditions
필드에 표시되고 자동 확장 이벤트는 Events
필드에 나열됩니다.
출력은 다음과 비슷합니다.
Name: nginx
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"autoscaling/v2beta2","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"s...
CreationTimestamp: Tue, 05 May 2020 20:07:11 +0000
Reference: Deployment/nginx
Metrics: ( current / target )
resource memory on pods: 2220032 / 100Mi
resource cpu on pods (as a percentage of request): 0% (0) / 50%
Min replicas: 1
Max replicas: 10
Deployment pods: 1 current / 1 desired
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale recommended size matches current size
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource
ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Events: <none>
HPA 삭제
Cloud Console이나 kubectl delete
명령어를 사용하여 HPA를 삭제할 수 있습니다.
Console
nginx
HPA를 삭제하려면 다음 단계를 따르세요.
Cloud Console에서 GKE 워크로드 메뉴로 이동합니다.
nginx
배포 이름을 클릭합니다.list 작업 > 자동 확장을 클릭합니다.
삭제를 클릭합니다.
kubectl delete
nginx
HPA를 삭제하려면 다음 명령어를 사용합니다.
kubectl delete hpa nginx
HPA를 삭제하면 배포 또는 다른 배포 객체가 기존 규모로 유지되며 배포의 원본 매니페스트에서 복제본 수로 되돌아가지 않습니다. 배포를 다시 3개의 pod로 수동 확장하려면 kubectl scale
명령어를 사용합니다.
kubectl scale deployment nginx --replicas=3
삭제
HPA를 삭제하지 않은 경우 삭제합니다.
kubectl delete hpa nginx
nginx
배포를 삭제합니다.kubectl delete deployment nginx
선택적으로 클러스터를 삭제합니다.
다음 단계
- 수평형 pod 자동 확장 자세히 알아보기
- 수직형 pod 자동 확장 자세히 알아보기
- 다차원 pod 자동 확장 자세히 알아보기
- 커스텀 측정항목으로 배포 자동 확장 자세히 알아보기
- 컨테이너 및 pod에 CPU 리소스 할당 방법 알아보기
- 컨테이너 및 pod에 메모리 리소스 할당 방법 알아보기