애플리케이션 확장

이 페이지에서는 Google Kubernetes Engine에서 배포된 애플리케이션을 확장하는 방법을 설명합니다.

개요

GKE에서 애플리케이션을 배포할 때는 실행하려는 애플리케이션의 복제본 수를 정의합니다. 애플리케이션을 확장할 때는 복제본 수를 늘리거나 줄입니다.

애플리케이션의 각 복제본은 애플리케이션의 컨테이너를 캡슐화하는 Kubernetes 포드를 나타냅니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 지역 클러스터를 사용하는 경우 기본 컴퓨팅 지역을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    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]를 실행합니다. 여기서 [POD]는 올바르지 않은 포드 이름입니다.

올바르지 않은 상태일 때 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를 변경합니다. 이 예는 노드가 3개 이상인 클러스터에서 가장 효과적입니다.

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: gcr.io/google-samples/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

콘솔

Google Cloud Platform Console에서 작업 부하를 확장하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

  3. 작업을 클릭한 후 확장을 클릭합니다.

  4. 복제본 필드에 원하는 복제본 수를 입력합니다.

  5. 확장을 클릭합니다.

배포 자동 확장

kubectl autoscale 또는 GCP Console의 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 [HPA_NAME]

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]

콘솔

배포를 자동 확장하려면 다음 단계를 수행하세요.

  1. GCP Console에서 Google Kubernetes Engine 작업 부하 메뉴로 이동합니다.

    작업 부하 메뉴로 이동

  2. 메뉴에서 원하는 작업 부하를 선택합니다.

  3. 작업을 클릭한 후, 자동 확장을 클릭합니다.

  4. 최대 포드 수 필드에 원하는 최대 포드 수를 입력합니다.

  5. 선택적으로 최소 포드 수대상 CPU 사용률(%) 필드에 원하는 값을 입력합니다.

  6. 자동 확장을 클릭합니다.

커스텀 측정항목으로 자동 확장

GKE 버전 1.9부터는 Stackdriver Monitoring에서 내보낸 커스텀 측정항목을 기준으로 배포를 확장할 수 있습니다.

커스텀 측정항목을 사용해서 배포를 자동 확장하는 방법을 알아보려면 커스텀 측정항목으로 배포 자동 확장 가이드를 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine