3.2. 使用优先级类指定管道资源配额


PriorityClass 对象将优先级类名称映射到表示其相对优先级的整数值。数值越高,类的优先级越高。创建优先级类后,您可以创建 pod,在其规格中指定优先级类名称。另外,您可以根据 pod 优先级控制 pod 对系统资源的消耗。

为管道指定资源配额类似于为管道运行创建的 pod 子集设置资源配额。以下步骤通过根据优先级类指定资源配额来提供临时解决方案示例。

流程

  1. 为管道创建优先级类。

    示例:管道的优先级类

    Copy to Clipboard Toggle word wrap
    apiVersion: scheduling.k8s.io/v1
    kind: PriorityClass
    metadata:
      name: pipeline1-pc
    value: 1000000
    description: "Priority class for pipeline1"

  2. 为管道创建资源配额。

    示例:管道的资源配额

    Copy to Clipboard Toggle word wrap
    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"]

  3. 验证管道的资源配额使用量。

    示例:验证管道的资源配额使用情况

    Copy to Clipboard Toggle word wrap
    $ oc describe quota

    输出示例

    Copy to Clipboard Toggle word wrap
    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         0     1k
    memory      0     200Gi
    pods        0     10

    由于容器集没有运行,因此配额没有被使用。

  4. 创建管道和任务。

    示例:管道的 YAML

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    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)"

  5. 创建并启动管道运行。

    示例:管道运行的 YAML

    Copy to Clipboard Toggle word wrap
    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 以确保任务在特定节点上执行。

  6. 创建 pod 后,验证管道运行的资源配额使用量。

    示例:验证管道的资源配额使用情况

    Copy to Clipboard Toggle word wrap
    $ oc describe quota

    输出示例

    Copy to Clipboard Toggle word wrap
    Name:       pipeline1-rq
    Namespace:  default
    Resource    Used  Hard
    --------    ----  ----
    cpu         500m  1k
    memory      10Gi  200Gi
    pods        1     10

    输出表明,您可以通过指定每个优先级类的资源配额,为属于优先级类的所有并发运行 pod 管理组合资源配额。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.