4.11. OpenShift Pipelines의 컴퓨팅 리소스 할당량 설정
Red Hat OpenShift Pipelines의 ResourceQuota
오브젝트는 네임스페이스당 총 리소스 사용량을 제어합니다. 이를 사용하여 오브젝트 유형에 따라 네임스페이스에 생성된 오브젝트의 수량을 제한할 수 있습니다. 또한 컴퓨팅 리소스 할당량을 지정하여 네임스페이스에 사용되는 총 컴퓨팅 리소스 양을 제한할 수 있습니다.
그러나 전체 네임스페이스에 대한 할당량을 설정하는 대신 파이프라인 실행으로 인해 Pod에서 사용하는 컴퓨팅 리소스의 양을 제한할 수 있습니다. 현재 Red Hat OpenShift Pipelines에서는 파이프라인의 컴퓨팅 리소스 할당량을 직접 지정할 수 없습니다.
4.11.1. OpenShift Pipelines에서 컴퓨팅 리소스 사용을 제한하는 대체 방법
파이프라인에서 컴퓨팅 리소스 사용을 어느 정도 제어하려면 다음과 같은 대체 방법을 고려하십시오.
작업의 각 단계에 대한 리소스 요청 및 제한을 설정합니다.
예: 작업의 각 단계에 대한 리소스 요청 및 제한을 설정합니다.
... spec: steps: - name: step-with-limts resources: requests: memory: 1Gi cpu: 500m limits: memory: 2Gi cpu: 800m ...
-
LimitRange
오브젝트의 값을 지정하여 리소스 제한을 설정합니다.LimitRange
에 대한 자세한 내용은 제한 범위를 사용하여 리소스 사용 제한 을 참조하십시오. - 파이프라인 리소스 사용량을 줄입니다.
- 프로젝트당 리소스 할당량을 설정하고 관리합니다.
- 파이프라인의 컴퓨팅 리소스 할당량은 파이프라인 실행에서 동시에 실행 중인 Pod에서 사용하는 총 컴퓨팅 리소스 양과 동일해야 합니다. 그러나 작업을 실행하는 포드는 사용 사례에 따라 계산 리소스를 사용합니다. 예를 들어 Maven 빌드 작업에는 빌드하는 다양한 애플리케이션에 다른 컴퓨팅 리소스가 필요할 수 있습니다. 따라서 일반 파이프라인의 작업에 대한 컴퓨팅 리소스 할당량을 사전에 확인할 수 없습니다. 컴퓨팅 리소스의 사용에 대한 예측 가능성 및 제어 능력을 높이기 위해 다양한 애플리케이션에 사용자 지정 파이프라인을 사용합니다.
이러한 접근 방식에서 사용 사례가 해결되지 않은 경우 우선순위 클래스에 리소스 할당량을 사용하여 해결 방법을 구현할 수 있습니다.
4.11.2. 우선순위 클래스를 사용하여 파이프라인 리소스 할당량 지정
PriorityClass
오브젝트는 우선순위 클래스 이름을 상대 우선 순위를 나타내는 정수 값에 매핑합니다. 값이 높을수록 클래스의 우선 순위가 증가합니다. 우선순위 클래스를 생성한 후 사양에 우선순위 클래스 이름을 지정하는 Pod를 생성할 수 있습니다. 또한 Pod의 우선 순위에 따라 Pod의 시스템 리소스 사용을 제어할 수 있습니다.
파이프라인의 리소스 할당량을 지정하는 것은 파이프라인 실행에서 생성한 포드의 하위 집합에 대한 리소스 할당량을 설정하는 것과 유사합니다. 다음 단계에서는 우선순위 클래스를 기반으로 리소스 할당량을 지정하여 해결 방법의 예를 제공합니다.
절차
파이프라인에 대한 우선순위 클래스를 생성합니다.
예: 파이프라인의 우선 순위 클래스
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: pipeline1-pc value: 1000000 description: "Priority class for pipeline1"
파이프라인의 리소스 할당량을 생성합니다.
예: 파이프라인의 리소스 할당량
apiVersion: v1 kind: ResourceQuota metadata: name: pipeline1-rq spec: hard: cpu: "1000" memory: 200Gi pods: "10" scopeSelector: matchExpressions: - operator : In scopeName: PriorityClass values: ["pipeline1-pc"]
파이프라인의 리소스 할당량 사용량을 확인합니다.
예: 파이프라인의 리소스 할당량 사용 확인
$ oc describe quota
샘플 출력
Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 0 1k memory 0 200Gi pods 0 10
포드가 실행 중이 아니므로 할당량이 사용되지 않습니다.
파이프라인 및 작업을 생성합니다.
예: 파이프라인에 대한 YAML
apiVersion: tekton.dev/v1alpha1 kind: Pipeline metadata: name: maven-build spec: workspaces: - name: local-maven-repo resources: - name: app-git type: git tasks: - name: build taskRef: name: mvn resources: inputs: - name: source resource: app-git params: - name: GOALS value: ["package"] workspaces: - name: maven-repo workspace: local-maven-repo - name: int-test taskRef: name: mvn runAfter: ["build"] resources: inputs: - name: source resource: app-git params: - name: GOALS value: ["verify"] workspaces: - name: maven-repo workspace: local-maven-repo - name: gen-report taskRef: name: mvn runAfter: ["build"] resources: inputs: - name: source resource: app-git params: - name: GOALS value: ["site"] workspaces: - name: maven-repo workspace: local-maven-repo
예: 파이프라인의 작업에 대한 YAML
apiVersion: tekton.dev/v1alpha1 kind: Task metadata: name: mvn spec: workspaces: - name: maven-repo inputs: params: - name: GOALS description: The Maven goals to run type: array default: ["package"] resources: - name: source type: git steps: - name: mvn image: gcr.io/cloud-builders/mvn workingDir: /workspace/source command: ["/usr/bin/mvn"] args: - -Dmaven.repo.local=$(workspaces.maven-repo.path) - "$(inputs.params.GOALS)" priorityClassName: pipeline1-pc
참고파이프라인의 모든 작업이 동일한 우선순위 클래스에 속하는지 확인합니다.
파이프라인 실행을 생성하고 시작합니다.
예: 파이프라인 실행을 위한 YAML
apiVersion: tekton.dev/v1alpha1 kind: PipelineRun metadata: generateName: petclinic-run- spec: pipelineRef: name: maven-build resources: - name: app-git resourceSpec: type: git params: - name: url value: https://github.com/spring-projects/spring-petclinic
포드가 생성되면 파이프라인 실행에 대한 리소스 할당량 사용량을 확인합니다.
예: 파이프라인의 리소스 할당량 사용 확인
$ oc describe quota
샘플 출력
Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 500m 1k memory 10Gi 200Gi pods 1 10
출력은 우선순위 클래스당 리소스 할당량을 지정하여 우선순위 클래스에 속하는 모든 동시 실행 포드에 대해 결합된 리소스 할당량을 관리할 수 있음을 나타냅니다.