자습서: AKS(Azure Kubernetes Service)에서 애플리케이션 크기 조정
이전 자습서를 따른 경우 작업 중인 Kubernetes 클러스터가 있고 샘플 Azure Voting 앱을 배포했습니다. 7개 중 5단계인 이 자습서에서는 앱의 Pod를 스케일 아웃하고 Pod 자동 크기 조정을 시도합니다. Azure VM 노드 수를 조정하여 워크로드 호스팅을 위한 클러스터 용량을 변경하는 방법도 알아봅니다. 다음 방법을 알아봅니다.
- Kubernetes 노드의 크기를 조정합니다.
- 애플리케이션을 실행하는 Kubernetes Pod의 크기를 수동으로 조정합니다.
- 앱 프런트 엔드를 실행하는 자동 크기 조정 Pod를 구성합니다.
예정된 자습서에서는 Azure Vote 애플리케이션을 새 버전으로 업데이트합니다.
시작하기 전에
이전 자습서에서는 애플리케이션을 컨테이너 이미지로 패키지하고, 이미지를 Azure Container Registry 업로드하고, AKS 클러스터를 만들고, 애플리케이션을 AKS 클러스터에 배포했습니다.
이러한 단계를 완료하지 않았고 이 자습서와 함께 수행하려는 경우 첫 번째 자습서인 AKS용 애플리케이션 준비로 시작합니다.
이 자습서에는 Azure CLI 버전 2.0.53 이상이 필요합니다. az --version
을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
수동으로 Pod 크기 조정
이전 자습서에서 Azure Vote 프런트 엔드 및 Redis instance 배포한 경우 단일 복제본(replica) 생성되었습니다.
명령을 사용하여
kubectl get
클러스터의 Pod 수와 상태를 확인합니다.kubectl get pods
다음 예제 출력은 프런트 엔드 Pod 1개와 백 엔드 Pod 1개를 보여줍니다.
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
명령을 사용하여
kubectl scale
azure-vote-front 배포의 Pod 수를 수동으로 변경합니다. 다음 예제 명령은 프런트 엔드 Pod 수를 5개로 늘입니다.kubectl scale --replicas=5 deployment/azure-vote-front
명령을 사용하여 추가 Pod가 생성되었는지 확인합니다
kubectl get pods
.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 자동 크기 조정
Kubernetes는 수평 Pod 자동 크기 조정을 지원하여 CPU 사용률 또는 다른 선택 메트릭에 따라 배포에서 Pod 수를 조정할 수 있게 해줍니다. 메트릭 서버는 버전 1.10 이상의 AKS 클러스터에 자동으로 배포되며 Kubernetes에 리소스 사용률을 제공합니다.
명령을 사용하여
az aks show
AKS 클러스터의 버전을 확인합니다.az aks show --resource-group myResourceGroup --name myAKSCluster --query kubernetesVersion --output table
참고
AKS 클러스터가 1.10보다 낮은 버전에 있는 경우 메트릭 서버가 자동으로 설치되지 않습니다. 메트릭 서버 설치 매니페스트는 메트릭 서버 릴리스에서 자산으로 components.yaml
사용할 수 있습니다. 즉, URL을 통해 설치할 수 있습니다. 이러한 YAML 정의에 대해 자세히 알아보려면 추가 정보의 배포 섹션을 참조하세요.
설치 예:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
자동 크기 조정기를 사용하려면 모든 컨테이너 및 Pod에 정의된 CPU 요청 및 제한이 있어야 합니다. 배포에서 azure-vote-front
프런트 엔드 컨테이너는 CPU 제한이 0.5인 0.25 CPU를 요청합니다.
이러한 리소스 요청 및 제한은 다음 압축된 YAML 예제와 같이 각 컨테이너에 대해 정의됩니다.
containers:
- name: azure-vote-front
image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
limits:
cpu: 500m
를 사용하여 Pod 자동 크기 조정 kubectl autoscale
명령을 사용하여 Pod 자동 크기 조정
kubectl autoscale
다음 명령은 다음 조건으로 azure-vote-front 배포의 Pod 수를 자동 크기 조정합니다. 모든 Pod의 평균 CPU 사용률이 요청된 사용량의 50%를 초과하는 경우 자동 크기 조정기는 Pod를 최대 10개의 인스턴스 및 배포에 대해 최소 3개의 인스턴스까지 증가합니다.kubectl autoscale deployment azure-vote-front --cpu-percent=50 --min=3 --max=10
매니페스트 파일을 사용하여 Pod 자동 크기 조정
다음 예제 매니페스트 파일에 표시된 것처럼 자동 크기 조정기 동작 및 리소스 제한을 정의하는 매니페스트 파일을
azure-vote-hpa.yaml
만듭니다.참고
를 사용하는
apiVersion: autoscaling/v2
경우 사용자 지정 메트릭을 포함하여 자동 크기 조정 시 더 많은 메트릭을 도입할 수 있습니다. 자세한 내용은 를 사용하여v2
여러 메트릭 및 사용자 지정 메트릭 자동 크기 조정을HorizontalPodAutoscaler
참조하세요.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
.kubectl apply -f azure-vote-hpa.yaml
명령을 사용하여 자동 크기 조정기의 상태 확인합니다
kubectl get hpa
.kubectl get hpa # Example output NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE azure-vote-front Deployment/azure-vote-front 0% / 50% 3 10 3 2m
몇 분 후 Azure Vote 앱에서 부하를 최소화하면 Pod 복제본 수가 3개로 줄어듭니다.
kubectl get pods
명령을 다시 사용하여 불필요한 Pod를 제거할 수 있습니다.
수동으로 AKS 노드 크기 조정
이전 자습서의 명령을 사용하여 Kubernetes 클러스터를 만든 경우 클러스터에는 두 개의 노드가 있습니다. 이 양을 늘리거나 줄이려면 노드 수를 수동으로 조정할 수 있습니다.
다음 예제에서는 myAKSCluster라는 Kubernetes 클러스터의 노드 수를 3개로 늘립니다. 이 명령은 완료되는 데 2~3분이 걸립니다.
명령을 사용하여 클러스터 노드 크기를 조정합니다
az aks scale
.az aks scale --resource-group myResourceGroup --name myAKSCluster --node-count 3
클러스터가 성공적으로 스케일링되면 출력은 다음 예제 출력과 유사합니다.
"agentPoolProfiles": [ { "count": 3, "dnsPrefix": null, "fqdn": null, "name": "myAKSCluster", "osDiskSizeGb": null, "osType": "Linux", "ports": null, "storageProfile": "ManagedDisks", "vmSize": "Standard_D2_v2", "vnetSubnetId": null }
다음 단계
이 자습서에서는 Kubernetes 클러스터의 다양한 크기 조정 기능을 사용했습니다. 구체적으로 다음 작업 방법을 알아보았습니다.
- 애플리케이션을 실행하는 Kubernetes Pod의 크기를 수동으로 조정합니다.
- 앱 프런트 엔드를 실행하는 자동 크기 조정 Pod를 구성합니다.
- Kubernetes 노드의 크기를 수동으로 조정합니다.
다음 자습서에서는 Kubernetes에서 애플리케이션을 업데이트하는 방법을 알아봅니다.