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)를 설치할 수 있습니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
OperatorHub를 클릭합니다. - 사용 가능한 Operator 목록에서 VerticalPodAutoscaler를 선택한 다음 설치를 클릭합니다.
-
Operator 설치 페이지에서 Operator 권장 네임스페이스 옵션이 선택되어 있는지 확인합니다. 그러면 필수
openshift-vertical-pod-autoscaler
네임스페이스에 Operator가 설치됩니다. 해당 네임스페이스가 존재하지 않는 경우 자동으로 생성됩니다. - 설치를 클릭합니다.
검증
VPA Operator 구성 요소를 나열하여 설치를 확인합니다.
-
워크로드
Pod로 이동합니다. -
드롭다운 메뉴에서
openshift-vertical-pod-autoscaler
프로젝트를 선택하고 Pod 4개가 실행되고 있는지 확인합니다. -
워크로드
배포로 이동하여 배포 4개가 실행되고 있는지 확인합니다.
-
워크로드
선택 사항: 다음 명령을 사용하여 OpenShift Container Platform CLI에서 설치를 확인하세요.
oc get all -n openshift-vertical-pod-autoscaler
$ oc get all -n openshift-vertical-pod-autoscaler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에는 4개의 포드와 4개의 배포가 표시됩니다.
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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>
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>
프로세스
VPA Operator에 대한
구독
사용자 정의 리소스(CR)에 노드 선택기를 추가하여 VPA Operator 포드를 이동합니다.CR을 편집하세요:
oc edit Subscription vertical-pod-autoscaler -n openshift-vertical-pod-autoscaler
$ oc edit Subscription vertical-pod-autoscaler -n openshift-vertical-pod-autoscaler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VPA Operator Pod를 설치하려는 노드의 노드 역할 레이블과 일치하는 노드 선택기를 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고인프라 노드에서 taint를 사용하는 경우
서브스크립션
CR에 허용 오차를 추가해야 합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- VPA Operator Pod를 이동하려는 노드의 오염에 대한 허용 범위를 지정합니다.
VerticalPodAutoscaler
사용자 정의 리소스(CR)에 노드 선택기를 추가하여 각 VPA 구성 요소를 이동합니다.CR을 편집하세요:
oc edit VerticalPodAutoscalerController default -n openshift-vertical-pod-autoscaler
$ oc edit VerticalPodAutoscalerController default -n openshift-vertical-pod-autoscaler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VPA 구성 요소를 설치하려는 노드의 노드 역할 레이블과 일치하도록 노드 선택기를 추가합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고대상 노드가 오염을 사용하는 경우
VerticalPodAutoscalerController
CR에 허용 범위를 추가해야 합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음 명령을 사용하여 포드가 이동했는지 확인할 수 있습니다.
oc get pods -n openshift-vertical-pod-autoscaler -o wide
$ oc get pods -n openshift-vertical-pod-autoscaler -o wide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 포드는 더 이상 제어 평면 노드에 배포되지 않습니다. 아래 예제 출력에서 해당 노드는 이제 제어 평면 노드가 아니라 인프라 노드입니다.
출력 예
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>
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 Copied! Toggle word wrap Toggle overflow
추가 리소스
2.5.4. 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
모드에서는 포드가 업데이트되지 않습니다.
CR을 사용하여 VPA 평가 및 업데이트에서 특정 컨테이너를 옵트아웃할 수도 있습니다.
예를 들어 Pod에 다음과 같은 제한 및 요청이 있습니다.
자동
으로 설정된 VPA를 생성한 후 VPA는 리소스 사용량을 학습하고 Pod를 삭제합니다. 재배포되면 Pod는 새 리소스 제한 및 요청을 사용합니다.
다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yaml
몇 분 후 출력에는 CPU 및 메모리 요청에 대한 권장 사항이 표시되며 다음과 유사합니다.
출력 예
출력에는 권장 리소스(target
), 최소 권장 리소스(lowerBound
), 최고 권장 리소스(upperBound
), 최신 리소스 권장 사항(uncappedTarget
)이 표시됩니다.
VPA는 lowerBound
및 upperBound
값을 사용하여 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
객체
- 1
- VPA가 작업할 수 있는 워크로드 객체의 최소 복제본 수를 지정합니다. 복제본이 최소값보다 적은 개체는 VPA에 의해 자동으로 삭제되지 않습니다.
2.5.4.2. VPA 권장 사항 자동 적용 링크 복사링크가 클립보드에 복사되었습니다!
VPA를 사용하여 Pod를 자동으로 업데이트하려면 updateMode
를 Auto
또는 Recreate
로 설정하여 특정 워크로드 오브젝트에 대한 VPA CR을 생성합니다.
워크로드 오브젝트에 대한 Pod가 생성되면 VPA에서 컨테이너를 지속적으로 모니터링하여 CPU 및 메모리 요구 사항을 분석합니다. VPA는 CPU 및 메모리에 대한 VPA 권장 사항을 충족하지 않는 모든 Pod를 삭제합니다. 재배포되면 Pod는 VPA 권장 사항에 따라 새 리소스 제한 및 요청을 사용하여 애플리케이션에 대해 설정된 모든 Pod 중단 예산을 준수합니다. 권장 사항은 참조를 위해 VPA CR의 status
필드에 추가되어 있습니다.
기본적으로 워크로드 객체는 VPA가 자동으로 포드를 삭제하도록 최소 두 개의 복제본을 지정해야 합니다. 이 최소값보다 적은 복제본을 지정한 워크로드 개체는 삭제되지 않습니다. 이러한 포드를 수동으로 삭제하면 워크로드 객체가 포드를 다시 배포할 때 VPA가 권장 사항을 사용하여 새 포드를 업데이트합니다. VPA 최소값 변경 에 표시된 대로 VerticalPodAutoscalerController
객체를 수정하여 이 최소값을 변경할 수 있습니다.
Auto
모드 VPA CR의 예
- 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를 처음 배포할 때만 권장 리소스를 적용하려면 updateMode
를 Initial
로 설정하여 특정 워크로드 오브젝트에 대한 VPA CR을 생성합니다.
그런 다음 VPA 권장 사항을 사용하려는 워크로드 오브젝트와 연결된 모든 Pod를 수동으로 삭제합니다. Initial
모드에서 VPA는 새 리소스 권장 사항을 확인할 때 Pod를 삭제하지 않고 Pod을 업데이트하지도 않습니다.
Initial
모드 VPA CR의 예
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의 예
다음 명령을 사용하여 권장 사항을 볼 수 있습니다.
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yaml
권장 사항에 따라 워크로드 오브젝트를 편집하여 CPU 및 메모리 요청을 추가한 다음 권장 리소스를 사용하여 Pod를 삭제하고 재배포할 수 있습니다.
VPA가 권장 리소스를 결정하고 권장 사항을 새로운 Pod에 적용하려면 먼저 운영 Pod가 존재하고 프로젝트에서 실행 중이어야 합니다.
VPA에서 가장 정확한 권장 사항을 얻으려면 포드가 실행되고 VPA가 안정화될 때까지 최소 8일 동안 기다리세요.
2.5.4.5. VPA 권장 사항 적용에서 컨테이너 제외 링크 복사링크가 클립보드에 복사되었습니다!
워크로드 오브젝트에 컨테이너가 여러 개 있고 VPA에서 모든 컨테이너를 평가하고 해당 컨테이너에 대해 작동하지 않도록 하려면 특정 워크로드 오브젝트에 대한 VPA CR을 생성하고 resourcePolicy
를 추가하여 특정 컨테이너를 옵트아웃합니다.
VPA에서 권장 리소스를 사용하여 Pod를 업데이트하면 resourcePolicy
가 포함된 모든 컨테이너가 업데이트되지 않으며 VPA는 Pod의 해당 컨테이너에 대한 권장 사항을 제공하지 않습니다.
예를 들면 Pod에 다음과 같이 리소스 요청 및 제한이 동일한 두 개의 컨테이너가 있습니다.
backend
컨테이너를 옵트아웃으로 설정하여 VPA CR을 시작하면 VPA에서 Pod를 종료한 후 frontend
컨테이너에만 적용되는 권장 리소스를 사용하여 Pod를 다시 생성합니다.
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-qps
및kube-api-burst
매개변수를 사용하여 Kubernetes API 서버의 VPA 요청에 대한 초당 쿼리 수(QPS)와 버스트 속도를 설정합니다. -
충분한 CPU와 메모리를 확보하려면 표준
CPU
및메모리
리소스 요청을 사용하여 VPA 구성 요소 포드에 대한 CPU 및 메모리 요청을 설정합니다. -
VPA CR에서 관리하는 작업 부하만 모니터링하도록 VPA Operator를 구성하려면 추천 구성 요소에 대해
memory-saver
매개변수를true
로 설정합니다.
각 VPA 구성 요소에 대해 설정할 수 있는 리소스 및 속도 제한에 대한 지침은 다음 표에서 클러스터 크기와 기타 요소에 따라 권장되는 기준 값을 제공합니다.
이러한 권장 값은 실제 클러스터를 반드시 대표한다고 할 수는 없지만 Red Hat 내부에서 실시한 클러스터 테스트에서 파생되었습니다. 프로덕션 클러스터를 구성하기 전에 비프로덕션 클러스터에서 이러한 값을 테스트해야 합니다.
Component | 1~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] |
-
c는
클러스터에 있는 컨테이너의 수입니다.
컨테이너의 메모리 제한을 표에 나와 있는 권장 요청량의 최소 두 배로 설정하는 것이 좋습니다. 하지만 CPU는 압축 가능한 리소스이므로 컨테이너에 CPU 제한을 설정하면 VPA가 제한될 수 있습니다. 따라서 컨테이너에 CPU 제한을 설정하지 않는 것이 좋습니다.
Component | 1 - 150 VPA | 151~500 VPA | 501-2000 VPA | 2001-4000 VPA | ||||
---|---|---|---|---|---|---|---|---|
QPS 제한 [1] | 버스트 [2] | QPS 한도 | 터지다 | QPS 한도 | 터지다 | QPS 한도 | 터지다 | |
추천인 | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
업데이터 | 5 | 10 | 30 | 60 | 60 | 120 | 120 | 240 |
-
QPS는 Kubernetes API 서버에 요청을 할 때 초당 쿼리 수(QPS) 제한을 지정합니다. 업데이터 및 추천 포드의 기본값은
5.0
입니다. -
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
- 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 구성 요소 포드에 설정이 적용되었는지 확인할 수 있습니다.
업데이터 포드 예시
예시 입장 컨트롤러 포드
추천자 포드 예시
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)
recommendation = max(memory-usage-in-oom-event + oom-min-bump-up-bytes, memory-usage-in-oom-event * oom-bump-up-ratio)
추천 포드에서 다음 값을 지정하여 메모리 증가를 구성할 수 있습니다.
-
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로 늘리는 것을 권장합니다.
추천자 배포 객체 예시
추가 리소스
2.5.4.8. 대체 추천자 사용 링크 복사링크가 클립보드에 복사되었습니다!
자체 알고리즘에 따라 자동 크기 조정이 가능한 자체 추천 시스템을 사용할 수 있습니다. 대체 추천자를 지정하지 않으면 OpenShift Container Platform은 과거 사용량을 기반으로 CPU 및 메모리 요청을 제안하는 기본 추천자를 사용합니다. 모든 유형의 워크로드에 적용되는 보편적인 추천 정책은 없으므로 특정 워크로드에 대해 서로 다른 추천 도구를 만들고 배포하는 것이 좋습니다.
예를 들어, 컨테이너가 특정 리소스 동작(예: 모니터링 애플리케이션에서 사용되는 사용량 급증과 유휴 상태를 번갈아 가며 반복하는 패턴)을 보일 때 기본 추천기는 향후 리소스 사용량을 정확하게 예측하지 못할 수 있습니다. 이러한 사용 동작으로 기본 추천기를 사용하면 애플리케이션에 심각한 과도한 프로비저닝과 OOM(메모리 부족)이 발생할 수 있습니다.
추천자를 만드는 방법에 대한 지침은 이 문서의 범위를 벗어납니다.
프로세스
포드에 대한 대체 추천자를 사용하려면:
대체 추천자에 대한 서비스 계정을 만들고 해당 서비스 계정을 필요한 클러스터 역할에 연결합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클러스터에 대체 추천자를 추가하려면 다음과 유사한 배포 객체를 만듭니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 동일한 네임스페이스에서 대체 추천자에 대한 새로운 포드가 생성됩니다.
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
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
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 Copied! Toggle word wrap Toggle overflow 대체 추천
배포
개체의 이름을 포함하는 VPA CR을 구성합니다.대체 추천자를 포함하는 VPA CR 예시
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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을 생성하려면 다음을 수행합니다.
스케일링할 워크로드 오브젝트가 있는 프로젝트로 변경합니다.
VPA CR YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
- 선택 사항: 대체 추천인을 지정하세요.
VPA CR을 생성합니다.
oc create -f <file-name>.yaml
$ oc create -f <file-name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 잠시 후 VPA는 워크로드 오브젝트와 연결된 Pod에서 컨테이너의 리소스 사용량을 확인합니다.
다음 명령을 사용하여 VPA 권장 사항을 볼 수 있습니다.
oc get vpa <vpa-name> --output yaml
$ oc get vpa <vpa-name> --output yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력에는 CPU 및 메모리 요청에 대한 권장 사항이 표시되며 다음과 유사합니다.
출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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 경로를 정의합니다. 다음은 이러한 요구 사항을 충족하는 CustomResourceDefinition
및 CustomResource
와 사용자 지정 리소스를 대상으로 하는 VerticalPodAutoscaler
정의의 예입니다. 다음 예에서는 /scale
하위 리소스 계약을 보여줍니다.
이 예제에서는 사용자 정의 리소스에 대한 컨트롤러가 없어서 포드를 소유할 수 없으므로 VPA 확장 포드가 발생하지 않습니다. 따라서 사용자 정의 리소스와 포드 간의 조정 및 상태 관리를 관리하기 위해 Kubernetes에서 지원하는 언어로 컨트롤러를 작성해야 합니다. 이 예제는 VPA가 사용자 정의 리소스를 확장 가능한 것으로 이해하도록 구성하는 방법을 보여줍니다.
사용자 정의 CRD, CR 예시
- 1
- 사용자 정의 리소스 개체의
status.selector
필드에 해당하는 JSON 경로를 지정합니다.
사용자 정의 CR 예시
- 1
- 관리되는 포드에 적용할 레이블 유형을 지정합니다. 이는 사용자 정의 리소스 정의 개체의
labelSelectorPath
에서 참조하는 필드입니다.
VPA 객체 예시
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를 설치해야 합니다.
프로세스
-
OpenShift Container Platform 웹 콘솔에서 Operator
설치된 Operator를 클릭합니다. - openshift-vertical-pod-autoscaler 프로젝트로 전환합니다.
-
VerticalPodAutoscaler Operator의 경우 옵션 메뉴를 클릭하세요.
그리고 Operator 제거를 선택하세요.
- 선택 사항: 연산자와 연관된 모든 피연산자를 제거하려면 대화 상자에서 이 연산자에 대한 모든 피연산자 인스턴스 삭제 확인란을 선택합니다.
- 제거를 클릭합니다.
선택 사항: OpenShift CLI를 사용하여 VPA 구성 요소를 제거합니다.
VPA 네임스페이스를 삭제합니다.
oc delete namespace openshift-vertical-pod-autoscaler
$ oc delete namespace openshift-vertical-pod-autoscaler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VPA 사용자 정의 리소스 정의(CRD) 객체를 삭제합니다.
oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalercheckpoints.autoscaling.k8s.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
$ oc delete crd verticalpodautoscalercontrollers.autoscaling.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd verticalpodautoscalers.autoscaling.k8s.io
$ oc delete crd verticalpodautoscalers.autoscaling.k8s.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CRD를 삭제하면 연관된 역할, 클러스터 역할 및 역할 바인딩이 제거됩니다.
참고이 작업을 수행하면 사용자가 생성한 모든 VPA CR이 클러스터에서 제거됩니다. VPA를 다시 설치하면 이러한 객체를 다시 생성해야 합니다.
다음 명령을 실행하여
MutatingWebhookConfiguration
객체를 삭제합니다.oc delete MutatingWebhookConfiguration vpa-webhook-config
$ oc delete MutatingWebhookConfiguration vpa-webhook-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow VPA 연산자 삭제:
oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
$ oc delete operator/vertical-pod-autoscaler.openshift-vertical-pod-autoscaler
Copy to Clipboard Copied! Toggle word wrap Toggle overflow