이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터에서 수직형 포드 자동 확장을 사용하여 컨테이너의 CPU 요청과 메모리 요청을 분석하고 조정하는 방법을 설명합니다.
Google Cloud 콘솔을 통해 컨테이너 리소스를 수동으로 확장하거나, VerticalPodAutoscaler
객체를 사용하여 리소스를 분석하거나, 수직형 포드 자동 확장을 사용하여 자동 확장을 구성할 수 있습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
리소스 요청 분석
수직형 포드 자동 확장 처리는 컨테이너를 자동으로 분석하고 추천 리소스 요청을 제공합니다. Google Cloud 콘솔, Cloud Monitoring, Google Cloud CLI를 사용하여 이러한 리소스 요청을 볼 수 있습니다.
콘솔
Google Cloud Console에서 추천 리소스 요청을 보려면 최소 24시간 이전의 기존 워크로드가 배포되어 있어야 합니다. 지난 24시간 이내에 생성된 워크로드, 독립형 포드, 자바로 작성된 앱과 같은 특정 워크로드에는 일부 추천을 사용할 수 없거나 이러한 추천이 관련이 없을 수 있습니다.
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.
list 작업 > 확장 > 리소스 요청 수정을 클릭합니다.
리소스 사용률 데이터 분석 섹션에는 수직형 포드 자동 확장 처리 컨트롤러가 리소스 요청 및 한도 조정 섹션에서 제안된 리소스 요청을 만들기 위해 분석한 이전 사용량 데이터가 표시됩니다.
Cloud Monitoring
Cloud Monitoring에서 추천 리소스 요청을 보려면 기존 워크로드가 배포되어 있어야 합니다.
Google Cloud Console의 측정항목 탐색기 페이지로 이동합니다.
구성을 클릭합니다.
측정항목 선택 메뉴를 확장합니다.
리소스 메뉴에서 Kubernetes 확장을 선택합니다.
측정항목 카테고리 메뉴에서 자동 확장 처리를 선택합니다.
측정항목 메뉴에서 복제 요청 바이트당 추천 및 복제본 요청 코어당 추천을 선택합니다.
적용을 클릭합니다.
gcloud CLI
추천 리소스 요청을 보려면 VerticalPodAutoscaler
객체 및 배포를 만들어야 합니다.
표준 클러스터의 경우 클러스터에 수직형 포드 자동 확장을 사용 설정합니다. Autopilot 클러스터의 경우 수직형 포드 자동 확장이 기본적으로 사용 설정됩니다.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.다음 매니페스트를
my-rec-deployment.yaml
로 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx
이 매니페스트는 CPU 또는 메모리 요청이 없는
Deployment
를 설명합니다.my-rec-deployment
의containers.name
값은 배포의 모든 포드가VerticalPodAutoscaler
에 속하도록 지정합니다.클러스터에 매니페스트를 적용합니다.
kubectl create -f my-rec-deployment.yaml
다음 매니페스트를
my-rec-vpa.yaml
로 저장합니다.apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-rec-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-rec-deployment updatePolicy: updateMode: "Off"
이 매니페스트는
VerticalPodAutoscaler
를 설명합니다.updateMode
의 값이Off
인 경우 포드가 생성되면 수직형 포드 자동 확장 처리 컨트롤러는 컨테이너의 CPU 및 메모리 요구를 분석하고 이러한 권장사항을 리소스의status
필드에 입력합니다. 수직형 포드 자동 확장 처리 컨트롤러는 컨테이너 실행을 위한 리소스 요청을 자동으로 업데이트하지 않습니다.클러스터에 매니페스트를 적용합니다.
kubectl create -f my-rec-vpa.yaml
잠시 후
VerticalPodAutoscaler
를 확인합니다.kubectl get vpa my-rec-vpa --output yaml
출력은 다음과 비슷합니다.
... recommendation: containerRecommendations: - containerName: my-rec-container lowerBound: cpu: 25m memory: 262144k target: cpu: 25m memory: 262144k upperBound: cpu: 7931m memory: 8291500k ...
CPU 및 메모리 요청의 추천값이 출력에 표시됩니다.
수동으로 포드 리소스 요청 설정
Google Cloud CLI 또는 Google Cloud 콘솔을 사용하여 포드 리소스 요청을 수동으로 설정할 수 있습니다.
콘솔
Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.
워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.
list 작업 > 확장 > 리소스 요청 수정을 클릭합니다.
- 리소스 요청 및 한도 조정 섹션에는 각 컨테이너의 현재 CPU 및 메모리 요청과 추천 CPU 및 메모리 요청이 표시됩니다.
최근 추천 적용을 클릭하여 각 컨테이너의 추천 요청을 확인합니다.
변경사항 저장을 클릭합니다.
확인을 클릭합니다.
gcloud
포드에 대한 리소스 요청을 설정하려면 배포 매니페스트에서 requests.cpu 및 memory.cpu 값을 설정합니다. 이 예시에서는 추천 리소스 요청으로 리소스 요청 분석에서 생성된 배포를 수동으로 수정합니다.
다음 예시 매니페스트를
my-adjusted-deployment.yaml
로 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-rec-deployment spec: replicas: 2 selector: matchLabels: app: my-rec-deployment template: metadata: labels: app: my-rec-deployment spec: containers: - name: my-rec-container image: nginx resources: requests: cpu: 25m memory: 256Mi
이 매니페스트에서는 포드가 2개 있는 배포를 설명합니다. 각 포드에는 25 milliCPU와 256MiB의 메모리를 요청하는 컨테이너가 하나 있습니다.
클러스터에 매니페스트를 적용합니다.
kubectl apply -f my-adjusted-deployment.yaml
다음 단계를 수행하여 변경사항을 수동으로 적용할 수도 있습니다.
Google Cloud Console에서 워크로드 페이지로 이동합니다.
워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.
list 작업 > 확장 > 리소스 요청 수정을 클릭합니다.
컨테이너 요청을 구성합니다.
상응하는 YAML 가져오기를 클릭합니다.
워크로드 다운로드를 클릭하거나 매니페스트를 복사하여
resource-adjusted.yaml
이라는 파일에 붙여넣습니다.매니페스트를 클러스터에 적용합니다.
kubectl create -f resource-adjusted.yaml
자동으로 포드 리소스 요청 설정
수직형 포드 자동 확장은 updateMode
가 Auto
일 때 VerticalPodAutoscaler
객체를 사용하여 포드에서 리소스 요청을 자동으로 설정합니다. gcloud CLI 또는 Google Cloud 콘솔을 사용하여 VerticalPodAutoscaler
를 구성할 수 있습니다.
콘솔
리소스 요청을 자동으로 설정하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터가 있어야 합니다. Autopilot 클러스터에는 기본적으로 수직형 포드 자동 확장 기능이 사용 설정되어 있습니다.
수직형 pod 자동 확장 사용 설정
Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.
클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.
Automation 섹션에서 수직형 포드 자동 확장 옵션의 edit 수정을 클릭합니다.
수직형 포드 자동 확장 사용 설정 체크박스를 선택합니다.
변경사항 저장을 클릭합니다.
수직형 포드 자동 확장 구성
Google Cloud 콘솔의 워크로드 페이지로 이동합니다.
워크로드 목록에서 수직형 포드 자동 확장을 구성하려는 배포 이름을 클릭합니다.
list 작업 > 자동 확장 > 수직형 포드 자동 확장을 클릭합니다.
자동 확장 모드를 선택합니다.
- 자동 모드: 수직형 포드 자동 확장은 포드 수명 동안 CPU 및 메모리 요청을 업데이트합니다.
- 초기 모드: 수직형 포드 자동 확장은 포드 생성 시에만 리소스 요청을 할당하고 이후에 항목을 변경하지 않습니다.
(선택사항) 컨테이너 정책을 설정합니다. 이 옵션을 사용하면 추천값이 지정된 리소스 요청보다 높거나 낮게 설정되지 않도록 할 수 있습니다.
- expand_more 정책 추가를 클릭합니다.
- 컨테이너 모드 수정에서 자동을 선택합니다.
- 제어 리소스에서 컨테이너를 자동 확장할 리소스를 선택합니다.
- 규칙 추가를 클릭하여 컨테이너의 리소스 요청에 최소 또는 최대 범위를 하나 이상 설정합니다.
- 최소 허용 메모리: 컨테이너에 항상 있어야 하는 최소 메모리 양(MiB)입니다.
- 최소 허용 CPU: 컨테이너에 항상 있어야 하는 최소 CPU 양(mCPU)입니다.
- 최대 허용 메모리: 컨테이너에 항상 있어야 하는 최대 메모리 양(MiB)입니다.
- 최대 허용 CPU: 컨테이너에 항상 있어야 하는 최대 CPU 양(mCPU)입니다.
완료를 클릭합니다.
저장을 클릭합니다.
gcloud
리소스 요청을 자동으로 설정하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터를 사용해야 합니다. Autopilot 클러스터에는 기본적으로 이 기능이 사용 설정되어 있습니다.
표준 클러스터의 경우 클러스터에 수직형 포드 자동 확장을 사용 설정합니다.
gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.다음 매니페스트를
my-auto-deployment.yaml
로 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-auto-deployment spec: replicas: 2 selector: matchLabels: app: my-auto-deployment template: metadata: labels: app: my-auto-deployment spec: containers: - name: my-container image: registry.k8s.io/ubuntu-slim:0.1 resources: requests: cpu: 100m memory: 50Mi command: ["/bin/sh"] args: ["-c", "while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done"]
이 매니페스트에서는 포드가 2개 있는 배포를 설명합니다. 각 포드에는 100 milliCPU와 50MiB의 메모리를 요청하는 컨테이너가 하나 있습니다.
클러스터에 매니페스트를 적용합니다.
kubectl create -f my-auto-deployment.yaml
실행 중인 포드를 나열합니다.
kubectl get pods
출력에
my-deployment
의 Pod 이름이 표시됩니다.NAME READY STATUS RESTARTS AGE my-auto-deployment-cbcdd49fb-d6bf9 1/1 Running 0 8s my-auto-deployment-cbcdd49fb-th288 1/1 Running 0 8s
다음 매니페스트를
my-vpa.yaml
로 저장합니다.apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-auto-deployment updatePolicy: updateMode: "Auto"
이 매니페스트는 다음 속성을 사용해서
VerticalPodAutoscaler
를 기술합니다.targetRef.name
:my-deployment
라는 배포에서 제어되는 모든 포드가 이VerticalPodAutoscaler
에 속하도록 지정합니다.updateMode: Auto
: 수직형 포드 자동 확장 처리 컨트롤러가 포드를 삭제하고 CPU 및 메모리 요청을 조정한 후에 새 포드를 시작할 수 있도록 지정합니다.
updateMode: "Initial"
을 사용하여 포드 생성 시에만 리소스 요청을 할당하도록 수직형 포드 자동 확장을 구성할 수도 있습니다.클러스터에 매니페스트를 적용합니다.
kubectl create -f my-vpa.yaml
몇 분 기다린 후에 실행 중인 포드를 다시 봅니다.
kubectl get pods
포드 이름이 변경된 것으로 출력에 표시됩니다.
NAME READY STATUS RESTARTS AGE my-auto-deployment-89dc45f48-5bzqp 1/1 Running 0 8s my-auto-deployment-89dc45f48-scm66 1/1 Running 0 8s
포드 이름이 변경되지 않은 경우에는 더 오래 기다렸다가 실행 중인 포드를 다시 확인하세요.
수직형 포드 자동 확장 처리에 대한 정보 보기
수직형 포드 자동 확장 처리에 대한 세부정보를 보려면 다음을 수행합니다.
실행 중인 포드 중 하나에 대한 자세한 정보를 가져옵니다.
kubectl get pod POD_NAME --output yaml
POD_NAME
을 이전 단계에서 검색한 포드 중 하나의 이름으로 바꿉니다.출력은 다음과 비슷합니다.
apiVersion: v1 kind: Pod metadata: annotations: vpaUpdates: 'Pod resources updated by my-vpa: container 0: cpu capped to node capacity, memory capped to node capacity, cpu request, memory request' ... spec: containers: ... resources: requests: cpu: 510m memory: 262144k ...
이 출력은 수직형 포드 자동 확장 처리 컨트롤러의 메모리 요청이 262,144k이고 CPU 요청이 510 milliCPU임을 보여줍니다.
VerticalPodAutoscaler
에 대한 자세한 정보를 가져옵니다.kubectl get vpa my-vpa --output yaml
출력은 다음과 비슷합니다.
... recommendation: containerRecommendations: - containerName: my-container lowerBound: cpu: 536m memory: 262144k target: cpu: 587m memory: 262144k upperBound: cpu: 27854m memory: "545693548"
이 출력은 CPU 및 메모리 요청에 대한 추천값을 나타내며 다음과 같은 속성을 포함합니다.
target
: 컨테이너가 최적의 상태로 실행되도록 587milliCPU 및 262,144KB의 메모리를 요청해야 한다고 지정합니다.lowerBound
및upperBound
: 수직형 포드 자동 확장은 이러한 속성을 사용하여 포드를 삭제하고 새 포드로 대체할지 여부를 결정합니다. 포드의 요청 수가 하한보다 낮거나 상한보다 높으면 수직형 포드 자동 확장은 포드를 삭제하고 대상 속성을 충족하는 포드로 바꿉니다.
특정 컨테이너 선택 해제
gcloud CLI 또는 Google Cloud 콘솔을 사용하여 수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제할 수 있습니다.
콘솔
수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터가 있어야 합니다. Autopilot 클러스터에는 기본적으로 수직형 포드 자동 확장 기능이 사용 설정되어 있습니다.
수직형 pod 자동 확장 사용 설정
Google Cloud Console에서 Google Kubernetes Engine 페이지로 이동합니다.
클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.
Automation 섹션에서 수직형 포드 자동 확장 옵션의 edit 수정을 클릭합니다.
수직형 포드 자동 확장 사용 설정 체크박스를 선택합니다.
변경사항 저장을 클릭합니다.
수직형 포드 자동 확장 구성
Google Cloud 콘솔의 워크로드 페이지로 이동합니다.
워크로드 목록에서 수직형 포드 자동 확장을 구성하려는 배포 이름을 클릭합니다.
list 작업 > 자동 확장 > 수직형 포드 자동 확장을 클릭합니다.
자동 확장 모드를 선택합니다.
- 자동 모드: 수직형 포드 자동 확장은 포드 수명 동안 CPU 및 메모리 요청을 업데이트합니다.
- 초기 모드: 수직형 포드 자동 확장은 포드 생성 시에만 리소스 요청을 할당하고 이후에 항목을 변경하지 않습니다.
expand_more 정책 추가를 클릭합니다.
선택 해제할 컨테이너를 선택합니다.
컨테이너 모드 수정에서 끄기를 선택합니다.
완료를 클릭합니다.
저장을 클릭합니다.
gcloud
수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제하려면 다음 단계를 수행하세요.
다음 매니페스트를
my-opt-vpa.yaml
로 저장합니다.apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: name: my-opt-vpa spec: targetRef: apiVersion: "apps/v1" kind: Deployment name: my-opt-deployment updatePolicy: updateMode: "Auto" resourcePolicy: containerPolicies: - containerName: my-opt-sidecar mode: "Off"
이 매니페스트는
VerticalPodAutoscaler
를 설명합니다.mode: "Off"
값은 컨테이너my-opt-sidecar
에 대한 추천값을 사용 중지합니다.클러스터에 매니페스트를 적용합니다.
kubectl apply -f my-opt-vpa.yaml
다음 매니페스트를
my-opt-deployment.yaml
로 저장합니다.apiVersion: apps/v1 kind: Deployment metadata: name: my-opt-deployment spec: replicas: 1 selector: matchLabels: app: my-opt-deployment template: metadata: labels: app: my-opt-deployment spec: containers: - name: my-opt-container image: nginx - name: my-opt-sidecar image: busybox command: ["sh","-c","while true; do echo Doing sidecar stuff!; sleep 60; done"]
클러스터에 매니페스트를 적용합니다.
kubectl apply -f my-opt-deployment.yaml
잠시 후 수직형 포드 자동 확장 처리를 봅니다.
kubectl get vpa my-opt-vpa --output yaml
CPU와 메모리 요청의 추천값이 출력에 표시됩니다.
... recommendation: containerRecommendations: - containerName: my-opt-container ...
이 출력에는 컨테이너 한 개에만 추천값이 있습니다.
my-opt-sidecar
에 대한 추천값은 없습니다.수직형 포드 자동 확장은 선택 해제된 컨테이너의 리소스를 업데이트하지 않습니다. 몇 분 기다리면 포드가 다시 생성되지만 컨테이너 한 개에만 리소스 요청이 업데이트됩니다.
다음 단계
- 수직형 포드 자동 확장 자세히 알아보기
- GKE에서 비용에 최적화된 Kubernetes 애플리케이션을 실행하기 위한 권장사항 자세히 알아보기
- 컨테이너 및 포드에 CPU 리소스 할당하는 방법 알아보기
- 컨테이너 및 포드에 메모리 리소스를 할당하는 방법 알아보기