자습서: AKS(Azure Kubernetes Service)에서 애플리케이션 크기 조정Tutorial: Scale applications in Azure Kubernetes Service (AKS)

자습서를 수행한 경우 AKS에서 작동하는 Kubernetes 클러스터가 있으며 샘플 Azure Voting 앱을 배포한 상태입니다.If you've followed the tutorials, you have a working Kubernetes cluster in AKS and you deployed the sample Azure Voting app. 7개 중 5단계인 이 자습서에서는 앱의 Pod를 스케일 아웃하고 Pod 자동 크기 조정을 시도합니다.In this tutorial, part five of seven, you scale out the pods in the app and try pod autoscaling. Azure VM 노드 수를 조정하여 워크로드 호스팅을 위한 클러스터 용량을 변경하는 방법도 알아봅니다.You also learn how to scale the number of Azure VM nodes to change the cluster's capacity for hosting workloads. 다음 방법을 알아봅니다.You learn how to:

  • Kubernetes 노드 크기 조정Scale the Kubernetes nodes
  • 애플리케이션을 실행하는 Kubernetes Pod의 크기를 수동으로 조정Manually scale Kubernetes pods that run your application
  • 앱 프런트 엔드를 실행하는 Pod 자동 크기 조정 구성Configure autoscaling pods that run the app front-end

추가 자습서에서 Azure Vote 애플리케이션은 새 버전으로 업데이트됩니다.In additional tutorials, the Azure Vote application is updated to a new version.

시작하기 전에Before you begin

이전 자습서에서 애플리케이션은 컨테이너 이미지로 패키징되었습니다.In previous tutorials, an application was packaged into a container image. 이 이미지는 Azure Container Registry로 업로드되었고, AKS 클러스터를 만들었습니다.This image was uploaded to Azure Container Registry, and you created an AKS cluster. 그런 다음, 애플리케이션은 AKS 클러스터에 배포되었습니다.The application was then deployed to the AKS cluster. 이러한 단계를 아직 수행하지 않았으나 수행하려는 경우 자습서 1 - 컨테이너 이미지 만들기로 시작합니다.If you haven't done these steps, and would like to follow along, start with Tutorial 1 – Create container images.

이 자습서의 작업을 수행하려면 Azure CLI 버전 2.0.53 이상을 실행해야 합니다.This tutorial requires that you're running the Azure CLI version 2.0.53 or later. az --version을 실행하여 버전을 찾습니다.Run az --version to find the version. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.If you need to install or upgrade, see Install Azure CLI.

수동으로 Pod 크기 조정Manually scale pods

이전 자습서에서 Azure Vote 프런트 엔드 및 Redis 인스턴스를 배포할 때 단일 복제본이 생성되었습니다.When the Azure Vote front-end and Redis instance were deployed in previous tutorials, a single replica was created. 클러스터에 있는 Pod의 수와 상태를 확인하려면 다음과 같이 kubectl get 명령을 사용합니다.To see the number and state of pods in your cluster, use the kubectl get command as follows:

kubectl get pods

다음 예제 출력은 프런트 엔드 Pod 1개와 백 엔드 Pod 1개를 보여줍니다.The following example output shows one front-end pod and one back-end pod:

NAME                               READY     STATUS    RESTARTS   AGE
azure-vote-back-2549686872-4d2r5   1/1       Running   0          31m
azure-vote-front-848767080-tf34m   1/1       Running   0          31m

azure-vote-front 배포의 Pod 수를 수동으로 변경하려면 kubectl scale 명령을 사용합니다.To manually change the number of pods in the azure-vote-front deployment, use the kubectl scale command. 다음 예제는 프런트 엔드 Pod 수를 5로 늘립니다.The following example increases the number of front-end pods to 5:

kubectl scale --replicas=5 deployment/azure-vote-front

kubectl get pods 명령을 다시 실행하여 AKS가 추가 Pod를 만드는지 확인합니다.Run kubectl get pods again to verify that AKS creates the additional pods. 약 1분이 지나면 클러스터에서 추가 Pod를 사용할 수 있습니다.After a minute or so, the additional pods are available in your cluster:

$ kubectl get pods

                                    READY     STATUS    RESTARTS   AGE
azure-vote-back-2606967446-nmpcf    1/1       Running   0          15m
azure-vote-front-3309479140-2hfh0   1/1       Running   0          3m
azure-vote-front-3309479140-bzt05   1/1       Running   0          3m
azure-vote-front-3309479140-fvcvm   1/1       Running   0          3m
azure-vote-front-3309479140-hrbf2   1/1       Running   0          15m
azure-vote-front-3309479140-qphz8   1/1       Running   0          3m

Pod 자동 크기 조정Autoscale pods

Kubernetes는 수평 Pod 자동 크기 조정을 지원하여 CPU 사용률 또는 다른 선택 메트릭에 따라 배포에서 Pod 수를 조정할 수 있게 해줍니다.Kubernetes supports horizontal pod autoscaling to adjust the number of pods in a deployment depending on CPU utilization or other select metrics. 메트릭 서버는 Kubernetes에 리소스 사용률을 제공하는 데 사용되며, AKS 클러스터 버전 1.10 이상에서 자동으로 배포됩니다.The Metrics Server is used to provide resource utilization to Kubernetes, and is automatically deployed in AKS clusters versions 1.10 and higher. AKS 클러스터 버전을 확인하려면 다음 예제처럼 az aks show 명령을 사용합니다.To see the version of your AKS cluster, use the az aks show command, as shown in the following example:

az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion --output table

참고

AKS 클러스터가 1.10보다 작으면 메트릭 서버가 자동으로 설치되지 않습니다.If your AKS cluster is less than 1.10, the Metrics Server is not automatically installed. 설치하려면 metrics-server GitHub 리포지토리를 복제하고 예제 리소스 정의를 설치합니다.To install, clone the metrics-server GitHub repo and install the example resource definitions. 이러한 YAML 정의의 콘텐츠를 참조하려면 Kuberenetes 1.8+에 대한 메트릭 서버를 참조하세요.To view the contents of these YAML definitions, see Metrics Server for Kuberenetes 1.8+.

git clone https://github.com/kubernetes-incubator/metrics-server.git
kubectl create -f metrics-server/deploy/1.8+/

자동 크기 조정기를 사용하려면 Pod와 Pod의 모든 컨테이너에 CPU 요청 및 제한이 정의되어 있어야 합니다.To use the autoscaler, all containers in your pods and your pods must have CPU requests and limits defined. azure-vote-front 배포에서 프런트 엔드 컨테이너는 0.25 CPU를 요청하며 제한은 0.5 CPU입니다.In the azure-vote-front deployment, the front-end container already requests 0.25 CPU, with a limit of 0.5 CPU. 다음 예제 코드 조각에 나와 있는 것처럼 이러한 리소스 요청 및 제한이 정의됩니다.These resource requests and limits are defined as shown in the following example snippet:

resources:
  requests:
     cpu: 250m
  limits:
     cpu: 500m

다음 예제에서는 kubectl autoscale 명령을 사용하여 azure-vote-front 배포의 Pod 수를 자동으로 조정합니다.The following example uses the kubectl autoscale command to autoscale the number of pods in the azure-vote-front deployment. 모든 Pod의 평균 CPU 사용률이 요청된 사용량의 50%를 초과하는 경우 자동 크기 조정은 Pod를 최대 10개의 인스턴스로 늘립니다.If average CPU utilization across all pods exceeds 50% of their requested usage, the autoscaler increases the pods up to a maximum of 10 instances. 그런 다음, 최소 3개의 인스턴스가 배포에 대해 정의됩니다.A minimum of 3 instances is then defined for the deployment:

kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10

또는 매니페스트 파일을 만들어 자동 크기 조정기 동작 및 리소스 제한을 정의할 수 있습니다.Alternatively, you can create a manifest file to define the autoscaler behavior and resource limits. 다음은 azure-vote-hpa.yaml이라는 매니페스트 파일의 예입니다.The following is an example of a manifest file named azure-vote-hpa.yaml.

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: azure-vote-back-hpa
spec:
  maxReplicas: 10 # define max replica count
  minReplicas: 3  # define min replica count
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: azure-vote-back
  targetCPUUtilizationPercentage: 50 # target CPU utilization


apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: azure-vote-front-hpa
spec:
  maxReplicas: 10 # define max replica count
  minReplicas: 3  # define min replica count
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: azure-vote-front
  targetCPUUtilizationPercentage: 50 # target CPU utilization

kubectl apply를 사용하여 azure-vote-hpa.yaml 매니페스트 파일에 정의된 자동 크기 조정기를 적용합니다.Use kubectl apply to apply the autoscaler defined in the azure-vote-hpa.yaml manifest file.

$ kubectl apply -f azure-vote-hpa.yaml

자동 조정기의 상태를 확인하려면 다음과 같이 kubectl get hpa 명령을 실행합니다.To see the status of the autoscaler, use the kubectl get hpa command as follows:

$ kubectl get hpa

NAME               REFERENCE                     TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
azure-vote-front   Deployment/azure-vote-front   0% / 50%   3         10        3          2m

Azure Vote 앱에 최소 부하를 적용한 상태로 몇 분이 지나면 Pod 복제본 수가 자동으로 3개로 줄어듭니다.After a few minutes, with minimal load on the Azure Vote app, the number of pod replicas decreases automatically to three. kubectl get pods 명령을 다시 사용하여 불필요한 Pod를 제거할 수 있습니다.You can use kubectl get pods again to see the unneeded pods being removed.

수동으로 AKS 노드 크기 조정Manually scale AKS nodes

이전 자습서의 명령을 사용하여 Kubernetes 클러스터를 만든 경우 두 개의 노드가 있습니다.If you created your Kubernetes cluster using the commands in the previous tutorial, it has two nodes. 클러스터에 대한 컨테이너 워크로드를 더 늘리거나 줄일 계획인 경우 수동으로 노드 수를 조정할 수 있습니다.You can adjust the number of nodes manually if you plan more or fewer container workloads on your cluster.

다음 예제에서는 myAKSCluster라는 Kubernetes 클러스터의 노드 수를 3개로 늘립니다.The following example increases the number of nodes to three in the Kubernetes cluster named myAKSCluster. 이 명령은 완료되는 데 2~3분이 걸립니다.The command takes a couple of minutes to complete.

az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3

클러스터가 성공적으로 크기 조정되면 출력은 다음 예제와 비슷합니다.When the cluster has successfully scaled, the output is similar to following example:

"agentPoolProfiles": [
  {
    "count": 3,
    "dnsPrefix": null,
    "fqdn": null,
    "name": "myAKSCluster",
    "osDiskSizeGb": null,
    "osType": "Linux",
    "ports": null,
    "storageProfile": "ManagedDisks",
    "vmSize": "Standard_D2_v2",
    "vnetSubnetId": null
  }

다음 단계Next steps

이 자습서에서는 Kubernetes 클러스터의 다양한 크기 조정 기능을 사용했습니다.In this tutorial, you used different scaling features in your Kubernetes cluster. 구체적으로 다음 작업 방법을 알아보았습니다.You learned how to:

  • 애플리케이션을 실행하는 Kubernetes Pod의 크기를 수동으로 조정Manually scale Kubernetes pods that run your application
  • 앱 프런트 엔드를 실행하는 Pod 자동 크기 조정 구성Configure autoscaling pods that run the app front-end
  • 수동으로 Kubernetes 노드 크기 조정Manually scale the Kubernetes nodes

그 다음 자습서로 이동하여 Kubernetes에서 애플리케이션을 업데이트하는 방법을 알아보세요.Advance to the next tutorial to learn how to update application in Kubernetes.