이 페이지에서는 Google Kubernetes Engine(GKE)에서 배포된 애플리케이션을 확장하는 방법을 설명합니다.
개요
GKE에서 애플리케이션을 배포할 때 실행할 애플리케이션 복제본 수를 정의합니다. 애플리케이션을 확장할 때는 복제본 수를 늘리거나 줄입니다.
애플리케이션의 각 복제본은 애플리케이션의 컨테이너를 캡슐화하는 Kubernetes 포드를 나타냅니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
애플리케이션 검사
애플리케이션을 확장하기 전 애플리케이션을 검사하고 정상 상태인지 확인해야 합니다.
클러스터에 배포된 모든 애플리케이션을 확인하려면 다음 명령어를 실행합니다.
kubectl get CONTROLLER
CONTROLLER
를 deployments
, statefulsets
또는 다른 컨트롤러 객체 유형으로 바꿉니다.
예를 들어 kubectl get deployments
를 실행할 때 배포가 하나만 생성된 경우에는 명령어 출력이 다음과 비슷하게 표시됩니다.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 1 1 1 1 10m
이 명령어 출력은 모든 객체에서 비슷하지만 약간 다르게 표시될 수 있습니다. 배포의 출력에는 열이 6개 포함됩니다.
NAME
에는 클러스터에 있는 배포 이름이 나열됩니다.DESIRED
에는 원하는 애플리케이션 복제본 수 또는 원하는 상태가 표시되며, 배포를 만들 때 이러한 콘텐츠를 정의합니다.CURRENT
에는 현재 실행 중인 복제본 수가 표시됩니다.UP-TO-DATE
에는 원하는 상태를 얻기 위해 업데이트된 복제본 수가 표시됩니다.AVAILABLE
에는 사용자에게 제공되는 애플리케이션 복제본 수가 표시됩니다.AGE
에는 애플리케이션이 클러스터에서 실행된 시간이 표시됩니다.
이 예시에는 원하는 상태가 복제본 한 개이므로 복제본이 한 개만 있는 my-app
배포 하나만 있습니다. 생성 시에 원하는 상태를 정의하고 언제든지 애플리케이션을 확장하여 변경할 수 있습니다.
StatefulSet 검사
StatefulSet를 확장하기 전에 다음 명령어를 실행하여 검사해야 합니다.
kubectl describe statefulset my-app
이 명령어 출력에서 포드 상태 필드를 확인합니다. Failed
값이 0
보다 크면 확장이 실패할 수 있습니다.
StatefulSet이 비정상적으로 보이면 다음을 수행합니다.
포드 목록을 가져오고 어떤 포드가 비정상적인지 확인합니다.
kubectl get pods
비정상 포드를 삭제합니다.
kubectl delete POD_NAME
StatefulSet이 비정상 상태일 때 확장하려 하면 사용할 수 없게 될 수 있습니다.
애플리케이션 확장
다음 섹션에서는 애플리케이션 확장에 사용할 수 있는 각각의 방법을 설명합니다.
kubectl scale
방법이 가장 빠른 확장 방법입니다. 하지만 구성 파일을 업데이트하거나 내부 수정을 수행할 때와 같은 일부의 경우에는 다른 방법을 사용하는 것이 좋을 수 있습니다.
kubectl scale
kubectl scale
명령어를 사용하면 애플리케이션을 실행하려는 복제본 수를 즉시 변경할 수 있습니다.
kubectl scale
을 사용하려면 --replicas
플래그를 설정하여 새로운 복제본 수를 지정합니다. 예를 들어 my-app
을 4개의 복제본으로 확장하려면 다음 명령어를 실행하고 CONTROLLER
를 deployment
, statefulset
또는 다른 컨트롤러 객체 유형으로 바꿉니다.
kubectl scale CONTROLLER my-app --replicas 4
성공하면 이 명령어 출력이 deployment
"my-app" scaled
와 비슷하게 표시됩니다.
다음을 실행합니다.
kubectl get CONTROLLER my-app
출력은 다음과 비슷하게 표시됩니다.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 4 4 4 4 15m
kubectl apply
kubectl apply
를 사용하면 기존 컨트롤러 객체에 새 구성 파일을 적용할 수 있습니다. kubectl
apply
는 리소스에서 여러 항목을 변경할 때 유용하며 구성 파일에서 리소스를 관리하려는 사용자에게 유용할 수 있습니다.
kubectl apply
를 사용하여 확장하려면 개발자가 제공하는 구성 파일에 있는 객체 사양의 replicas
필드에 새로운 복제본 수가 포함되어 있어야 합니다.
다음은 예시 my-app
객체의 업데이트된 구성 파일 버전입니다. 이 예시는 배포로 표시되어 있으므로 StatefulSet와 같은 다른 유형의 컨트롤러를 사용할 경우 그에 맞게 kind
를 변경합니다. 이 예시는 노드가 최소 세 개 이상 있는 클러스터에서 가장 효과적입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
containers:
- name: my-container
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0
이 파일에서 replicas
필드 값은 3
입니다. 이 구성 파일이 적용되면 my-app
객체가 복제본 세 개로 확장됩니다.
업데이트된 구성 파일을 적용하려면 다음 명령어를 실행합니다.
kubectl apply -f config.yaml
다음을 실행합니다.
kubectl get CONTROLLER my-app
출력은 다음과 비슷하게 표시됩니다.
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-app 3 3 3 3 15m
Console
Google Cloud 콘솔에서 워크로드를 확장하려면 다음 단계를 수행합니다.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.
list 작업 > 확장 > 복제본 수정을 클릭합니다.
워크로드의 새 복제본 수를 입력합니다.
확장을 클릭합니다.
배포 자동 확장
kubectl
autoscale
을 사용하거나 Google Cloud 콘솔의 GKE 워크로드 메뉴에서 포드의 CPU 사용률을 기준으로 배포를 자동 확장할 수 있습니다.
kubectl autoscale
kubectl autoscale
은 지정된 리소스(확장 대상이라고 함)를 대상으로 하는 HorizontalPodAutoscaler
(또는 HPA) 객체를 만들고 필요에 따라 확장합니다. HPA는 개발자가 지정한 평균 CPU 사용률과 일치하도록 확장 대상의 복제본 수를 주기적으로 조정합니다.
kubectl autoscale
을 사용할 때 목표 CPU 사용률은 물론 애플리케이션의 최대 및 최소 복제본 수를 지정합니다. 예를 들어 최대 복제본 수를 6개로 설정하고, 최소 복제본 수를 4개로 설정하고, CPU 사용률 목표를 50% 사용률로 설정하려면 다음 명령어를 실행합니다.
kubectl autoscale deployment my-app --max 6 --min 4 --cpu-percent 50
이 명령어에는 --max
플래그가 필요합니다. --cpu-percent
플래그는 모든 포드에서 대상 CPU 사용률입니다. 이 명령어는 시스템 요구가 이미 있지 않은 한 배포를 복제본 6개로 즉시 확장하지 않습니다.
kubectl autoscale
을 실행한 후에는 HorizontalPodAutoscaler
객체가 생성되고 애플리케이션이 대상으로 지정됩니다. 로드가 변경되면 객체는 애플리케이션 복제본을 늘리거나 줄입니다.
클러스터의 HorizontalPodAutoscaler
객체 목록을 가져오려면 다음을 실행합니다.
kubectl get hpa
클러스터에서 특정 HorizontalPodAutoscaler
객체를 확인하려면 다음 명령어를 실행합니다.
kubectl get hpa HPA_NAME
HPA_NAME
을 HorizontalPodAutoscaler
객체의 이름으로 바꿉니다.
HorizontalPodAutoscaler
구성을 확인하려면 다음 명령어를 실행합니다.
kubectl get hpa HPA_NAME -o yaml
이 명령어 출력은 다음과 비슷합니다.
apiVersion: v1
items:
- apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
creationTimestamp: ...
name: HPA_NAME
namespace: default
resourceVersion: "664"
selfLink: ...
uid: ...
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: HPA_NAME
targetCPUUtilizationPercentage: 50
status:
currentReplicas: 0
desiredReplicas: 0
kind: List
metadata: {}
resourceVersion: ""
selfLink: ""
이 예시 출력의 targetCPUUtilizationPercentage
필드에는 kubectl autoscale
예시에서 전달된 50
% 값이 포함되어 있습니다.
클러스터에 있는 특정 HorizontalPodAutoscaler
객체에 대한 자세한 설명을 확인하려면 다음 명령어를 실행합니다.
kubectl describe hpa HPA_NAME
kubectl apply
로 새 구성 파일을 적용하거나 kubectl edit
또는 kubectl patch
를 사용하여 HorizontalPodAutoscaler
를 수정할 수 있습니다.
HorizontalPodAutoscaler
객체를 삭제하려면 다음 명령어를 실행합니다.
kubectl delete hpa HPA_NAME
Console
배포를 자동 확장하려면 다음 단계를 수행하세요.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
워크로드 목록에서 자동 확장하려는 배포의 이름을 클릭합니다.
list 작업 > 자동 확장을 클릭합니다.
배포의 최대 복제본 수를 입력하고 필요한 경우 최소 복제본 수를 입력합니다.
자동 확장 측정항목에서 측정항목을 원하는 대로 선택하고 구성합니다.
자동 확장을 클릭합니다.
커스텀 측정항목으로 자동 확장
Cloud Monitoring에서 내보낸 커스텀 측정항목에 따라 배포를 확장할 수 있습니다.
커스텀 측정항목을 사용하여 배포를 자동 확장하는 방법은 커스텀 측정항목으로 배포 자동 확장 튜토리얼을 참조하세요.