2.5. 수직 Pod 자동 스케일러를 사용하여 Pod 리소스 수준 자동 조정


OpenShift Container Platform VPA(Vertical Pod Autoscaler Operator)는 Pod의 컨테이너에 대한 과거 및 현재의 CPU 및 메모리 리소스를 자동으로 검토한 후 확인한 사용량 값에 따라 리소스 제한 및 요청을 업데이트할 수 있습니다. VPA는 다음 개체 유형을 포함하여 기본 제공 워크로드 개체와 연관된 프로젝트의 모든 포드를 업데이트하기 위해 개별 사용자 정의 리소스(CR)를 사용합니다.

  • Deployment
  • DeploymentConfig
  • StatefulSet
  • Job
  • DaemonSet
  • ReplicaSet
  • ReplicationController

VPA는 사용자 정의 리소스와 함께 수직 Pod 자동 확장 연산자 사용 에서 설명한 대로 Pod를 관리하는 특정 사용자 정의 리소스 개체를 업데이트할 수도 있습니다.

VPA를 사용하면 Pod의 최적 CPU 및 메모리 사용량을 이해하고 Pod의 라이프사이클 내내 Pod 리소스를 자동으로 유지 관리할 수 있습니다.

2.5.1. Vertical Pod Autoscaler Operator 정보

VPA(Vertical Pod Autoscaler Operator)는 API 리소스 및 CR(사용자 정의 리소스)로 구현됩니다. CR은 VPA 운영자가 프로젝트 내의 데몬 세트, 복제 컨트롤러 등과 같은 특정 워크로드 객체와 연관된 포드에 대해 수행해야 하는 작업을 결정합니다.

VPA 연산자는 세 가지 구성 요소로 구성되며, 각 구성 요소는 VPA 네임스페이스에 자체 포드를 갖습니다.

추천인
VPA 추천기는 현재 및 과거 리소스 소비를 모니터링하고 이 데이터를 기반으로 관련 워크로드 객체의 포드에 대한 최적의 CPU 및 메모리 리소스를 결정합니다.
업데이터
VPA 업데이터는 연관된 워크로드 객체의 포드에 올바른 리소스가 있는지 확인합니다. 리소스가 올바르면 업데이터는 아무런 조치도 취하지 않습니다. 리소스가 올바르지 않으면 업데이터는 포드를 삭제하여 컨트롤러가 업데이트된 요청으로 포드를 다시 생성할 수 있도록 합니다.
입학 관리자
VPA 입장 컨트롤러는 연관된 워크로드 객체의 각각의 새로운 포드에 대해 올바른 리소스 요청을 설정합니다. 포드가 새 것이든 VPA 업데이터 작업으로 인해 컨트롤러에 의해 다시 생성되었든 상관없습니다.

기본 추천 시스템을 사용하거나, 사용자 고유의 알고리즘에 따라 자동으로 크기를 조정하기 위해 사용자 고유의 대체 추천 시스템을 사용할 수 있습니다.

기본 추천자는 해당 포드에 있는 컨테이너의 과거 및 현재 CPU 및 메모리 사용량을 자동으로 계산하고 이 데이터를 사용하여 최적화된 리소스 제한과 요청을 결정하여 이러한 포드가 항상 효율적으로 작동하도록 보장합니다. 예를 들어, 기본 추천자는 사용하는 것보다 많은 리소스를 요청하는 포드에 대해서는 리소스를 줄이며, 충분한 리소스를 요청하지 않는 포드에 대해서는 리소스를 늘립니다.

그러면 VPA가 권장 사항과 맞지 않는 모든 포드를 하나씩 자동으로 삭제하므로 애플리케이션이 가동 중지 없이 요청을 계속 처리할 수 있습니다. 그런 다음 워크로드 객체는 원래 리소스 제한 및 요청으로 포드를 다시 배포합니다. VPA는 변경 승인 Webhook를 사용하여 Pod가 노드에 승인되기 전에 최적화된 리소스 제한 및 요청을 사용하여 Pod를 업데이트합니다. VPA에서 Pod를 삭제하지 않으려면 필요에 따라 VPA 리소스 제한 및 요청 및 수동으로 Pod를 업데이트할 수 있습니다.

참고

기본적으로 워크로드 객체는 VPA가 자동으로 포드를 삭제하도록 최소 두 개의 복제본을 지정해야 합니다. 이 최소값보다 적은 복제본을 지정한 워크로드 개체는 삭제되지 않습니다. 이러한 포드를 수동으로 삭제하면 워크로드 객체가 포드를 다시 배포할 때 VPA가 권장 사항을 사용하여 새 포드를 업데이트합니다. VPA 최소값 변경 에 표시된 대로 VerticalPodAutoscalerController 객체를 수정하여 이 최소값을 변경할 수 있습니다.

예를 들어 CPU의 50%를 사용하면서 10%만 요청하는 Pod가 있는 경우, VPA는 요청하는 것보다 더 많은 CPU를 사용하고 있는 것으로 판단하고 Pod를 삭제합니다. 복제본 세트와 같은 워크로드 오브젝트는 Pod를 재시작하고 VPA는 권장 리소스로 새 Pod를 업데이트합니다.

개발자의 경우 VPA를 사용하면 각 Pod에 적절한 리소스를 제공하도록 노드에 Pod를 예약하여 수요가 많은 기간에도 Pod가 유지되도록 할 수 있습니다.

관리자는 VPA를 사용하여 Pod에서 필요 이상의 CPU 리소스를 예약하지 않도록 클러스터 리소스를 더 효율적으로 활용할 수 있습니다. VPA는 워크로드에서 실제로 사용 중인 리소스를 모니터링하고 다른 워크로드에서 용량을 사용할 수 있도록 리소스 요구 사항을 조정합니다. 또한 VPA는 초기 컨테이너 구성에 지정된 제한 및 요청 간 비율도 유지합니다.

참고

VPA 실행을 중지하거나 클러스터에서 특정 VPA CR을 삭제하는 경우 VPA에서 이미 수정한 Pod에 대한 리소스 요청은 변경되지 않습니다. 그러나 새로운 포드는 VPA에서 이전에 권장한 리소스가 아닌 워크로드 객체에 정의된 리소스를 받습니다.

2.5.2. Vertical Pod Autoscaler Operator 설치

OpenShift Container Platform 웹 콘솔을 사용하여 VPA(Vertical Pod Autoscaler Operator)를 설치할 수 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator OperatorHub를 클릭합니다.
  2. 사용 가능한 Operator 목록에서 VerticalPodAutoscaler를 선택한 다음 설치를 클릭합니다.
  3. Operator 설치 페이지에서 Operator 권장 네임스페이스 옵션이 선택되어 있는지 확인합니다. 그러면 필수 openshift-vertical-pod-autoscaler 네임스페이스에 Operator가 설치됩니다. 해당 네임스페이스가 존재하지 않는 경우 자동으로 생성됩니다.
  4. 설치를 클릭합니다.

검증

  1. VPA Operator 구성 요소를 나열하여 설치를 확인합니다.

    1. 워크로드 Pod로 이동합니다.
    2. 드롭다운 메뉴에서 openshift-vertical-pod-autoscaler 프로젝트를 선택하고 Pod 4개가 실행되고 있는지 확인합니다.
    3. 워크로드 배포로 이동하여 배포 4개가 실행되고 있는지 확인합니다.
  2. 선택 사항: 다음 명령을 사용하여 OpenShift Container Platform CLI에서 설치를 확인하세요.

    $ oc get all -n openshift-vertical-pod-autoscaler
    Copy to Clipboard Toggle word wrap

    출력에는 4개의 포드와 4개의 배포가 표시됩니다.

    출력 예

    NAME                                                    READY   STATUS    RESTARTS   AGE
    pod/vertical-pod-autoscaler-operator-85b4569c47-2gmhc   1/1     Running   0          3m13s
    pod/vpa-admission-plugin-default-67644fc87f-xq7k9       1/1     Running   0          2m56s
    pod/vpa-recommender-default-7c54764b59-8gckt            1/1     Running   0          2m56s
    pod/vpa-updater-default-7f6cc87858-47vw9                1/1     Running   0          2m56s
    
    NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    service/vpa-webhook   ClusterIP   172.30.53.206   <none>        443/TCP   2m56s
    
    NAME                                               READY   UP-TO-DATE   AVAILABLE   AGE
    deployment.apps/vertical-pod-autoscaler-operator   1/1     1            1           3m13s
    deployment.apps/vpa-admission-plugin-default       1/1     1            1           2m56s
    deployment.apps/vpa-recommender-default            1/1     1            1           2m56s
    deployment.apps/vpa-updater-default                1/1     1            1           2m56s
    
    NAME                                                          DESIRED   CURRENT   READY   AGE
    replicaset.apps/vertical-pod-autoscaler-operator-85b4569c47   1         1         1       3m13s
    replicaset.apps/vpa-admission-plugin-default-67644fc87f       1         1         1       2m56s
    replicaset.apps/vpa-recommender-default-7c54764b59            1         1         1       2m56s
    replicaset.apps/vpa-updater-default-7f6cc87858                1         1         1       2m56s
    Copy to Clipboard Toggle word wrap

2.5.3. Vertical Pod Autoscaler Operator 구성 요소 이동

수직 Pod 자동 확장 연산자(VPA)와 각 구성 요소는 제어 평면 노드의 VPA 네임스페이스에 자체 Pod를 갖습니다. VPA 구독과 VerticalPodAutoscalerController CR에 노드 선택기를 추가하여 VPA Operator와 구성 요소 Pod를 인프라 또는 작업자 노드로 이동할 수 있습니다.

기본 라우터, 통합 컨테이너 이미지 레지스트리, 클러스터 메트릭 및 모니터링을 위한 구성 요소 등 인프라 구성 요소만 호스팅하기 위한 인프라 노드를 만들고 사용할 수 있습니다. 이러한 인프라 노드는 환경을 실행하는 데 필요한 총 서브스크립션 수에 포함되지 않습니다. 자세한 내용은 인프라 머신 세트 만들기를 참조하세요.

조직에 맞게 구성 요소를 동일한 노드로 이동하거나 별도의 노드로 이동할 수 있습니다.

다음 예에서는 VPA 포드를 제어 평면 노드에 기본적으로 배포하는 방법을 보여줍니다.

출력 예

NAME                                                READY   STATUS    RESTARTS   AGE     IP            NODE                  NOMINATED NODE   READINESS GATES
vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z   1/1     Running   0          7m59s   10.128.2.24   c416-tfsbj-master-1   <none>           <none>
vpa-admission-plugin-default-6cb78d6f8b-rpcrj       1/1     Running   0          5m37s   10.129.2.22   c416-tfsbj-master-1   <none>           <none>
vpa-recommender-default-66846bd94c-dsmpp            1/1     Running   0          5m37s   10.129.2.20   c416-tfsbj-master-0   <none>           <none>
vpa-updater-default-db8b58df-2nkvf                  1/1     Running   0          5m37s   10.129.2.21   c416-tfsbj-master-1   <none>           <none>
Copy to Clipboard Toggle word wrap

프로세스

  1. VPA Operator에 대한 구독 사용자 정의 리소스(CR)에 노드 선택기를 추가하여 VPA Operator 포드를 이동합니다.

    1. CR을 편집하세요:

      $ oc edit Subscription vertical-pod-autoscaler -n openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
    2. VPA Operator Pod를 설치하려는 노드의 노드 역할 레이블과 일치하는 노드 선택기를 추가합니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        labels:
          operators.coreos.com/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler: ""
        name: vertical-pod-autoscaler
      # ...
      spec:
        config:
          nodeSelector:
            node-role.kubernetes.io/<node_role>: "" 
      1
      Copy to Clipboard Toggle word wrap
      1 1
      VPA Operator Pod를 이동할 노드의 노드 역할을 지정합니다.
      참고

      인프라 노드에서 taint를 사용하는 경우 서브스크립션 CR에 허용 오차를 추가해야 합니다.

      예를 들면 다음과 같습니다.

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        labels:
          operators.coreos.com/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler: ""
        name: vertical-pod-autoscaler
      # ...
      spec:
        config:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations: 
      1
      
          - key: "node-role.kubernetes.io/infra"
            operator: "Exists"
            effect: "NoSchedule"
      Copy to Clipboard Toggle word wrap
      1
      VPA Operator Pod를 이동하려는 노드의 오염에 대한 허용 범위를 지정합니다.
  2. VerticalPodAutoscaler 사용자 정의 리소스(CR)에 노드 선택기를 추가하여 각 VPA 구성 요소를 이동합니다.

    1. CR을 편집하세요:

      $ oc edit VerticalPodAutoscalerController default -n openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
    2. VPA 구성 요소를 설치하려는 노드의 노드 역할 레이블과 일치하도록 노드 선택기를 추가합니다.

      apiVersion: autoscaling.openshift.io/v1
      kind: VerticalPodAutoscalerController
      metadata:
       name: default
        namespace: openshift-vertical-pod-autoscaler
      # ...
      spec:
        deploymentOverrides:
          admission:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/<node_role>: "" 
      1
      
          recommender:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/<node_role>: "" 
      2
      
          updater:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/<node_role>: "" 
      3
      Copy to Clipboard Toggle word wrap
      1
      선택 사항: VPA 입장 포드에 대한 노드 역할을 지정합니다.
      2
      선택 사항: VPA 추천 포드의 노드 역할을 지정합니다.
      3
      선택 사항: VPA 업데이터 포드의 노드 역할을 지정합니다.
      참고

      대상 노드가 오염을 사용하는 경우 VerticalPodAutoscalerController CR에 허용 범위를 추가해야 합니다.

      예를 들면 다음과 같습니다.

      apiVersion: autoscaling.openshift.io/v1
      kind: VerticalPodAutoscalerController
      metadata:
       name: default
        namespace: openshift-vertical-pod-autoscaler
      # ...
      spec:
        deploymentOverrides:
          admission:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            tolerations: 
      1
      
            - key: "my-example-node-taint-key"
              operator: "Exists"
              effect: "NoSchedule"
          recommender:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            tolerations: 
      2
      
            - key: "my-example-node-taint-key"
              operator: "Exists"
              effect: "NoSchedule"
          updater:
            container:
              resources: {}
            nodeSelector:
              node-role.kubernetes.io/worker: ""
            tolerations: 
      3
      
            - key: "my-example-node-taint-key"
              operator: "Exists"
              effect: "NoSchedule"
      Copy to Clipboard Toggle word wrap
      1
      포드를 설치하려는 노드의 오염에 대한 입장 컨트롤러 포드의 허용 범위를 지정합니다.
      2
      Pod를 설치하려는 노드의 오염에 대한 추천 Pod의 허용 범위를 지정합니다.
      3
      Pod를 설치하려는 노드의 오염에 대한 업데이터 Pod의 허용 범위를 지정합니다.

검증

  • 다음 명령을 사용하여 포드가 이동했는지 확인할 수 있습니다.

    $ oc get pods -n openshift-vertical-pod-autoscaler -o wide
    Copy to Clipboard Toggle word wrap

    포드는 더 이상 제어 평면 노드에 배포되지 않습니다. 아래 예제 출력에서 해당 노드는 이제 제어 평면 노드가 아니라 인프라 노드입니다.

    출력 예

    NAME                                                READY   STATUS    RESTARTS   AGE     IP            NODE                              NOMINATED NODE   READINESS GATES
    vertical-pod-autoscaler-operator-6c75fcc9cd-5pb6z   1/1     Running   0          7m59s   10.128.2.24   c416-tfsbj-infra-eastus3-2bndt   <none>           <none>
    vpa-admission-plugin-default-6cb78d6f8b-rpcrj       1/1     Running   0          5m37s   10.129.2.22   c416-tfsbj-infra-eastus1-lrgj8   <none>           <none>
    vpa-recommender-default-66846bd94c-dsmpp            1/1     Running   0          5m37s   10.129.2.20   c416-tfsbj-infra-eastus1-lrgj8   <none>           <none>
    vpa-updater-default-db8b58df-2nkvf                  1/1     Running   0          5m37s   10.129.2.21   c416-tfsbj-infra-eastus1-lrgj8   <none>           <none>
    Copy to Clipboard Toggle word wrap

2.5.4. Vertical Pod Autoscaler Operator 사용 정보

VPA(Vertical Pod Autoscaler Operator)를 사용하려면 클러스터에서 워크로드 오브젝트에 대한 VPA CR(사용자 정의 리소스)을 생성합니다. VPA는 해당 워크로드 오브젝트와 연결된 Pod에 가장 적합한 CPU 및 메모리 리소스를 확인하고 적용합니다. 배포, 상태 저장 세트, 작업, 데몬 세트, 복제본 세트 또는 복제 컨트롤러 워크로드 오브젝트에 VPA를 사용할 수 있습니다. VPA CR은 모니터링할 Pod와 동일한 프로젝트에 있어야 합니다.

VPA CR을 사용하여 워크로드 오브젝트를 연결하고 VPA가 작동하는 모드를 지정합니다.

  • AutoRecreate 모드는 Pod 수명 동안 VPA CPU 및 메모리 권장 사항을 자동으로 적용합니다. VPA는 권장 사항과 일치하지 않는 프로젝트의 모든 Pod를 삭제합니다. 워크로드 오브젝트에서 재배포하면 VPA는 새 Pod를 권장 사항으로 업데이트합니다.
  • Initial 모드는 Pod 생성 시에만 VPA 권장 사항을 자동으로 적용합니다.
  • Off 모드는 권장되는 리소스 제한 및 요청만 제공하며 권장 사항을 수동으로 적용할 수 있습니다. Off 모드에서는 포드가 업데이트되지 않습니다.

CR을 사용하여 VPA 평가 및 업데이트에서 특정 컨테이너를 옵트아웃할 수도 있습니다.

예를 들어 Pod에 다음과 같은 제한 및 요청이 있습니다.

resources:
  limits:
    cpu: 1
    memory: 500Mi
  requests:
    cpu: 500m
    memory: 100Mi
Copy to Clipboard Toggle word wrap

자동 으로 설정된 VPA를 생성한 후 VPA는 리소스 사용량을 학습하고 Pod를 삭제합니다. 재배포되면 Pod는 새 리소스 제한 및 요청을 사용합니다.

resources:
  limits:
    cpu: 50m
    memory: 1250Mi
  requests:
    cpu: 25m
    memory: 262144k
Copy to Clipboard Toggle word wrap

다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.

$ oc get vpa <vpa-name> --output yaml
Copy to Clipboard Toggle word wrap

몇 분 후 출력에는 CPU 및 메모리 요청에 대한 권장 사항이 표시되며 다음과 유사합니다.

출력 예

...
status:
...
  recommendation:
    containerRecommendations:
    - containerName: frontend
      lowerBound:
        cpu: 25m
        memory: 262144k
      target:
        cpu: 25m
        memory: 262144k
      uncappedTarget:
        cpu: 25m
        memory: 262144k
      upperBound:
        cpu: 262m
        memory: "274357142"
    - containerName: backend
      lowerBound:
        cpu: 12m
        memory: 131072k
      target:
        cpu: 12m
        memory: 131072k
      uncappedTarget:
        cpu: 12m
        memory: 131072k
      upperBound:
        cpu: 476m
        memory: "498558823"
...
Copy to Clipboard Toggle word wrap

출력에는 권장 리소스(target), 최소 권장 리소스(lowerBound), 최고 권장 리소스(upperBound), 최신 리소스 권장 사항(uncappedTarget)이 표시됩니다.

VPA는 lowerBoundupperBound 값을 사용하여 Pod를 업데이트해야 하는지 확인합니다. Pod에 lowerBound 값보다 작거나 upperBound 값을 초과하는 리소스 요청이 있는 경우 VPA는 Pod를 종료하고 target 값을 사용하여 Pod를 다시 생성합니다.

2.5.4.1. VPA 최소값 변경

기본적으로 워크로드 객체는 VPA가 자동으로 포드를 삭제하고 업데이트할 수 있도록 최소 두 개의 복제본을 지정해야 합니다. 결과적으로 두 개 미만의 복제본을 지정하는 작업 부하 객체는 VPA에서 자동으로 처리되지 않습니다. VPA 외부의 어떤 프로세스에 의해 포드가 다시 시작되면 VPA는 이러한 워크로드 객체에서 새로운 포드를 업데이트합니다. VerticalPodAutoscalerController 사용자 정의 리소스(CR)에서 minReplicas 매개변수를 수정하여 이 클러스터 전체 최소값을 변경할 수 있습니다.

예를 들어 minReplicas를 3 으로 설정하면 VPA는 3개 미만의 복제본을 지정하는 워크로드 개체에 대한 포드를 삭제 및 업데이트하지 않습니다.

참고

minReplicas를 1 로 설정하면 VPA는 복제본을 하나만 지정하는 워크로드 개체에 대한 유일한 Pod를 삭제할 수 있습니다. VPA가 리소스를 조정하기 위해 포드를 삭제할 때마다 작업 부하가 가동 중지 시간을 허용할 수 있는 경우에만 이 설정을 단일 복제본 개체에 사용해야 합니다. 단일 복제본 객체로 인한 원치 않는 가동 중지 시간을 방지하려면 VPA CR을 podUpdatePolicy를 Initial 로 설정하여 VPA 외부의 프로세스에 의해 다시 시작될 때만 자동으로 pod를 업데이트하거나 Off로 설정하여 애플리케이션에 적합한 시간에 수동으로 pod를 업데이트합니다.

예제 VerticalPodAutoscalerController 객체

apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
  creationTimestamp: "2021-04-21T19:29:49Z"
  generation: 2
  name: default
  namespace: openshift-vertical-pod-autoscaler
  resourceVersion: "142172"
  uid: 180e17e9-03cc-427f-9955-3b4d7aeb2d59
spec:
  minReplicas: 3 
1

  podMinCPUMillicores: 25
  podMinMemoryMb: 250
  recommendationOnly: false
  safetyMarginFraction: 0.15
Copy to Clipboard Toggle word wrap

1
VPA가 작업할 수 있는 워크로드 객체의 최소 복제본 수를 지정합니다. 복제본이 최소값보다 적은 개체는 VPA에 의해 자동으로 삭제되지 않습니다.

2.5.4.2. VPA 권장 사항 자동 적용

VPA를 사용하여 Pod를 자동으로 업데이트하려면 updateModeAuto 또는 Recreate로 설정하여 특정 워크로드 오브젝트에 대한 VPA CR을 생성합니다.

워크로드 오브젝트에 대한 Pod가 생성되면 VPA에서 컨테이너를 지속적으로 모니터링하여 CPU 및 메모리 요구 사항을 분석합니다. VPA는 CPU 및 메모리에 대한 VPA 권장 사항을 충족하지 않는 모든 Pod를 삭제합니다. 재배포되면 Pod는 VPA 권장 사항에 따라 새 리소스 제한 및 요청을 사용하여 애플리케이션에 대해 설정된 모든 Pod 중단 예산을 준수합니다. 권장 사항은 참조를 위해 VPA CR의 status 필드에 추가되어 있습니다.

참고

기본적으로 워크로드 객체는 VPA가 자동으로 포드를 삭제하도록 최소 두 개의 복제본을 지정해야 합니다. 이 최소값보다 적은 복제본을 지정한 워크로드 개체는 삭제되지 않습니다. 이러한 포드를 수동으로 삭제하면 워크로드 객체가 포드를 다시 배포할 때 VPA가 권장 사항을 사용하여 새 포드를 업데이트합니다. VPA 최소값 변경 에 표시된 대로 VerticalPodAutoscalerController 객체를 수정하여 이 최소값을 변경할 수 있습니다.

Auto 모드 VPA CR의 예

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Auto" 
3
Copy to Clipboard Toggle word wrap

1
이 VPA CR에서 관리할 워크로드 오브젝트의 유형입니다.
2
이 VPA CR에서 관리할 워크로드 오브젝트의 이름입니다.
3
모드를 Auto 또는 Recreate로 설정합니다.
  • Auto. VPA는 Pod 생성 시 리소스 요청을 할당하고 요청된 리소스가 새 권장 사항과 크게 다른 경우 기존 Pod를 종료하여 업데이트합니다.
  • Recreate. VPA는 Pod 생성 시 리소스 요청을 할당하고 요청된 리소스가 새 권장 사항과 크게 다른 경우 기존 Pod를 종료하여 업데이트합니다. 이 모드는 리소스 요청이 변경될 때마다 Pod를 재시작해야 하는 경우에만 사용해야 합니다.
참고

VPA가 리소스에 대한 권장 사항을 결정하고 권장된 리소스를 새로운 Pod에 적용하려면 먼저 운영 Pod가 존재하고 프로젝트에서 실행 중이어야 합니다.

CPU, 메모리 등 워크로드 리소스 사용량이 일관적이면 VPA는 몇 분 안에 리소스에 대한 권장 사항을 결정할 수 있습니다. 워크로드의 리소스 사용량이 일관되지 않으면 VPA는 정확한 권장 사항을 제시하기 위해 다양한 리소스 사용 간격으로 메트릭을 수집해야 합니다.

2.5.4.3. Pod 생성에 VPA 권장 사항 자동 적용

VPA를 사용하여 Pod를 처음 배포할 때만 권장 리소스를 적용하려면 updateModeInitial로 설정하여 특정 워크로드 오브젝트에 대한 VPA CR을 생성합니다.

그런 다음 VPA 권장 사항을 사용하려는 워크로드 오브젝트와 연결된 모든 Pod를 수동으로 삭제합니다. Initial 모드에서 VPA는 새 리소스 권장 사항을 확인할 때 Pod를 삭제하지 않고 Pod을 업데이트하지도 않습니다.

Initial 모드 VPA CR의 예

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Initial" 
3
Copy to Clipboard Toggle word wrap

1
이 VPA CR에서 관리할 워크로드 오브젝트의 유형입니다.
2
이 VPA CR에서 관리할 워크로드 오브젝트의 이름입니다.
3
모드를 Initial로 설정합니다. Pod가 생성되면 VPA에서 리소스를 할당하고 Pod 수명 동안 리소스를 변경하지 않습니다.
참고

VPA가 권장 리소스를 결정하고 권장 사항을 새로운 Pod에 적용하려면 먼저 운영 Pod가 존재하고 프로젝트에서 실행 중이어야 합니다.

VPA에서 가장 정확한 권장 사항을 얻으려면 포드가 실행되고 VPA가 안정화될 때까지 최소 8일 동안 기다리세요.

2.5.4.4. VPA 권장 사항 수동 적용

VPA를 사용하여 권장되는 CPU 및 메모리 값만 확인하려면 updateMode를 Off 로 설정하여 특정 워크로드 개체에 대한 VPA CR을 만듭니다.

해당 워크로드 오브젝트에 대한 Pod가 생성되면 VPA는 컨테이너의 CPU 및 메모리 요구 사항을 분석하고 VPA CR의 status 필드에 해당 권장 사항을 기록합니다. VPA는 새 리소스 권장 사항을 확인할 때 Pod를 업데이트하지 않습니다.

Off 모드 VPA CR의 예

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Off" 
3
Copy to Clipboard Toggle word wrap

1
이 VPA CR에서 관리할 워크로드 오브젝트의 유형입니다.
2
이 VPA CR에서 관리할 워크로드 오브젝트의 이름입니다.
3
모드를 Off로 설정합니다.

다음 명령을 사용하여 권장 사항을 볼 수 있습니다.

$ oc get vpa <vpa-name> --output yaml
Copy to Clipboard Toggle word wrap

권장 사항에 따라 워크로드 오브젝트를 편집하여 CPU 및 메모리 요청을 추가한 다음 권장 리소스를 사용하여 Pod를 삭제하고 재배포할 수 있습니다.

참고

VPA가 권장 리소스를 결정하고 권장 사항을 새로운 Pod에 적용하려면 먼저 운영 Pod가 존재하고 프로젝트에서 실행 중이어야 합니다.

VPA에서 가장 정확한 권장 사항을 얻으려면 포드가 실행되고 VPA가 안정화될 때까지 최소 8일 동안 기다리세요.

2.5.4.5. VPA 권장 사항 적용에서 컨테이너 제외

워크로드 오브젝트에 컨테이너가 여러 개 있고 VPA에서 모든 컨테이너를 평가하고 해당 컨테이너에 대해 작동하지 않도록 하려면 특정 워크로드 오브젝트에 대한 VPA CR을 생성하고 resourcePolicy를 추가하여 특정 컨테이너를 옵트아웃합니다.

VPA에서 권장 리소스를 사용하여 Pod를 업데이트하면 resourcePolicy가 포함된 모든 컨테이너가 업데이트되지 않으며 VPA는 Pod의 해당 컨테이너에 대한 권장 사항을 제공하지 않습니다.

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-recommender
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment 
1

    name:       frontend 
2

  updatePolicy:
    updateMode: "Auto" 
3

  resourcePolicy: 
4

    containerPolicies:
    - containerName: my-opt-sidecar
      mode: "Off"
Copy to Clipboard Toggle word wrap
1
이 VPA CR에서 관리할 워크로드 오브젝트의 유형입니다.
2
이 VPA CR에서 관리할 워크로드 오브젝트의 이름입니다.
3
모드를 자동 , 재생성 , 초기 설정 또는 끄기 로 설정합니다. Recreate 모드는 리소스 요청이 변경될 때마다 Pod를 재시작해야 하는 경우에만 사용해야 합니다.
4
VPA에서 업데이트하지 않으려는 컨테이너를 지정하고 모드를 Off 로 설정합니다.

예를 들면 Pod에 다음과 같이 리소스 요청 및 제한이 동일한 두 개의 컨테이너가 있습니다.

# ...
spec:
  containers:
  - name: frontend
    resources:
      limits:
        cpu: 1
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
  - name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
# ...
Copy to Clipboard Toggle word wrap

backend 컨테이너를 옵트아웃으로 설정하여 VPA CR을 시작하면 VPA에서 Pod를 종료한 후 frontend 컨테이너에만 적용되는 권장 리소스를 사용하여 Pod를 다시 생성합니다.

...
spec:
  containers:
    name: frontend
    resources:
      limits:
        cpu: 50m
        memory: 1250Mi
      requests:
        cpu: 25m
        memory: 262144k
...
    name: backend
    resources:
      limits:
        cpu: "1"
        memory: 500Mi
      requests:
        cpu: 500m
        memory: 100Mi
...
Copy to Clipboard Toggle word wrap

2.5.4.6. VPA 운영자 성능 튜닝

클러스터 관리자는 Vertical Pod Autoscaler Operator(VPA)의 성능을 조정하여 VPA가 Kubernetes API 서버에 요청하는 속도를 제한하고 VPA 추천기, 업데이터 및 승인 컨트롤러 구성 요소 Pod에 대한 CPU 및 메모리 리소스를 지정할 수 있습니다.

또한 VPA 사용자 정의 리소스(CR)에서 관리하는 작업 부하만 모니터링하도록 VPA 운영자를 구성할 수 있습니다. 기본적으로 VPA 운영자는 클러스터의 모든 작업 부하를 모니터링합니다. 이를 통해 VPA 운영자는 모든 작업 부하에 대해 8일 분의 과거 데이터를 수집하고 저장할 수 있으며, 작업 부하에 대한 새로운 VPA CR이 생성되는 경우 운영자가 이를 사용할 수 있습니다. 그러나 이로 인해 VPA 운영자가 상당한 CPU와 메모리를 사용하게 되어 운영자가 실패할 수 있으며, 특히 대규모 클러스터에서는 더욱 그렇습니다. VPA CR이 있는 워크로드만 모니터링하도록 VPA Operator를 구성하면 CPU 및 메모리 리소스를 절약할 수 있습니다. 한 가지 단점은 이미 실행 중인 작업 부하가 있고 해당 작업 부하를 관리하기 위해 VPA CR을 생성하는 경우 VPA 운영자에게 해당 작업 부하에 대한 기록 데이터가 없다는 것입니다. 결과적으로, 초기 권장 사항은 작업 부하가 어느 정도 실행된 후에 제공되는 권장 사항만큼 유용하지 않습니다.

이러한 튜닝을 통해 VPA가 최대 효율로 작동하는 데 충분한 리소스를 확보하고, 제한을 방지하며, 포드 수용이 지연되는 것을 방지할 수 있습니다.

VerticalPodAutoscalerController 사용자 정의 리소스(CR)를 편집하여 VPA 구성 요소에서 다음 튜닝을 수행할 수 있습니다.

  • 제한 및 포드 승인 지연을 방지하려면 kube-api-qpskube-api-burst 매개변수를 사용하여 Kubernetes API 서버의 VPA 요청에 대한 초당 쿼리 수(QPS)와 버스트 속도를 설정합니다.
  • 충분한 CPU와 메모리를 확보하려면 표준 CPU메모리 리소스 요청을 사용하여 VPA 구성 요소 포드에 대한 CPU 및 메모리 요청을 설정합니다.
  • VPA CR에서 관리하는 작업 부하만 모니터링하도록 VPA Operator를 구성하려면 추천 구성 요소에 대해 memory-saver 매개변수를 true 로 설정합니다.

각 VPA 구성 요소에 대해 설정할 수 있는 리소스 및 속도 제한에 대한 지침은 다음 표에서 클러스터 크기와 기타 요소에 따라 권장되는 기준 값을 제공합니다.

중요

이러한 권장 값은 실제 클러스터를 반드시 대표한다고 할 수는 없지만 Red Hat 내부에서 실시한 클러스터 테스트에서 파생되었습니다. 프로덕션 클러스터를 구성하기 전에 비프로덕션 클러스터에서 이러한 값을 테스트해야 합니다.

Expand
표 2.2. 클러스터 내 컨테이너의 요청
Component1~500개 컨테이너500~1000개의 컨테이너1000~2000개의 컨테이너2000~4000개의 컨테이너4000개 이상의 컨테이너
 

CPU

메모리

CPU

메모리

CPU

메모리

CPU

메모리

CPU

메모리

허용

25m

50Mi

25m

75Mi

40m

150Mi

75m

260Mi

(0.03c)/2 + 10 [1]

(0.1c)/2 + 50 [1]

추천인

25m

100Mi

50m

160Mi

75m

275Mi

120m

420Mi

(0.05c)/2 + 50 [1]

(0.15c)/2 + 120 [1]

업데이터

25m

100Mi

50m

220Mi

80m

350Mi

150m

500Mi

(0.07c)/2 + 20 [1]

(0.15c)/2 + 200 [1]

  1. c는 클러스터에 있는 컨테이너의 수입니다.
참고

컨테이너의 메모리 제한을 표에 나와 있는 권장 요청량의 최소 두 배로 설정하는 것이 좋습니다. 하지만 CPU는 압축 가능한 리소스이므로 컨테이너에 CPU 제한을 설정하면 VPA가 제한될 수 있습니다. 따라서 컨테이너에 CPU 제한을 설정하지 않는 것이 좋습니다.

Expand
표 2.3. 클러스터 내 VPA별 속도 제한
Component1 - 150 VPA151~500 VPA501-2000 VPA2001-4000 VPA
 

QPS 제한 [1]

버스트 [2]

QPS 한도

터지다

QPS 한도

터지다

QPS 한도

터지다

추천인

5

10

30

60

60

120

120

240

업데이터

5

10

30

60

60

120

120

240

  1. QPS는 Kubernetes API 서버에 요청을 할 때 초당 쿼리 수(QPS) 제한을 지정합니다. 업데이터 및 추천 포드의 기본값은 5.0 입니다.
  2. Burst는 Kubernetes API 서버에 요청을 할 때 버스트 한도를 지정합니다. 업데이터 및 추천 포드의 기본값은 10.0 입니다.
참고

클러스터에 VPA가 4,000개가 넘는 경우 표에 있는 값으로 성능 튜닝을 시작한 다음 원하는 추천 및 업데이터 지연 시간과 성능을 얻을 때까지 값을 천천히 늘리는 것이 좋습니다. VPA 구성 요소에서 API 서버로 너무 많은 API 요청이 전송되는 경우 QPS와 Burst가 증가하면 클러스터 상태에 영향을 미치고 Kubernetes API 서버 속도가 느려질 수 있으므로 이러한 값은 천천히 조정해야 합니다.

다음 VPA 컨트롤러 CR 예제는 1,000~2,000개의 컨테이너와 26~50개의 포드 생성 급증이 있는 클러스터를 위한 것입니다. CR은 다음 값을 설정합니다.

  • 세 개의 VPA 구성 요소 모두에 대한 컨테이너 메모리 및 CPU 요청
  • 세 개의 VPA 구성 요소 모두에 대한 컨테이너 메모리 제한
  • 세 가지 VPA 구성 요소 모두에 대한 QPS 및 버스트 속도
  • VPA 추천 구성요소에 대한 메모리 절약 매개변수를 true 로 설정합니다.

예제 VerticalPodAutoscalerController CR

apiVersion: autoscaling.openshift.io/v1
kind: VerticalPodAutoscalerController
metadata:
  name: default
  namespace: openshift-vertical-pod-autoscaler
spec:
  deploymentOverrides:
    admission: 
1

      container:
        args: 
2

          - '--kube-api-qps=50.0'
          - '--kube-api-burst=100.0'
        resources:
          requests: 
3

            cpu: 40m
            memory: 150Mi
          limits:
            memory: 300Mi
    recommender: 
4

      container:
        args:
          - '--kube-api-qps=60.0'
          - '--kube-api-burst=120.0'
          - '--memory-saver=true' 
5

        resources:
          requests:
            cpu: 75m
            memory: 275Mi
          limits:
            memory: 550Mi
    updater: 
6

      container:
        args:
          - '--kube-api-qps=60.0'
          - '--kube-api-burst=120.0'
        resources:
          requests:
            cpu: 80m
            memory: 350M
          limits:
            memory: 700Mi
  minReplicas: 2
  podMinCPUMillicores: 25
  podMinMemoryMb: 250
  recommendationOnly: false
  safetyMarginFraction: 0.15
Copy to Clipboard Toggle word wrap

1
VPA 입장 컨트롤러에 대한 튜닝 매개변수를 지정합니다.
2
VPA 입장 컨트롤러에 대한 API QPS 및 버스트 속도를 지정합니다.
  • kube-api-qps : Kubernetes API 서버에 요청할 때 초당 쿼리 수(QPS) 제한을 지정합니다. 기본값은 5.0 입니다.
  • kube-api-burst : Kubernetes API 서버에 요청할 때 버스트 제한을 지정합니다. 기본값은 10.0 입니다.
3
VPA 입장 컨트롤러 포드에 대한 리소스 요청 및 제한을 지정합니다.
4
VPA 추천에 대한 튜닝 매개변수를 지정합니다.
5
VPA 운영자가 VPA CR이 있는 작업 부하만 모니터링하도록 지정합니다. 기본값은 false입니다.
6
VPA 업데이터에 대한 튜닝 매개변수를 지정합니다.

각 VPA 구성 요소 포드에 설정이 적용되었는지 확인할 수 있습니다.

업데이터 포드 예시

apiVersion: v1
kind: Pod
metadata:
  name: vpa-updater-default-d65ffb9dc-hgw44
  namespace: openshift-vertical-pod-autoscaler
# ...
spec:
  containers:
  - args:
    - --logtostderr
    - --v=1
    - --min-replicas=2
    - --kube-api-qps=60.0
    - --kube-api-burst=120.0
# ...
    resources:
      requests:
        cpu: 80m
        memory: 350M
# ...
Copy to Clipboard Toggle word wrap

예시 입장 컨트롤러 포드

apiVersion: v1
kind: Pod
metadata:
  name: vpa-admission-plugin-default-756999448c-l7tsd
  namespace: openshift-vertical-pod-autoscaler
# ...
spec:
  containers:
  - args:
    - --logtostderr
    - --v=1
    - --tls-cert-file=/data/tls-certs/tls.crt
    - --tls-private-key=/data/tls-certs/tls.key
    - --client-ca-file=/data/tls-ca-certs/service-ca.crt
    - --webhook-timeout-seconds=10
    - --kube-api-qps=50.0
    - --kube-api-burst=100.0
# ...
    resources:
      requests:
        cpu: 40m
        memory: 150Mi
# ...
Copy to Clipboard Toggle word wrap

추천자 포드 예시

apiVersion: v1
kind: Pod
metadata:
  name: vpa-recommender-default-74c979dbbc-znrd2
  namespace: openshift-vertical-pod-autoscaler
# ...
spec:
  containers:
  - args:
    - --logtostderr
    - --v=1
    - --recommendation-margin-fraction=0.15
    - --pod-recommendation-min-cpu-millicores=25
    - --pod-recommendation-min-memory-mb=250
    - --kube-api-qps=60.0
    - --kube-api-burst=120.0
    - --memory-saver=true
# ...
    resources:
      requests:
        cpu: 75m
        memory: 275Mi
# ...
Copy to Clipboard Toggle word wrap

2.5.4.7. OOM 이벤트 이후 사용자 정의 메모리 증가

클러스터에서 OOM(메모리 부족) 이벤트가 발생하면 Vertical Pod Autoscaler Operator(VPA)는 OOM 이벤트 동안 관찰된 메모리 소비량과 지정된 승수 값을 기반으로 메모리 권장 사항을 늘려 향후 메모리 부족으로 인한 충돌을 방지합니다.

권장 사항은 두 가지 계산 중 더 높은 값을 선택합니다. OOM 이벤트가 발생했을 때 포드에서 사용 중인 메모리에 지정된 바이트 수 또는 지정된 백분율을 곱한 값입니다. 계산은 다음 공식으로 표현됩니다.

recommendation = max(memory-usage-in-oom-event + oom-min-bump-up-bytes, memory-usage-in-oom-event * oom-bump-up-ratio)
Copy to Clipboard Toggle word wrap

추천 포드에서 다음 값을 지정하여 메모리 증가를 구성할 수 있습니다.

  • oom-min-bump-up-bytes . 이 값은 바이트 단위로 OOM 이벤트가 발생한 후 메모리에서 발생하는 특정 증가량을 나타냅니다. 기본값은 100MiB 입니다.
  • 움-범프-업-비율 . 이 값은 OOM 이벤트가 발생했을 때 메모리가 증가한 백분율입니다. 기본값은 1.2 입니다.

예를 들어, OOM 이벤트 중에 포드 메모리 사용량이 100MB이고 oom-min-bump-up-bytes가 150MB로 설정되어 있고 oom-min-bump-ratio가 1.2인 경우, OOM 이벤트 후에 VPA는 해당 포드에 대한 메모리 요청을 120MB(100MB * 1.2)보다 높은 150MB로 늘리는 것을 권장합니다.

추천자 배포 객체 예시

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vpa-recommender-default
  namespace: openshift-vertical-pod-autoscaler
# ...
spec:
# ...
  template:
# ...
    spec
      containers:
      - name: recommender
        args:
        - --oom-bump-up-ratio=2.0
        - --oom-min-bump-up-bytes=524288000
# ...
Copy to Clipboard Toggle word wrap

추가 리소스

2.5.4.8. 대체 추천자 사용

자체 알고리즘에 따라 자동 크기 조정이 가능한 자체 추천 시스템을 사용할 수 있습니다. 대체 추천자를 지정하지 않으면 OpenShift Container Platform은 과거 사용량을 기반으로 CPU 및 메모리 요청을 제안하는 기본 추천자를 사용합니다. 모든 유형의 워크로드에 적용되는 보편적인 추천 정책은 없으므로 특정 워크로드에 대해 서로 다른 추천 도구를 만들고 배포하는 것이 좋습니다.

예를 들어, 컨테이너가 특정 리소스 동작(예: 모니터링 애플리케이션에서 사용되는 사용량 급증과 유휴 상태를 번갈아 가며 반복하는 패턴)을 보일 때 기본 추천기는 향후 리소스 사용량을 정확하게 예측하지 못할 수 있습니다. 이러한 사용 동작으로 기본 추천기를 사용하면 애플리케이션에 심각한 과도한 프로비저닝과 OOM(메모리 부족)이 발생할 수 있습니다.

참고

추천자를 만드는 방법에 대한 지침은 이 문서의 범위를 벗어납니다.

프로세스

포드에 대한 대체 추천자를 사용하려면:

  1. 대체 추천자에 대한 서비스 계정을 만들고 해당 서비스 계정을 필요한 클러스터 역할에 연결합니다.

    apiVersion: v1 
    1
    
    kind: ServiceAccount
    metadata:
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    2
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-metrics-reader
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:metrics-reader
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    3
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-vpa-actor
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:vpa-actor
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    ---
    apiVersion: rbac.authorization.k8s.io/v1 
    4
    
    kind: ClusterRoleBinding
    metadata:
      name: system:example-vpa-target-reader-binding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: system:vpa-target-reader
    subjects:
    - kind: ServiceAccount
      name: alt-vpa-recommender-sa
      namespace: <namespace_name>
    Copy to Clipboard Toggle word wrap
    1
    추천자가 배포된 네임스페이스에서 추천자에 대한 서비스 계정을 생성합니다.
    2
    추천 서비스 계정을 metrics-reader 역할에 연결합니다. 추천자가 배포될 네임스페이스를 지정합니다.
    3
    추천 서비스 계정을 vpa-actor 역할에 연결합니다. 추천자가 배포될 네임스페이스를 지정합니다.
    4
    추천 서비스 계정을 vpa-target-reader 역할에 연결합니다. 추천자가 배포될 네임스페이스를 지정합니다.
  2. 클러스터에 대체 추천자를 추가하려면 다음과 유사한 배포 객체를 만듭니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: alt-vpa-recommender
      namespace: <namespace_name>
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: alt-vpa-recommender
      template:
        metadata:
          labels:
            app: alt-vpa-recommender
        spec:
          containers: 
    1
    
          - name: recommender
            image: quay.io/example/alt-recommender:latest 
    2
    
            imagePullPolicy: Always
            resources:
              limits:
                cpu: 200m
                memory: 1000Mi
              requests:
                cpu: 50m
                memory: 500Mi
            ports:
            - name: prometheus
              containerPort: 8942
            securityContext:
              allowPrivilegeEscalation: false
              capabilities:
                drop:
                  - ALL
              seccompProfile:
                type: RuntimeDefault
          serviceAccountName: alt-vpa-recommender-sa 
    3
    
          securityContext:
            runAsNonRoot: true
    Copy to Clipboard Toggle word wrap
    1
    대체 추천인에 대한 컨테이너를 만듭니다.
    2
    추천인 이미지를 지정합니다.
    3
    추천자를 위해 생성한 서비스 계정을 연결합니다.

    동일한 네임스페이스에서 대체 추천자에 대한 새로운 포드가 생성됩니다.

    $ oc get pods
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                        READY   STATUS    RESTARTS   AGE
    frontend-845d5478d-558zf                    1/1     Running   0          4m25s
    frontend-845d5478d-7z9gx                    1/1     Running   0          4m25s
    frontend-845d5478d-b7l4j                    1/1     Running   0          4m25s
    vpa-alt-recommender-55878867f9-6tp5v        1/1     Running   0          9s
    Copy to Clipboard Toggle word wrap

  3. 대체 추천 배포 개체의 이름을 포함하는 VPA CR을 구성합니다.

    대체 추천자를 포함하는 VPA CR 예시

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-recommender
      namespace: <namespace_name>
    spec:
      recommenders:
        - name: alt-vpa-recommender 
    1
    
      targetRef:
        apiVersion: "apps/v1"
        kind:       Deployment 
    2
    
        name:       frontend
    Copy to Clipboard Toggle word wrap

    1
    대체 추천 배포의 이름을 지정합니다.
    2
    이 VPA가 관리할 기존 작업 부하 개체의 이름을 지정합니다.

2.5.5. Vertical Pod Autoscaler Operator 사용

VPA(Vertical Pod Autoscaler Operator) CR(사용자 정의 리소스)을 생성하여 VPA를 사용할 수 있습니다. CR은 VPA에서 해당 Pod에 수행할 작업을 분석하고 결정해야 하는 Pod를 나타냅니다.

VPA를 사용하면 배포나 상태 집합과 같은 기본 제공 리소스와 Pod를 관리하는 사용자 지정 리소스를 확장할 수 있습니다. 사용자 지정 리소스와 함께 VPA를 사용하는 방법에 대한 자세한 내용은 "사용자 지정 리소스와 함께 Vertical Pod Autoscaler Operator 사용"을 참조하세요.

사전 요구 사항

  • 자동 크기 조정을 원하는 작업 부하 개체가 있어야 합니다.
  • 대체 추천자를 사용하려면 해당 추천자를 포함하는 배포가 있어야 합니다.

프로세스

특정 워크로드 오브젝트에 대한 VPA CR을 생성하려면 다음을 수행합니다.

  1. 스케일링할 워크로드 오브젝트가 있는 프로젝트로 변경합니다.

    1. VPA CR YAML 파일을 생성합니다.

      apiVersion: autoscaling.k8s.io/v1
      kind: VerticalPodAutoscaler
      metadata:
        name: vpa-recommender
      spec:
        targetRef:
          apiVersion: "apps/v1"
          kind:       Deployment 
      1
      
          name:       frontend 
      2
      
        updatePolicy:
          updateMode: "Auto" 
      3
      
        resourcePolicy: 
      4
      
          containerPolicies:
          - containerName: my-opt-sidecar
            mode: "Off"
        recommenders: 
      5
      
          - name: my-recommender
      Copy to Clipboard Toggle word wrap
      1
      이 VPA에서 관리할 워크로드 오브젝트 유형(Deployment, StatefulSet, Job, DaemonSet, ReplicaSet 또는 ReplicationController)을 지정합니다.
      2
      이 VPA에서 관리할 기존 워크로드 오브젝트의 이름을 지정합니다.
      3
      다음과 같이 VPA 모드를 지정합니다.
      • 자동을 선택하면 컨트롤러와 연결된 포드에 권장 리소스가 자동으로 적용됩니다. VPA는 기존 Pod를 종료하고 권장 리소스 제한 및 요청을 사용하여 새 Pod를 생성합니다.
      • 워크로드 객체와 연관된 포드에 권장 리소스를 자동으로 적용하도록 다시 생성합니다 . VPA는 기존 Pod를 종료하고 권장 리소스 제한 및 요청을 사용하여 새 Pod를 생성합니다. Recreate 모드는 리소스 요청이 변경될 때마다 Pod를 재시작해야 하는 경우에만 사용해야 합니다.
      • 워크로드 객체와 연관된 포드가 생성될 때 권장 리소스를 자동으로 적용합니다. VPA는 새 리소스 권장 사항을 확인할 때 Pod를 업데이트하지 않습니다.
      • 워크로드 객체와 연관된 포드에 대한 리소스 권장 사항만 생성 합니다 . VPA는 새 리소스 권장 사항을 확인할 때 Pod를 업데이트하지 않고 해당 권장 사항을 새 Pod에 적용하지도 않습니다.
      4
      선택 사항: 옵트아웃할 컨테이너를 지정하고 모드를 Off로 설정합니다.
      5
      선택 사항: 대체 추천인을 지정하세요.
    2. VPA CR을 생성합니다.

      $ oc create -f <file-name>.yaml
      Copy to Clipboard Toggle word wrap

      잠시 후 VPA는 워크로드 오브젝트와 연결된 Pod에서 컨테이너의 리소스 사용량을 확인합니다.

      다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.

      $ oc get vpa <vpa-name> --output yaml
      Copy to Clipboard Toggle word wrap

      출력에는 CPU 및 메모리 요청에 대한 권장 사항이 표시되며 다음과 유사합니다.

      출력 예

      ...
      status:
      
      ...
      
        recommendation:
          containerRecommendations:
          - containerName: frontend
            lowerBound: 
      1
      
              cpu: 25m
              memory: 262144k
            target: 
      2
      
              cpu: 25m
              memory: 262144k
            uncappedTarget: 
      3
      
              cpu: 25m
              memory: 262144k
            upperBound: 
      4
      
              cpu: 262m
              memory: "274357142"
          - containerName: backend
            lowerBound:
              cpu: 12m
              memory: 131072k
            target:
              cpu: 12m
              memory: 131072k
            uncappedTarget:
              cpu: 12m
              memory: 131072k
            upperBound:
              cpu: 476m
              memory: "498558823"
      
      ...
      Copy to Clipboard Toggle word wrap

      1
      lowerBound는 최소 권장 리소스 수준은 입니다.
      2
      target은 권장 리소스 수준입니다.
      3
      upperBound는 권장되는 최고 리소스 수준입니다.
      4
      uncappedTarget은 최신 리소스 권장 사항입니다.

2.5.5.1. Vertical Pod Autoscaler에 대한 사용자 정의 리소스 예시

Vertical Pod Autoscaler Operator(VPA)는 배포나 상태 집합과 같은 기본 제공 리소스뿐만 아니라 Pod를 관리하는 사용자 지정 리소스도 업데이트할 수 있습니다.

사용자 정의 리소스와 함께 VPA를 사용하려면 CustomResourceDefinition (CRD) 객체를 생성할 때 /scale 하위 리소스에서 labelSelectorPath 필드를 구성해야 합니다. /scale 하위 리소스는 Scale 객체를 생성합니다. labelSelectorPath 필드는 Scale 개체의 Status.Selector 와 사용자 정의 리소스에 해당하는 사용자 정의 리소스 내부의 JSON 경로를 정의합니다. 다음은 이러한 요구 사항을 충족하는 CustomResourceDefinitionCustomResource 와 사용자 지정 리소스를 대상으로 하는 VerticalPodAutoscaler 정의의 예입니다. 다음 예에서는 /scale 하위 리소스 계약을 보여줍니다.

참고

이 예제에서는 사용자 정의 리소스에 대한 컨트롤러가 없어서 포드를 소유할 수 없으므로 VPA 확장 포드가 발생하지 않습니다. 따라서 사용자 정의 리소스와 포드 간의 조정 및 상태 관리를 관리하기 위해 Kubernetes에서 지원하는 언어로 컨트롤러를 작성해야 합니다. 이 예제는 VPA가 사용자 정의 리소스를 확장 가능한 것으로 이해하도록 구성하는 방법을 보여줍니다.

사용자 정의 CRD, CR 예시

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: scalablepods.testing.openshift.io
spec:
  group: testing.openshift.io
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              replicas:
                type: integer
                minimum: 0
              selector:
                type: string
          status:
            type: object
            properties:
              replicas:
                type: integer
    subresources:
      status: {}
      scale:
        specReplicasPath: .spec.replicas
        statusReplicasPath: .status.replicas
        labelSelectorPath: .spec.selector 
1

  scope: Namespaced
  names:
    plural: scalablepods
    singular: scalablepod
    kind: ScalablePod
    shortNames:
    - spod
Copy to Clipboard Toggle word wrap

1
사용자 정의 리소스 개체의 status.selector 필드에 해당하는 JSON 경로를 지정합니다.

사용자 정의 CR 예시

apiVersion: testing.openshift.io/v1
kind: ScalablePod
metadata:
  name: scalable-cr
  namespace: default
spec:
  selector: "app=scalable-cr" 
1

  replicas: 1
Copy to Clipboard Toggle word wrap

1
관리되는 포드에 적용할 레이블 유형을 지정합니다. 이는 사용자 정의 리소스 정의 개체의 labelSelectorPath 에서 참조하는 필드입니다.

VPA 객체 예시

apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: scalable-cr
  namespace: default
spec:
  targetRef:
    apiVersion: testing.openshift.io/v1
    kind: ScalablePod
    name: scalable-cr
  updatePolicy:
    updateMode: "Auto"
Copy to Clipboard Toggle word wrap

2.5.6. Vertical Pod Autoscaler Operator 설치 제거

OpenShift Container Platform 클러스터에서 VPA(Vertical Pod Autoscaler Operator)를 제거할 수 있습니다. 설치 제거해도 기존 VPA CR에 의해 이미 수정된 Pod의 리소스 요청은 변경되지 않습니다. 새 Pod에서는 모두 Vertical Pod Autoscaler Operator에서 설정한 권장 사항 대신 워크로드 오브젝트에 정의된 리소스를 가져옵니다.

참고

oc delete vpa <vpa-name> 명령을 사용하여 특정 VPA CR을 제거할 수 있습니다. 리소스 요청에는 수직 Pod 자동 스케일러를 설치 제거할 때와 동일한 작업이 적용됩니다.

VPA Operator를 제거한 후에는 잠재적인 문제를 방지하기 위해 Operator와 관련된 다른 구성 요소를 제거하는 것이 좋습니다.

사전 요구 사항

  • Vertical Pod Autoscaler Operator를 설치해야 합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에서 Operator 설치된 Operator를 클릭합니다.
  2. openshift-vertical-pod-autoscaler 프로젝트로 전환합니다.
  3. VerticalPodAutoscaler Operator의 경우 옵션 메뉴를 클릭하세요. kebab 그리고 Operator 제거를 선택하세요.
  4. 선택 사항: 연산자와 연관된 모든 피연산자를 제거하려면 대화 상자에서 이 연산자에 대한 모든 피연산자 인스턴스 삭제 확인란을 선택합니다.
  5. 제거를 클릭합니다.
  6. 선택 사항: OpenShift CLI를 사용하여 VPA 구성 요소를 제거합니다.

    1. VPA 네임스페이스를 삭제합니다.

      $ oc delete namespace openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
    2. VPA 사용자 정의 리소스 정의(CRD) 객체를 삭제합니다.

      $ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
      Copy to Clipboard Toggle word wrap
      $ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
      Copy to Clipboard Toggle word wrap
      $ oc delete crd verticalpodautoscalers.autoscaling.k8s.io
      Copy to Clipboard Toggle word wrap

      CRD를 삭제하면 연관된 역할, 클러스터 역할 및 역할 바인딩이 제거됩니다.

      참고

      이 작업을 수행하면 사용자가 생성한 모든 VPA CR이 클러스터에서 제거됩니다. VPA를 다시 설치하면 이러한 객체를 다시 생성해야 합니다.

    3. 다음 명령을 실행하여 MutatingWebhookConfiguration 객체를 삭제합니다.

      $ oc delete MutatingWebhookConfiguration vpa-webhook-config
      Copy to Clipboard Toggle word wrap
    4. VPA 연산자 삭제:

      $ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
      Copy to Clipboard Toggle word wrap
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat