컨테이너 리소스 요청 및 한도 확장


이 페이지에서는 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 콘솔에서 추천 리소스 요청을 보려면 최소 24시간 이전의 기존 워크로드가 배포되어 있어야 합니다. 지난 24시간 이내에 생성된 워크로드, 독립형 포드, 자바로 작성된 앱과 같은 특정 워크로드에는 일부 추천을 사용할 수 없거나 이러한 추천이 관련이 없을 수 있습니다.

  1. Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.

    워크로드로 이동

  2. 워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.

  3. 작업 > 확장 > 리소스 요청 수정을 클릭합니다.

    리소스 사용률 데이터 분석 섹션에는 수직형 포드 자동 확장 처리 컨트롤러가 리소스 요청 및 한도 조정 섹션에서 제안된 리소스 요청을 만들기 위해 분석한 이전 사용량 데이터가 표시됩니다.

Cloud Monitoring

Cloud Monitoring에서 추천 리소스 요청을 보려면 기존 워크로드가 배포되어 있어야 합니다.

  1. Google Cloud 콘솔의 측정항목 탐색기 페이지로 이동합니다.

    측정항목 탐색기로 이동

  2. 구성을 클릭합니다.

  3. 측정항목 선택 메뉴를 확장합니다.

  4. 리소스 메뉴에서 Kubernetes 확장을 선택합니다.

  5. 측정항목 카테고리 메뉴에서 자동 확장 처리를 선택합니다.

  6. 측정항목 메뉴에서 복제 요청 바이트당 추천복제본 요청 코어당 추천을 선택합니다.

  7. 적용을 클릭합니다.

gcloud CLI

추천 리소스 요청을 보려면 VerticalPodAutoscaler 객체 및 배포를 만들어야 합니다.

  1. 표준 클러스터의 경우 클러스터에 수직형 포드 자동 확장을 사용 설정합니다. Autopilot 클러스터의 경우 수직형 포드 자동 확장이 기본적으로 사용 설정됩니다.

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

  2. 다음 매니페스트를 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-deploymentcontainers.name 값은 배포의 모든 포드가 VerticalPodAutoscaler에 속하도록 지정합니다.

  3. 클러스터에 매니페스트를 적용합니다.

    kubectl create -f my-rec-deployment.yaml
    
  4. 다음 매니페스트를 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 필드에 입력합니다. 수직형 포드 자동 확장 처리 컨트롤러는 컨테이너 실행을 위한 리소스 요청을 자동으로 업데이트하지 않습니다.

  5. 클러스터에 매니페스트를 적용합니다.

    kubectl create -f my-rec-vpa.yaml
    
  6. 잠시 후 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 콘솔을 사용하여 포드 리소스 요청을 수동으로 설정할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.

    워크로드로 이동

  2. 워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.

  3. 작업 > 확장 > 리소스 요청 수정을 클릭합니다.

    1. 리소스 요청 및 한도 조정 섹션에는 각 컨테이너의 현재 CPU 및 메모리 요청과 추천 CPU 및 메모리 요청이 표시됩니다.
  4. 최근 추천 적용을 클릭하여 각 컨테이너의 추천 요청을 확인합니다.

  5. 변경사항 저장을 클릭합니다.

  6. 확인을 클릭합니다.

gcloud

포드에 대한 리소스 요청을 설정하려면 배포 매니페스트에서 requests.cpu 및 memory.cpu 값을 설정합니다. 이 예시에서는 추천 리소스 요청으로 리소스 요청 분석에서 생성된 배포를 수동으로 수정합니다.

  1. 다음 예시 매니페스트를 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의 메모리를 요청하는 컨테이너가 하나 있습니다.

  2. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f my-adjusted-deployment.yaml
    

다음 단계를 수행하여 변경사항을 수동으로 적용할 수도 있습니다.

  1. Google Cloud 콘솔에서 워크로드 페이지로 이동합니다.

    워크로드로 이동

  2. 워크로드 목록에서 확장할 워크로드의 이름을 클릭합니다.

  3. 작업 > 확장 > 리소스 요청 수정을 클릭합니다.

  4. 컨테이너 요청을 구성합니다.

  5. 상응하는 YAML 가져오기를 클릭합니다.

  6. 워크로드 다운로드를 클릭하거나 매니페스트를 복사하여 resource-adjusted.yaml이라는 파일에 붙여넣습니다.

  7. 매니페스트를 클러스터에 적용합니다.

    kubectl create -f resource-adjusted.yaml
    

자동으로 포드 리소스 요청 설정

수직형 포드 자동 확장은 updateModeAuto일 때 VerticalPodAutoscaler 객체를 사용하여 포드에서 리소스 요청을 자동으로 설정합니다. gcloud CLI 또는 Google Cloud 콘솔을 사용하여 VerticalPodAutoscaler를 구성할 수 있습니다.

콘솔

리소스 요청을 자동으로 설정하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터가 있어야 합니다. Autopilot 클러스터에는 기본적으로 수직형 포드 자동 확장 기능이 사용 설정되어 있습니다.

수직형 포드 자동 확장 사용 설정

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. Automation 섹션에서 수직형 포드 자동 확장 옵션의 수정을 클릭합니다.

  4. 수직형 포드 자동 확장 사용 설정 체크박스를 선택합니다.

  5. 변경사항 저장을 클릭합니다.

수직형 포드 자동 확장 구성

  1. Google Cloud 콘솔의 워크로드 페이지로 이동합니다.

    워크로드로 이동

  2. 워크로드 목록에서 수직형 포드 자동 확장을 구성하려는 배포 이름을 클릭합니다.

  3. 작업 > 자동 확장 > 수직형 포드 자동 확장을 클릭합니다.

  4. 자동 확장 모드를 선택합니다.

    • 자동 모드: 수직형 포드 자동 확장은 포드 수명 동안 CPU 및 메모리 요청을 업데이트합니다.
    • 초기 모드: 수직형 포드 자동 확장은 포드 생성 시에만 리소스 요청을 할당하고 이후에 항목을 변경하지 않습니다.
  5. (선택사항) 컨테이너 정책을 설정합니다. 이 옵션을 사용하면 추천값이 지정된 리소스 요청보다 높거나 낮게 설정되지 않도록 할 수 있습니다.

    1. 정책 추가를 클릭합니다.
    2. 컨테이너 모드 수정에서 자동을 선택합니다.
    3. 제어 리소스에서 컨테이너를 자동 확장할 리소스를 선택합니다.
    4. 규칙 추가를 클릭하여 컨테이너의 리소스 요청에 최소 또는 최대 범위를 하나 이상 설정합니다.
      • 최소 허용 메모리: 컨테이너에 항상 있어야 하는 최소 메모리 양(MiB)입니다.
      • 최소 허용 CPU: 컨테이너에 항상 있어야 하는 최소 CPU 양(mCPU)입니다.
      • 최대 허용 메모리: 컨테이너에 항상 있어야 하는 최대 메모리 양(MiB)입니다.
      • 최대 허용 CPU: 컨테이너에 항상 있어야 하는 최대 CPU 양(mCPU)입니다.
  6. 완료를 클릭합니다.

  7. 저장을 클릭합니다.

gcloud

리소스 요청을 자동으로 설정하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터를 사용해야 합니다. Autopilot 클러스터에는 이 기능이 기본적으로 사용 설정되어 있습니다.

  1. 표준 클러스터의 경우 클러스터에 수직형 포드 자동 확장을 사용 설정합니다.

    gcloud container clusters update CLUSTER_NAME --enable-vertical-pod-autoscaling
    

    CLUSTER_NAME을 클러스터 이름으로 바꿉니다.

  2. 다음 매니페스트를 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의 메모리를 요청하는 컨테이너가 하나 있습니다.

  3. 클러스터에 매니페스트를 적용합니다.

    kubectl create -f my-auto-deployment.yaml
    
  4. 실행 중인 포드를 나열합니다.

    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
    
  5. 다음 매니페스트를 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"을 사용하여 포드 생성 시에만 리소스 요청을 할당하도록 수직형 포드 자동 확장을 구성할 수도 있습니다.

  6. 클러스터에 매니페스트를 적용합니다.

    kubectl create -f my-vpa.yaml
    
  7. 몇 분 기다린 후에 실행 중인 포드를 다시 봅니다.

    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
    

    포드 이름이 변경되지 않은 경우에는 더 오래 기다렸다가 실행 중인 포드를 다시 확인하세요.

수직형 포드 자동 확장 처리에 대한 정보 보기

수직형 포드 자동 확장 처리에 대한 세부정보를 보려면 다음을 수행합니다.

  1. 실행 중인 포드 중 하나에 대한 자세한 정보를 가져옵니다.

    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임을 보여줍니다.

  2. 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의 메모리를 요청해야 한다고 지정합니다.
    • lowerBoundupperBound: 수직형 포드 자동 확장은 이러한 속성을 사용하여 포드를 삭제하고 새 포드로 대체할지 여부를 결정합니다. 포드의 요청 수가 하한보다 낮거나 상한보다 높으면 수직형 포드 자동 확장 처리는 포드를 삭제하고 대상 속성을 충족하는 포드로 바꿉니다.

특정 컨테이너 선택 해제

gcloud CLI 또는 Google Cloud 콘솔을 사용하여 수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제할 수 있습니다.

콘솔

수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제하려면 수직형 포드 자동 확장 기능이 사용 설정된 클러스터가 있어야 합니다. Autopilot 클러스터에는 기본적으로 수직형 포드 자동 확장 기능이 사용 설정되어 있습니다.

수직형 포드 자동 확장 사용 설정

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동

  2. 클러스터 목록에서 수정하려는 클러스터 이름을 클릭합니다.

  3. Automation 섹션에서 수직형 포드 자동 확장 옵션의 수정을 클릭합니다.

  4. 수직형 포드 자동 확장 사용 설정 체크박스를 선택합니다.

  5. 변경사항 저장을 클릭합니다.

수직형 포드 자동 확장 구성

  1. Google Cloud 콘솔의 워크로드 페이지로 이동합니다.

    워크로드로 이동

  2. 워크로드 목록에서 수직형 포드 자동 확장을 구성하려는 배포 이름을 클릭합니다.

  3. 작업 > 자동 확장 > 수직형 포드 자동 확장을 클릭합니다.

  4. 자동 확장 모드를 선택합니다.

    • 자동 모드: 수직형 포드 자동 확장은 포드 수명 동안 CPU 및 메모리 요청을 업데이트합니다.
    • 초기 모드: 수직형 포드 자동 확장은 포드 생성 시에만 리소스 요청을 할당하고 이후에 항목을 변경하지 않습니다.
  5. 정책 추가를 클릭합니다.

  6. 선택 해제할 컨테이너를 선택합니다.

  7. 컨테이너 모드 수정에서 끄기를 선택합니다.

  8. 완료를 클릭합니다.

  9. 저장을 클릭합니다.

gcloud

수직형 포드 자동 확장에서 특정 컨테이너를 선택 해제하려면 다음 단계를 수행하세요.

  1. 다음 매니페스트를 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에 대한 추천값을 사용 중지합니다.

  2. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f my-opt-vpa.yaml
    
  3. 다음 매니페스트를 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"]
    
  4. 클러스터에 매니페스트를 적용합니다.

    kubectl apply -f my-opt-deployment.yaml
    
  5. 잠시 후 수직형 포드 자동 확장 처리를 봅니다.

    kubectl get vpa my-opt-vpa --output yaml
    

    CPU와 메모리 요청의 추천값이 출력에 표시됩니다.

    ...
      recommendation:
        containerRecommendations:
        - containerName: my-opt-container
    ...
    

    이 출력에는 컨테이너 한 개에만 추천값이 있습니다. my-opt-sidecar에 대한 추천값은 없습니다.

    수직형 포드 자동 확장 처리는 선택 해제된 컨테이너의 리소스를 업데이트하지 않습니다. 몇 분 기다리면 포드가 다시 생성되지만 컨테이너 한 개에만 리소스 요청이 업데이트됩니다.

다음 단계