• Русский
  • Мониторинг ожидающих workloads

    Alauda Build of Kueue предоставляет функцию VisibilityOnDemand для мониторинга ожидающих workloads. Workload — это приложение, которое выполняется до завершения. Оно может состоять из одного или нескольких подов, которые, слабо или тесно связанные, в совокупности выполняют задачу. Workload является единицей допуска в Alauda Build of Kueue.

    Функция VisibilityOnDemand предоставляет администраторам batch возможность мониторить очередь ожидающих заданий в кластерной очереди и локальной очереди, а пользователям batch — только локальную очередь, помогая им оценить, когда их задания начнут выполняться.

    Вы можете регулировать входящие запросы и большие объемы запросов, а также предоставлять пользователям права на просмотр ожидающих workloads.

    1. API Priority and Fairness

    Alauda Build of Kueue использует Kubernetes API Priority and Fairness (APF) для управления ожидающими workloads. APF — это механизм управления потоком, который позволяет задавать политики на уровне API для регулирования входящих запросов к API-серверу. Он защищает API-сервер от перегрузки неожиданно высоким объемом запросов, при этом защищая критический трафик от эффекта ограничения для workloads с лучшими усилиями (best-effort).

    пример

    apiVersion: flowcontrol.apiserver.k8s.io/v1
    kind: FlowSchema
    metadata:
      labels:
        name: kueue-visibility
        namespace: cpaas-system
    spec:
      distinguisherMethod:
        type: ByUser
      matchingPrecedence: 9000
      priorityLevelConfiguration:
        name: kueue-visibility
      rules:
        - resourceRules:
            - apiGroups:
                - 'visibility.kueue.x-k8s.io'
              clusterScope: true
              namespaces:
                - '*'
              resources:
                - '*'
              verbs:
                - '*'
          subjects:
            - group:
                name: system:unauthenticated
              kind: Group
            - group:
                name: system:authenticated
              kind: Group
    ---
    apiVersion: flowcontrol.apiserver.k8s.io/v1
    kind: PriorityLevelConfiguration
    metadata:
      name: kueue-visibility
      namespace: cpaas-system
    spec:
      limited:
        lendablePercent: 90
        limitResponse:
          queuing:
            handSize: 4
            queueLengthLimit: 50
            queues: 16
          type: Queue
        nominalConcurrencyShares: 10
      type: Limited
    Дополнительные ресурсы

    2. Предоставление прав пользователям

    Вы можете настроить объекты контроля доступа на основе ролей (RBAC) для пользователей вашей установки Alauda Build of Kueue. Эти объекты определяют, какие типы пользователей могут создавать какие типы объектов Alauda Build of Kueue.

    Необходимо предоставить права тем пользователям, которым требуется доступ к конкретным API.

    • Если пользователю нужен доступ к ожидающим workloads из ресурса ClusterQueue, необходимо создать схему ClusterRoleBinding, ссылающуюся на ClusterRole kueue-batch-admin-role.
    • Если пользователю нужен доступ к ожидающим workloads из ресурса LocalQueue, необходимо создать схему RoleBinding, ссылающуюся на ClusterRole kueue-batch-user-role.

    3. Мониторинг ожидающих workloads по требованию

    Для тестирования мониторинга ожидающих workloads необходимо правильно настроить ресурсы ClusterQueue и LocalQueue. После этого можно создавать задания в этой LocalQueue. Kueue управляет объектом workload, созданным из задания, поэтому, когда задание отправляется и насыщает ClusterQueue, соответствующие workloads можно увидеть в списке ожидающих workloads.

    3.1. Предварительные требования

    • Web CLI Alauda Container Platform имеет связь с вашим кластером.
    • У вас есть права администратора кластера.

    Следующая процедура описывает, как установить и протестировать мониторинг workloads.

    3.2. Процедура

    1. Создайте ресурсы, выполнив следующую команду:

      cat <<EOF | kubectl create -f -
      ---
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: ResourceFlavor
      metadata:
        name: "default-flavor"
      ---
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: ClusterQueue
      metadata:
        name: "cluster-queue"
      spec:
        namespaceSelector: {} # соответствие всем.
        resourceGroups:
        - coveredResources: ["cpu", "memory"]
          flavors:
          - name: "default-flavor"
            resources:
            - name: "cpu"
              nominalQuota: 9
            - name: "memory"
              nominalQuota: 36Gi
      ---
      apiVersion: kueue.x-k8s.io/v1beta2
      kind: LocalQueue
      metadata:
        namespace: "default"
        name: "user-queue"
      spec:
        clusterQueue: "cluster-queue"
      ---
      EOF
    2. Создайте следующий файл с манифестом задания:

      cat > job.yaml << EOF
      apiVersion: batch/v1
      kind: Job
      metadata:
        generateName: sample-job-
        namespace: default
        labels:
          kueue.x-k8s.io/queue-name: user-queue
      spec:
        parallelism: 3
        completions: 3
        suspend: true
        template:
          spec:
            containers:
            - name: dummy
              image: registry.k8s.io/e2e-test-images/agnhost:2.53
              command: [ "/bin/sh" ]
              args: [ "-c", "sleep 60" ]
              resources:
                requests:
                  cpu: "1"
                  memory: "200Mi"
            restartPolicy: Never
      EOF
    3. Создайте шесть заданий, выполнив следующую команду:

      for i in {1..6}; do kubectl create -f job.yaml;done

    3.2.1. Просмотр ожидающих workloads в ClusterQueue

    Для просмотра всех ожидающих workloads на уровне кластера администраторы могут использовать endpoint видимости объекта ClusterQueue из visibility API для Alauda Build of Kueue. Этот endpoint возвращает список всех workloads, которые в данный момент ожидают допуска этим ресурсом ClusterQueue.

    Процедура
    1. Для просмотра ожидающих workloads в ClusterQueue выполните следующую команду:

      kubectl get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/clusterqueues/cluster-queue/pendingworkloads"

      Вы должны получить результат, похожий на:

      {
       "kind": "PendingWorkloadsSummary",
       "apiVersion": "visibility.kueue.x-k8s.io/v1beta2",
       "metadata": {
         "creationTimestamp": null
       },
       "items": [
         {
           "metadata": {
             "name": "job-sample-job-jrjfr-8d56e",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-jrjfr",
                 "uid": "5863cf0e-b0e7-43bf-a445-f41fa1abedfa"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 0,
           "positionInLocalQueue": 0
         },
         {
           "metadata": {
             "name": "job-sample-job-jg9dw-5f1a3",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-jg9dw",
                 "uid": "fd5d1796-f61d-402f-a4c8-cbda646e2676"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 1,
           "positionInLocalQueue": 1
         },
         {
           "metadata": {
             "name": "job-sample-job-t9b8m-4e770",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-t9b8m",
                 "uid": "64c26c73-6334-4d13-a1a8-38d99196baa5"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 2,
           "positionInLocalQueue": 2
         }
       ]
      }
      

      Вы можете передать следующие необязательные параметры запроса:

      limit <integer>: по умолчанию 1000. Указывает максимальное количество ожидающих workloads, которые должны быть получены.

      offset <integer>: по умолчанию 0. Указывает позицию первого ожидающего workload, который должен быть получен, начиная с 0.

    2. Чтобы просмотреть только 1 ожидающий workload, начиная с позиции 1 в ClusterQueue, выполните:

      kubectl get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/clusterqueues/cluster-queue/pendingworkloads?limit=1&offset=1"

    3.2.2. Просмотр ожидающих workloads в LocalQueue

    Для просмотра ожидающих workloads, отправленных конкретным арендатором в их namespace, пользователи могут запросить endpoint видимости ресурса LocalQueue из visibility API для Alauda Build of Kueue. Это предоставляет упорядоченный список их заданий, ожидающих в этой очереди.

    Процедура
    1. Для просмотра ожидающих workloads в LocalQueue выполните следующую команду:

      kubectl get --raw /apis/visibility.kueue.x-k8s.io/v1beta2/namespaces/default/localqueues/user-queue/pendingworkloads

      Вы должны получить результат, похожий на:

      {
       "kind": "PendingWorkloadsSummary",
       "apiVersion": "visibility.kueue.x-k8s.io/v1beta2",
       "metadata": {
         "creationTimestamp": null
       },
       "items": [
         {
           "metadata": {
             "name": "job-sample-job-jrjfr-8d56e",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-jrjfr",
                 "uid": "5863cf0e-b0e7-43bf-a445-f41fa1abedfa"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 0,
           "positionInLocalQueue": 0
         },
         {
           "metadata": {
             "name": "job-sample-job-jg9dw-5f1a3",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-jg9dw",
                 "uid": "fd5d1796-f61d-402f-a4c8-cbda646e2676"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 1,
           "positionInLocalQueue": 1
         },
         {
           "metadata": {
             "name": "job-sample-job-t9b8m-4e770",
             "namespace": "default",
             "creationTimestamp": "2023-12-05T15:42:03Z",
             "ownerReferences": [
               {
                 "apiVersion": "batch/v1",
                 "kind": "Job",
                 "name": "sample-job-t9b8m",
                 "uid": "64c26c73-6334-4d13-a1a8-38d99196baa5"
               }
             ]
           },
           "priority": 0,
           "localQueueName": "user-queue",
           "positionInClusterQueue": 2,
           "positionInLocalQueue": 2
         }
       ]
      }

      Вы можете передать следующие необязательные параметры запроса:

      limit <integer>: по умолчанию 1000. Указывает максимальное количество ожидающих workloads, которые должны быть получены.

      offset <integer>: по умолчанию 0. Указывает позицию первого ожидающего workload, который должен быть получен, начиная с 0.

    2. Чтобы просмотреть только один ожидающий workload, начиная с позиции 0 в LocalQueue, выполните следующую команду:

      kubectl get --raw "/apis/visibility.kueue.x-k8s.io/v1beta2/namespaces/default/localqueues/user-queue/pendingworkloads?limit=1&offset=0"