리소스 사용 관리
OpenShift Pipelines에서 리소스 사용량 관리
초록
1장. OpenShift Pipelines의 리소스 사용량 감소 링크 복사링크가 클립보드에 복사되었습니다!
멀티 테넌트 환경에서 클러스터를 사용하는 경우 각 프로젝트 및 Kubernetes 오브젝트에 대한 CPU, 메모리 및 스토리지 리소스의 사용을 제어해야 합니다. 따라서 하나의 애플리케이션이 너무 많은 리소스를 소비하고 다른 애플리케이션에 영향을 주지 않도록 방지할 수 있습니다.
결과 pod에 설정된 최종 리소스 제한을 정의하기 위해 Red Hat OpenShift Pipelines는 리소스 할당량 제한 및 해당 Pod가 실행되는 프로젝트의 제한 범위를 사용합니다.
프로젝트의 리소스 사용을 제한하려면 다음을 수행할 수 있습니다.
- 리소스 할당량을 설정하고 관리하여 집계 리소스 사용을 제한합니다.
- Pod, 이미지, 이미지 스트림, 영구 볼륨 클레임과 같은 특정 오브젝트에 대한 제한 범위를 사용하여 리소스 사용을 제한합니다.
1.1. 파이프라인에서 리소스 사용 이해 링크 복사링크가 클립보드에 복사되었습니다!
각 작업은 Task 리소스의 steps 필드에 정의된 특정 순서로 실행하는 데 필요한 여러 단계로 구성됩니다. 모든 작업은 Pod로 실행되고 각 단계는 해당 Pod 내에서 컨테이너로 실행됩니다.
단계는 한 번에 하나씩 실행됩니다. 작업을 실행하는 Pod는 한 번에 작업에서 단일 컨테이너 이미지(단계)를 실행하기에 충분한 리소스만 요청하므로 작업의 모든 단계에 대한 리소스를 저장하지 않습니다.
spec 단계의 Resources 필드는 리소스 소비에 대한 제한을 지정합니다. 기본적으로 CPU, 메모리, 임시 스토리지에 대한 리소스 요청은 BestEffort (zero) 값으로 설정되거나 해당 프로젝트에서 제한 범위를 통해 설정된 최소값으로 설정됩니다.
리소스 요청 구성 및 단계 제한의 예
LimitRange 매개변수 및 컨테이너 리소스 요청에 대한 최소 값이 Pipeline 및 작업을 실행하는 프로젝트에 지정되면 Red Hat OpenShift Pipelines는 프로젝트의 모든 LimitRange 값을 살펴보고 0 대신 최소 값을 사용합니다.
프로젝트 수준에서 제한 범위 매개변수 구성 예
1.2. 파이프라인에서 추가 리소스 소비 완화 링크 복사링크가 클립보드에 복사되었습니다!
Pod의 컨테이너에 리소스 제한이 설정된 경우 OpenShift Container Platform은 모든 컨테이너가 동시에 실행될 때 요청된 리소스 제한을 합계합니다.
호출된 작업에서 한 번에 한 단계를 실행하는 데 필요한 최소 리소스 양을 사용하기 위해 Red Hat OpenShift Pipelines는 가장 많은 리소스 양이 필요한 단계에 지정된 대로 최대 CPU, 메모리 및 임시 스토리지를 요청합니다. 이렇게 하면 모든 단계의 리소스 요구 사항이 충족됩니다. 최대 값 이외의 요청은 0으로 설정됩니다.
그러나 이 동작으로 인해 리소스 사용량이 필요 이상으로 증가할 수 있습니다. 리소스 할당량을 사용하는 경우 Pod를 예약할 수 없게 될 수도 있습니다.
예를 들어 스크립트를 사용하고 리소스 제한과 요청을 정의하지 않는 두 단계로 이루어진 작업을 살펴보겠습니다. 결과 pod에는 두 개의 init 컨테이너(한 개는 진입점 복사용, 다른 하나는 스크립트 작성용)와 두 개의 컨테이너(단계 당 하나씩)가 있습니다.
OpenShift Container Platform은 프로젝트에 필요한 리소스 요청 및 제한을 계산하기 위해 설정된 제한 범위를 사용합니다. 이 예에서는 프로젝트에서 다음 제한 범위를 설정합니다.
이 시나리오에서 각 init 컨테이너는 1Gi의 요청 메모리 (제한 범위의 최대 제한)를 사용하고 각 컨테이너는 500Mi의 요청 메모리를 사용합니다. 따라서 Pod의 총 메모리 요청은 2Gi입니다.
10단계의 작업에 동일한 제한 범위를 사용하는 경우 최종 메모리 요청은 5Gi로 각 단계에서 실제로 필요한 것보다 높은 500Mi입니다 (각 단계가 차례로 실행되기 때문).
따라서 리소스의 리소스 사용량을 줄이기 위해 다음을 수행할 수 있습니다.
- 스크립트 기능 및 동일한 이미지를 사용하여 서로 다른 단계를 한 단계로 그룹화하여 지정된 작업의 단계 수를 줄입니다. 이렇게 하면 요청된 최소 리소스가 줄어듭니다.
- 서로 상대적으로 독립적이며 자체적으로 실행할 수 있는 단계를 단일 작업 대신 여러 작업에 분산합니다. 이렇게 하면 각 작업의 단계 수가 줄어들어 각 작업에 대한 요청이 줄어들며, 리소스가 사용 가능할 때 스케줄러가 해당 단계를 실행할 수 있습니다.
2장. OpenShift Pipelines의 컴퓨팅 리소스 할당량 설정 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift Pipelines의 ResourceQuota 오브젝트는 네임스페이스당 총 리소스 소비를 제어합니다. 오브젝트 유형에 따라 네임스페이스에서 생성된 오브젝트 수량을 제한하는 데 사용할 수 있습니다. 또한 네임스페이스에서 사용하는 총 컴퓨팅 리소스 양을 제한하기 위해 컴퓨팅 리소스 할당량을 지정할 수 있습니다.
그러나 전체 네임스페이스에 대한 할당량을 설정하는 대신 파이프라인 실행으로 인해 Pod에서 사용하는 컴퓨팅 리소스의 양을 제한할 수 있습니다. 현재 Red Hat OpenShift Pipelines에서는 파이프라인의 컴퓨팅 리소스 할당량을 직접 지정할 수 없습니다.
2.1. OpenShift Pipelines에서 컴퓨팅 리소스 사용을 제한하는 대체 방법 링크 복사링크가 클립보드에 복사되었습니다!
파이프라인에서 컴퓨팅 리소스 사용에 대한 어느 정도의 제어 권한을 얻으려면 다음과 같은 대체 방법을 고려하십시오.
작업의 각 단계에 대한 리소스 요청 및 제한을 설정합니다.
예: 작업의 각 단계에 대한 리소스 요청 및 제한을 설정합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
LimitRange오브젝트의 값을 지정하여 리소스 제한을 설정합니다.LimitRange에 대한 자세한 내용은 제한 범위를 사용하여 리소스 소비 제한을 참조하십시오. - 파이프라인 리소스 사용을 줄입니다.
- 프로젝트당 리소스 할당량을 설정하고 관리합니다.
- 파이프라인의 컴퓨팅 리소스 할당량은 파이프라인 실행에서 동시에 실행되는 Pod에서 사용하는 총 컴퓨팅 리소스 양과 동일해야 합니다. 그러나 작업을 실행하는 Pod는 사용 사례에 따라 컴퓨팅 리소스를 사용합니다. 예를 들어 Maven 빌드 작업에는 빌드하는 애플리케이션에 대해 서로 다른 컴퓨팅 리소스가 필요할 수 있습니다. 따라서 일반 파이프라인의 작업에 대한 컴퓨팅 리소스 할당량을 사전 결정할 수 없습니다. 컴퓨팅 리소스 사용을 예측할 수 있고 제어하려면 다양한 애플리케이션에 대해 사용자 지정된 파이프라인을 사용합니다.
이러한 접근 방식에서 사용 사례를 다루지 않는 경우 우선순위 클래스에 리소스 할당량을 사용하여 해결 방법을 구현할 수 있습니다.
2.2. 우선순위 클래스를 사용하여 파이프라인 리소스 할당량 지정 링크 복사링크가 클립보드에 복사되었습니다!
PriorityClass 오브젝트는 우선순위 클래스 이름을 상대 우선순위를 나타내는 정수 값에 매핑합니다. 값이 클수록 클래스의 우선 순위가 증가합니다. 우선순위 클래스를 생성한 후 사양에 우선순위 클래스 이름을 지정하는 Pod를 생성할 수 있습니다. 또한 Pod의 우선 순위에 따라 Pod의 시스템 리소스 사용을 제어할 수 있습니다.
파이프라인의 리소스 할당량을 지정하는 것은 파이프라인 실행으로 생성된 Pod 서브 세트에 대한 리소스 할당량을 설정하는 것과 유사합니다. 다음 단계에서는 우선순위 클래스를 기반으로 리소스 할당량을 지정하여 해결 방법의 예를 제공합니다.
프로세스
파이프라인의 우선순위 클래스를 생성합니다.
예: 파이프라인의 우선 순위 클래스
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파이프라인에 대한 리소스 할당량을 생성합니다.
예: 파이프라인의 리소스 할당량
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파이프라인의 리소스 할당량 사용량을 확인합니다.
예: 파이프라인의 리소스 할당량 사용 확인
oc describe quota
$ oc describe quotaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 샘플 출력
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod가 실행 중이 아니므로 할당량이 사용되지 않습니다.
파이프라인 및 작업을 생성합니다.
예: 파이프라인의 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예: 파이프라인의 작업의 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 파이프라인 실행을 생성하고 시작합니다.
예: 파이프라인 실행을 위한 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고파이프라인 실행이
실패한 할당량으로 실패할 수 있습니다. <quota name>은 cpu, memory를 지정해야 합니다.이 오류를 방지하려면 네임스페이스의 제한 범위를 설정합니다. 여기서
LimitRange오브젝트의 기본값이 빌드 프로세스 중에 생성된 Pod에 적용됩니다.제한 범위 설정에 대한 자세한 내용은 추가 리소스 섹션의 제한 범위를 사용하여 리소스 소비 제한을 참조하십시오.
Pod가 생성되면 파이프라인 실행에 대한 리소스 할당량 사용량을 확인합니다.
예: 파이프라인의 리소스 할당량 사용 확인
oc describe quota
$ oc describe quotaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 샘플 출력
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력은 우선순위 클래스당 리소스 할당량을 지정하여 우선순위 클래스에 속하는 동시 실행 중인 모든 Pod에 대해 결합된 리소스 할당량을 관리할 수 있음을 나타냅니다.