2.5. 수직 Pod 자동 스케일러를 사용하여 Pod 리소스 수준 자동 조정
OpenShift Container Platform VPA(Vertical Pod Autoscaler Operator)는 Pod의 컨테이너에 대한 과거 및 현재의 CPU 및 메모리 리소스를 자동으로 검토한 후 확인한 사용량 값에 따라 리소스 제한 및 요청을 업데이트할 수 있습니다. VPA는 개별 CR(사용자 정의 리소스)을 사용하여 Deployment
, Deployment Config
, StatefulSet
, Job
, DaemonSet
, ReplicaSet
또는 ReplicationController
와 같은 워크로드 오브젝트와 연결된 모든 Pod를 프로젝트에서 업데이트합니다.
VPA를 사용하면 Pod의 최적 CPU 및 메모리 사용량을 이해하고 Pod의 라이프사이클 내내 Pod 리소스를 자동으로 유지 관리할 수 있습니다.
2.5.1. Vertical Pod Autoscaler Operator 정보
VPA(Vertical Pod Autoscaler Operator)는 API 리소스 및 CR(사용자 정의 리소스)로 구현됩니다. CR에 따라 Vertical Pod Autoscaler Operator에서 데몬 세트, 복제 컨트롤러 등과 같은 특정 워크로드 오브젝트와 관련된 Pod에서 수행해야 하는 작업이 프로젝트에서 결정됩니다.
VPA Operator는 세 가지 구성 요소로 구성되며 각각 VPA 네임스페이스에 자체 Pod가 있습니다.
- 권장 사항
- VPA 권장 사항은 현재 및 과거 리소스 사용을 모니터링하고 이 데이터를 기반으로 관련 워크로드 오브젝트의 Pod에 대한 최적 CPU 및 메모리 리소스를 결정합니다.
- Updater
- VPA 업데이트자는 관련 워크로드 오브젝트의 Pod에 올바른 리소스가 있는지 확인합니다. 리소스가 올바르면 업데이트 프로그램이 작업을 수행하지 않습니다. 리소스가 올바르지 않으면 업데이트 프로그램이 Pod를 종료하여 업데이트된 요청을 통해 컨트롤러에서 다시 생성할 수 있습니다.
- 허용 컨트롤러
- VPA 승인 컨트롤러는 VPA updater 작업으로 인해 Pod가 새로 생성되었는지 또는 컨트롤러에서 재생성했는지와 관계없이 관련 워크로드 오브젝트의 각 새 Pod에 올바른 리소스 요청을 설정합니다.
기본 권장자를 사용하거나 자체 대체 권장 프로그램을 사용하여 자체 알고리즘에 따라 자동 스케일링할 수 있습니다.
기본 권장 사항은 해당 Pod의 컨테이너 및 현재 CPU 및 메모리 사용량을 자동으로 계산하고 이 데이터를 사용하여 최적화된 리소스 제한 및 요청을 확인하여 이러한 Pod가 항상 효율적으로 작동하는지 확인합니다. 예를 들어 기본 권장 사항에서는 사용 중인 리소스보다 더 많은 리소스를 요청하는 Pod의 리소스가 줄어들고 충분히 요청하지 않는 Pod의 리소스를 늘릴 것을 제안합니다.
그런 다음 VPA는 애플리케이션이 다운타임 없이 요청을 계속 제공할 수 있도록 이러한 권장 사항과 일치하지 않는 모든 Pod를 한 번에 하나씩 자동으로 삭제합니다. 그런 다음 워크로드 오브젝트는 원래 리소스 제한 및 요청을 사용하여 Pod를 재배포합니다. VPA는 변경 승인 Webhook를 사용하여 Pod가 노드에 승인되기 전에 최적화된 리소스 제한 및 요청을 사용하여 Pod를 업데이트합니다. VPA에서 Pod를 삭제하지 않으려면 필요에 따라 VPA 리소스 제한 및 요청 및 수동으로 Pod를 업데이트할 수 있습니다.
기본적으로 워크로드 오브젝트는 VPA에서 Pod를 자동으로 삭제하려면 최소 두 개의 복제본을 지정해야 합니다. 이 최소값보다 더 적은 복제본을 지정하는 워크로드 오브젝트는 삭제되지 않습니다. 이러한 Pod를 수동으로 삭제하면 워크로드 오브젝트가 Pod를 재배포하면 VPA에서 새 Pod를 권장 사항으로 업데이트합니다. 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에 대한 리소스 요청은 변경되지 않습니다. 새 Pod에서는 모두 VPA에서 설정한 이전의 권장 사항 대신 워크로드 오브젝트에 정의된 리소스를 가져옵니다.
2.5.2. Vertical Pod Autoscaler Operator 설치
OpenShift Container Platform 웹 콘솔을 사용하여 VPA(Vertical Pod Autoscaler Operator)를 설치할 수 있습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub를 클릭합니다. - 사용 가능한 Operator 목록에서 VerticalPodAutoscaler를 선택한 다음 설치를 클릭합니다.
-
Operator 설치 페이지에서 Operator 권장 네임스페이스 옵션이 선택되어 있는지 확인합니다. 그러면 필수
openshift-vertical-pod-autoscaler
네임스페이스에 Operator가 설치됩니다. 해당 네임스페이스가 존재하지 않는 경우 자동으로 생성됩니다. - 설치를 클릭합니다.
Verifiction
VPA Operator 구성 요소를 나열하여 설치를 확인합니다.
-
워크로드
Pod로 이동합니다. -
드롭다운 메뉴에서
openshift-vertical-pod-autoscaler
프로젝트를 선택하고 Pod 4개가 실행되고 있는지 확인합니다. -
워크로드
배포로 이동하여 배포 4개가 실행되고 있는지 확인합니다.
-
워크로드
선택 사항: 다음 명령을 사용하여 OpenShift Container Platform CLI에서 설치를 확인합니다.
$ oc get all -n openshift-vertical-pod-autoscaler
출력에는 Pod 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
2.5.3. Vertical Pod Autoscaler Operator 사용 정보
VPA(Vertical Pod Autoscaler Operator)를 사용하려면 클러스터에서 워크로드 오브젝트에 대한 VPA CR(사용자 정의 리소스)을 생성합니다. VPA는 해당 워크로드 오브젝트와 연결된 Pod에 가장 적합한 CPU 및 메모리 리소스를 확인하고 적용합니다. 배포, 상태 저장 세트, 작업, 데몬 세트, 복제본 세트 또는 복제 컨트롤러 워크로드 오브젝트에 VPA를 사용할 수 있습니다. VPA CR은 모니터링할 Pod와 동일한 프로젝트에 있어야 합니다.
VPA CR을 사용하여 워크로드 오브젝트를 연결하고 VPA가 작동하는 모드를 지정합니다.
-
Auto
및Recreate
모드는 Pod 수명 동안 VPA CPU 및 메모리 권장 사항을 자동으로 적용합니다. VPA는 권장 사항과 일치하지 않는 프로젝트의 모든 Pod를 삭제합니다. 워크로드 오브젝트에서 재배포하면 VPA는 새 Pod를 권장 사항으로 업데이트합니다. -
Initial
모드는 Pod 생성 시에만 VPA 권장 사항을 자동으로 적용합니다. -
Off
모드는 권장되는 리소스 제한 및 요청만 제공하며 권장 사항을 수동으로 적용할 수 있습니다.off
모드에서는 Pod를 업데이트하지 않습니다.
CR을 사용하여 VPA 평가 및 업데이트에서 특정 컨테이너를 옵트아웃할 수도 있습니다.
예를 들어 Pod에 다음과 같은 제한 및 요청이 있습니다.
resources: limits: cpu: 1 memory: 500Mi requests: cpu: 500m memory: 100Mi
auto
로 설정된 VPA를 생성하면 VPA에서 리소스 사용량을 확인하고 Pod를 삭제합니다. 재배포되면 Pod는 새 리소스 제한 및 요청을 사용합니다.
resources: limits: cpu: 50m memory: 1250Mi requests: cpu: 25m memory: 262144k
다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.
$ oc get vpa <vpa-name> --output yaml
몇 분 후 출력에는 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" ...
출력에는 권장 리소스(target
), 최소 권장 리소스(lowerBound
), 최고 권장 리소스(upperBound
), 최신 리소스 권장 사항(uncappedTarget
)이 표시됩니다.
VPA는 lowerBound
및 upperBound
값을 사용하여 Pod를 업데이트해야 하는지 확인합니다. Pod에 lowerBound
값보다 작거나 upperBound
값을 초과하는 리소스 요청이 있는 경우 VPA는 Pod를 종료하고 target
값을 사용하여 Pod를 다시 생성합니다.
2.5.3.1. VPA 최소 값 변경
기본적으로 워크로드 오브젝트는 VPA에서 Pod를 자동으로 삭제하고 업데이트하려면 최소 두 개의 복제본을 지정해야 합니다. 결과적으로 두 개 미만의 복제본을 지정하는 워크로드 오브젝트는 VPA에서 자동으로 작동하지 않습니다. VPA는 Pod가 VPA 외부 일부 프로세스에서 재시작되는 경우 이러한 워크로드 오브젝트에서 새 Pod를 업데이트합니다. VerticalPodAutoscalerController
CR(사용자 정의 리소스)에서 minReplicas
매개변수를 수정하여 클러스터 전체 최소 값을 변경할 수 있습니다.
예를 들어 minReplicas
를 3
으로 설정하면 VPA에서 복제본 3개 미만을 지정하는 워크로드 오브젝트의 Pod를 삭제하고 업데이트하지 않습니다.
minReplicas
를 1
로 설정하면 VPA에서 하나의 복제본만 지정하는 워크로드 오브젝트에 대한 유일한 Pod를 삭제할 수 있습니다. VPA에서 Pod를 삭제하여 리소스를 조정할 때마다 워크로드에서 다운타임을 허용할 수 있는 경우에만 이 설정을 one-replica 오브젝트에 사용해야 합니다. one-replica 오브젝트를 사용하여 원하지 않는 다운 타임을 방지하려면 podUpdatePolicy
를 Initial
로 설정하여 VPA CR을 구성합니다. 이 CR은 VPA 외부의 일부 프로세스에 의해 재시작되는 경우에만 Pod를 업데이트하거나 애플리케이션에 적절한 시점에 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
2.5.3.2. VPA 권장 사항 자동 적용
VPA를 사용하여 Pod를 자동으로 업데이트하려면 updateMode
를 Auto
또는 Recreate
로 설정하여 특정 워크로드 오브젝트에 대한 VPA CR을 생성합니다.
워크로드 오브젝트에 대한 Pod가 생성되면 VPA에서 컨테이너를 지속적으로 모니터링하여 CPU 및 메모리 요구 사항을 분석합니다. VPA는 CPU 및 메모리에 대한 VPA 권장 사항을 충족하지 않는 모든 Pod를 삭제합니다. 재배포되면 Pod는 VPA 권장 사항에 따라 새 리소스 제한 및 요청을 사용하여 애플리케이션에 대해 설정된 모든 Pod 중단 예산을 준수합니다. 권장 사항은 참조를 위해 VPA CR의 status
필드에 추가되어 있습니다.
기본적으로 워크로드 오브젝트는 VPA에서 Pod를 자동으로 삭제하려면 최소 두 개의 복제본을 지정해야 합니다. 이 최소값보다 더 적은 복제본을 지정하는 워크로드 오브젝트는 삭제되지 않습니다. 이러한 Pod를 수동으로 삭제하면 워크로드 오브젝트가 Pod를 재배포하면 VPA에서 새 Pod를 권장 사항으로 업데이트합니다. 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
- 1
- 이 VPA CR에서 관리할 워크로드 오브젝트의 유형입니다.
- 2
- 이 VPA CR에서 관리할 워크로드 오브젝트의 이름입니다.
- 3
- 모드를
Auto
또는Recreate
로 설정합니다.-
Auto
. VPA는 Pod 생성 시 리소스 요청을 할당하고 요청된 리소스가 새 권장 사항과 크게 다른 경우 기존 Pod를 종료하여 업데이트합니다. -
Recreate
. VPA는 Pod 생성 시 리소스 요청을 할당하고 요청된 리소스가 새 권장 사항과 크게 다른 경우 기존 Pod를 종료하여 업데이트합니다. 이 모드는 리소스 요청이 변경될 때마다 Pod를 재시작해야 하는 경우에만 사용해야 합니다.
-
VPA에서 리소스에 대한 권장 사항을 결정하고 권장 리소스를 새 Pod에 적용하려면 작동 중인 Pod가 있어야 하며 프로젝트에서 실행 중이어야 합니다.
CPU 및 메모리와 같은 워크로드의 리소스 사용량이 일관되게 유지되면 VPA에서 몇 분 내에 리소스에 대한 권장 사항을 확인할 수 있습니다. 워크로드의 리소스 사용량이 일치하지 않는 경우 VPA는 정확한 권장 사항을 수행하기 위해 VPA의 다양한 리소스 사용량 간격으로 지표를 수집해야 합니다.
2.5.3.3. Pod 생성에 VPA 권장 사항 자동 적용
VPA를 사용하여 Pod를 처음 배포할 때만 권장 리소스를 적용하려면 updateMode
를 Initial
로 설정하여 특정 워크로드 오브젝트에 대한 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
VPA에서 권장 리소스를 결정하고 새 Pod에 권장 사항을 적용하려면 운영 Pod가 있어야 하며 프로젝트에서 실행 중이어야 합니다.
VPA에서 가장 정확한 권장 사항을 얻으려면 Pod가 실행되고 VPA가 안정될 때까지 최소 8일 동안 기다립니다.
2.5.3.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
다음 명령을 사용하여 권장 사항을 볼 수 있습니다.
$ oc get vpa <vpa-name> --output yaml
권장 사항에 따라 워크로드 오브젝트를 편집하여 CPU 및 메모리 요청을 추가한 다음 권장 리소스를 사용하여 Pod를 삭제하고 재배포할 수 있습니다.
VPA에서 권장 리소스를 결정하고 새 Pod에 권장 사항을 적용하려면 운영 Pod가 있어야 하며 프로젝트에서 실행 중이어야 합니다.
VPA에서 가장 정확한 권장 사항을 얻으려면 Pod가 실행되고 VPA가 안정될 때까지 최소 8일 동안 기다립니다.
2.5.3.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"
예를 들면 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 # ...
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 ...
2.5.3.6. 대체 권장 사항 사용
자체 권장 사항을 사용하여 자체 알고리즘에 따라 자동 스케일링할 수 있습니다. 대체 권장 사항을 지정하지 않는 경우 OpenShift Container Platform은 기본 권장 사항을 사용합니다. 이 권장 사항은 이전 사용량을 기반으로 CPU 및 메모리 요청을 제안합니다. 모든 유형의 워크로드에 적용되는 범용 권장 정책은 없으므로 특정 워크로드에 대해 다른 권장 사항을 생성하고 배포해야 할 수 있습니다.
예를 들어, 기본 권장 사항은 컨테이너가 애플리케이션 모니터링에 사용되는 사용량 급증과 유휴 상태 지정 또는 딥 러닝 애플리케이션에 사용되는 패턴을 반복하고 반복하는 것과 같이 특정 리소스 동작을 표시하는 경우 향후 리소스 사용량을 정확하게 예측하지 못할 수 있습니다. 이러한 사용 동작과 함께 기본 권장 사항을 사용하면 애플리케이션에 대해 상당한 초과 프로비저닝 및 OOM(메모리 부족)이 종료될 수 있습니다.
추천자를 만드는 방법에 대한 지침은 이 문서의 범위를 벗어납니다.
프로세스
Pod에 대체 권장자를 사용하려면 다음을 수행합니다.
대체 권장 사항에 대한 서비스 계정을 생성하고 해당 서비스 계정을 필수 클러스터 역할에 바인딩합니다.
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>
클러스터에 대체 권장자를 추가하려면 다음과 유사한 Deployment 오브젝트를 생성합니다.
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
동일한 네임스페이스의 대체 권장 사항에 대한 새 Pod가 생성됩니다.
$ oc get pods
출력 예
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
alternative recommender
Deployment
오브젝트의 이름이 포함된 VPA CR을 구성합니다.alternative recommender를 포함하는 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
2.5.4. Vertical Pod Autoscaler Operator 사용
VPA(Vertical Pod Autoscaler Operator) CR(사용자 정의 리소스)을 생성하여 VPA를 사용할 수 있습니다. CR은 VPA에서 해당 Pod에 수행할 작업을 분석하고 결정해야 하는 Pod를 나타냅니다.
사전 요구 사항
- 자동 스케일링할 워크로드 오브젝트가 있어야 합니다.
- 대체 권장자를 사용하려면 해당 권장자를 포함한 배포가 있어야 합니다.
프로세스
특정 워크로드 오브젝트에 대한 VPA CR을 생성하려면 다음을 수행합니다.
스케일링할 워크로드 오브젝트가 있는 프로젝트로 변경합니다.
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
- 1
- 이 VPA에서 관리할 워크로드 오브젝트 유형(
Deployment
,StatefulSet
,Job
,DaemonSet
,ReplicaSet
또는ReplicationController
)을 지정합니다. - 2
- 이 VPA에서 관리할 기존 워크로드 오브젝트의 이름을 지정합니다.
- 3
- 다음과 같이 VPA 모드를 지정합니다.
-
auto
: 컨트롤러와 연결된 Pod에 권장 리소스를 자동으로 적용합니다. VPA는 기존 Pod를 종료하고 권장 리소스 제한 및 요청을 사용하여 새 Pod를 생성합니다. -
recreate
: 워크로드 오브젝트와 연결된 Pod에 권장 리소스를 자동으로 적용합니다. VPA는 기존 Pod를 종료하고 권장 리소스 제한 및 요청을 사용하여 새 Pod를 생성합니다.recreate
모드는 리소스 요청이 변경될 때마다 Pod를 재시작해야 하는 경우에만 사용해야 합니다. -
initial
: 워크로드 오브젝트와 연결된 Pod가 생성될 때 권장 리소스를 자동으로 적용합니다. VPA는 새 리소스 권장 사항을 확인할 때 Pod를 업데이트하지 않습니다. -
off
: 워크로드 오브젝트와 연결된 Pod의 리소스 권장 사항만 생성합니다. VPA는 새 리소스 권장 사항을 확인할 때 Pod를 업데이트하지 않고 해당 권장 사항을 새 Pod에 적용하지도 않습니다.
-
- 4
- 선택 사항입니다. 옵트아웃할 컨테이너를 지정하고 모드를
Off
로 설정합니다. - 5
- 선택 사항: alternative recommender를 지정합니다.
VPA CR을 생성합니다.
$ oc create -f <file-name>.yaml
잠시 후 VPA는 워크로드 오브젝트와 연결된 Pod에서 컨테이너의 리소스 사용량을 확인합니다.
다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.
$ oc get vpa <vpa-name> --output yaml
출력에는 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" ...
2.5.5. 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를 설치해야 합니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator를 클릭합니다. - openshift-vertical-pod-autoscaler 프로젝트로 전환합니다.
- VerticalPodAutoscaler Operator의 경우 옵션 메뉴 를 클릭하고 Operator 설치 제거를 선택합니다.
- 선택 사항: Operator와 연결된 모든 피연산자를 제거하려면 대화 상자에서 이 Operator의 모든 피연산자 인스턴스 삭제를 선택합니다.
- 제거를 클릭합니다.
선택 사항: OpenShift CLI를 사용하여 VPA 구성 요소를 제거합니다.
VPA 네임스페이스를 삭제합니다.
$ oc delete namespace openshift-vertical-pod-autoscaler
VPA CRD(사용자 정의 리소스 정의) 오브젝트를 삭제합니다.
$ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
$ oc delete crd verticalpodautoscalers.autoscaling.k8s.io
CRD를 삭제하면 연결된 역할, 클러스터 역할 및 역할 바인딩이 제거됩니다.
참고이 작업은 모든 사용자가 생성한 VPA CR 클러스터에서 제거합니다. VPA를 다시 설치하는 경우 이러한 오브젝트를 다시 생성해야 합니다.
다음 명령을 실행하여
MutatingWebhookConfiguration
오브젝트를 삭제합니다.$ oc delete MutatingWebhookConfiguration vpa-webhook-config
VPA Operator를 삭제합니다.
$ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler