3.2. 使用优先级类指定管道资源配额
PriorityClass
对象将优先级类名称映射到表示其相对优先级的整数值。数值越高,类的优先级越高。创建优先级类后,您可以创建 pod,在其规格中指定优先级类名称。另外,您可以根据 pod 优先级控制 pod 对系统资源的消耗。
为管道指定资源配额类似于为管道运行创建的 pod 子集设置资源配额。以下步骤通过根据优先级类指定资源配额来提供临时解决方案示例。
流程
为管道创建优先级类。
示例:管道的优先级类
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: pipeline1-pc value: 1000000 description: "Priority class for pipeline1"
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: pipeline1-pc value: 1000000 description: "Priority class for pipeline1"
为管道创建资源配额。
示例:管道的资源配额
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"]
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"]
验证管道的资源配额使用量。
示例:验证管道的资源配额使用情况
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe quota
$ oc describe quota
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 0 1k memory 0 200Gi pods 0 10
Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 0 1k memory 0 200Gi pods 0 10
由于容器集没有运行,因此配额没有被使用。
创建管道和任务。
示例:管道的 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: tekton.dev/v1 kind: Pipeline metadata: name: maven-build spec: params: - name: GIT_URL workspaces: - name: local-maven-repo - name: source tasks: - name: git-clone taskRef: resolver: cluster params: - name: kind value: task - name: name value: git-clone - name: namespace value: openshift-pipelines workspaces: - name: output workspace: source params: - name: URL value: $(params.GIT_URL) - name: build taskRef: name: mvn runAfter: ["git-clone"] params: - name: GOALS value: ["package"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source - name: int-test taskRef: name: mvn runAfter: ["build"] params: - name: GOALS value: ["verify"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source - name: gen-report taskRef: name: mvn runAfter: ["build"] params: - name: GOALS value: ["site"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source
apiVersion: tekton.dev/v1 kind: Pipeline metadata: name: maven-build spec: params: - name: GIT_URL workspaces: - name: local-maven-repo - name: source tasks: - name: git-clone taskRef: resolver: cluster params: - name: kind value: task - name: name value: git-clone - name: namespace value: openshift-pipelines workspaces: - name: output workspace: source params: - name: URL value: $(params.GIT_URL) - name: build taskRef: name: mvn runAfter: ["git-clone"] params: - name: GOALS value: ["package"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source - name: int-test taskRef: name: mvn runAfter: ["build"] params: - name: GOALS value: ["verify"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source - name: gen-report taskRef: name: mvn runAfter: ["build"] params: - name: GOALS value: ["site"] workspaces: - name: maven-repo workspace: local-maven-repo - name: source workspace: source
示例:管道中任务的 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: tekton.dev/v1 kind: Task metadata: name: mvn spec: workspaces: - name: maven-repo - name: source params: - name: GOALS description: The Maven goals to run type: array default: ["package"] steps: - name: mvn image: gcr.io/cloud-builders/mvn workingDir: $(workspaces.source.path) command: ["/usr/bin/mvn"] args: - -Dmaven.repo.local=$(workspaces.maven-repo.path) - "$(params.GOALS)"
apiVersion: tekton.dev/v1 kind: Task metadata: name: mvn spec: workspaces: - name: maven-repo - name: source params: - name: GOALS description: The Maven goals to run type: array default: ["package"] steps: - name: mvn image: gcr.io/cloud-builders/mvn workingDir: $(workspaces.source.path) command: ["/usr/bin/mvn"] args: - -Dmaven.repo.local=$(workspaces.maven-repo.path) - "$(params.GOALS)"
创建并启动管道运行。
示例:管道运行的 YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: tekton.dev/v1 kind: PipelineRun metadata: generateName: petclinic-run- spec: pipelineRef: name: maven-build params: - name: GIT_URL value: https://github.com/spring-projects/spring-petclinic taskRunTemplate: podTemplate: priorityClassName: pipeline1-pc workspaces: - name: local-maven-repo emptyDir: {} - name: source volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 200M
apiVersion: tekton.dev/v1 kind: PipelineRun metadata: generateName: petclinic-run- spec: pipelineRef: name: maven-build params: - name: GIT_URL value: https://github.com/spring-projects/spring-petclinic taskRunTemplate: podTemplate: priorityClassName: pipeline1-pc workspaces: - name: local-maven-repo emptyDir: {} - name: source volumeClaimTemplate: spec: accessModes: - ReadWriteOnce resources: requests: storage: 200M
注意管道运行可能会失败,并显示错误:
failed quota: <quota name> must specify cpu, memory
。要避免这个错误,请为命名空间设置一个限制范围,其中
LimitRange
对象中的默认值应用到构建过程中创建的 pod。有关设置限制范围的更多信息,请参阅附加资源部分中的限制范围限制资源消耗。
注意从 OpenShift Pipelines 1.17 开始,您为任务设置的优先级类适用于为任务创建的所有 pod,包括 OpenShift Pipelines 创建的关联性助手 pod 以确保任务在特定节点上执行。
创建 pod 后,验证管道运行的资源配额使用量。
示例:验证管道的资源配额使用情况
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe quota
$ oc describe quota
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 500m 1k memory 10Gi 200Gi pods 1 10
Name: pipeline1-rq Namespace: default Resource Used Hard -------- ---- ---- cpu 500m 1k memory 10Gi 200Gi pods 1 10
输出表明,您可以通过指定每个优先级类的资源配额,为属于优先级类的所有并发运行 pod 管理组合资源配额。