Налаштування DRA у кластері

Налаштування DRA у кластері

СТАН ФУНКЦІОНАЛУ: GA since Kubernetes v1.35
More information about this feature

This is a stable feature in Kubernetes, and has been since version v1.35. It was first available in the v1.30 release. You can no longer disable or opt out of this feature or behavior (it is locked); if you explicitly set a value for the associated feature gate DynamicResourceAllocation, Kubernetes ignores it but does not report any error.

На цій сторінці показано, як налаштувати динамічне виділення ресурсів (DRA) у кластері Kubernetes шляхом активації груп API та налаштування класів пристроїв. Ці інструкції призначені для адміністраторів кластерів.

Про DRA

Можливість Kubernetes, яка дозволяє запитувати ресурси та спільно використовувати їх між Podʼами. Часто такими ресурсами є приєднані пристрої, як-от апаратні прискорювачі.

З DRA драйвери пристроїв і адміністратори кластера визначають класи пристроїв, які робочі навантаження можуть запитувати (claim). Kubernetes виділяє відповідні пристрої конкретним запитам (claims) і розміщує відповідні Podʼи на вузлах, які мають доступ до виділених пристроїв.

Переконайтеся, що ви ознайомлені з принципом роботи DRA та термінологією DRA, такою як DeviceClasses, ResourceClaims і ResourceClaimTemplates. Детальніше дивіться Динамічне виділення ресурсів (DRA).

Перш ніж ви розпочнете

Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою minikube або використовувати одну з цих пісочниць:

Версія вашого Kubernetes сервера має бути не старішою ніж v1.34.

Для перевірки версії введіть kubectl version.

  • Підключіть пристрої до вашого кластера безпосередньо або опосередковано. Щоб уникнути можливих проблем із драйверами, дочекайтеся налаштування функції DRA для вашого кластера перед встановленням драйверів.

Опціонально: увімкніть додаткові групи API DRA

Загалом DRA є стабільною функцією в Kubernetes, проте деякі її аспекти можуть бути ще в стадії альфа- або бета-тестування. Якщо ви хочете використовувати будь-який аспект DRA, який ще не є стабільним, а повʼязана з ним функція залежить від спеціального типу API, тоді ви повинні увімкнути відповідні групи альфа- або бета-API.

Деякі старі драйвери або робочі навантаження DRA можуть все ще потребувати API v1beta1 з Kubernetes 1.30 або v1beta2 з Kubernetes 1.32. Тільки якщо потрібна підтримка цих версій, увімкніть наступні групи API:

* `resource.k8s.io/v1beta1`
* `resource.k8s.io/v1beta2`

Альфа-функції з окремими типами API потребують:

  • resource.k8s.io/v1alpha3

Для отримання додаткової інформації дивіться Увімкнення або вимкнення груп API.

Перевірте, що DRA увімкнено

Щоб перевірити правильність налаштування кластера, спробуйте вивести список DeviceClasses:

kubectl get deviceclasses

Якщо конфігурація компонентів була правильною, ви побачите подібний результат:

No resources found

Якщо DRA налаштовано неправильно, результат виконання попередньої команди буде схожий на:

error: the server doesn't have a resource type "deviceclasses"

Наприклад, це може статися, коли група API resource.k8s.io була вимкнена. Аналогічна перевірка застосовується до типів верхнього рівня якості альфа або бета.

Спробуйте наступні кроки для усунення несправностей:

  1. Переконфігуруйте та перезапустіть компонент kube-apiserver.

  2. Якщо повне поле .spec.resourceClaims видаляється з Podʼів, або якщо Podʼи плануються без урахування ResourceClaims, перевірте, чи не вимкнено функціональну можливість DynamicResourceAllocation для kube-apiserver, kube-controller-manager, kube-scheduler або kubelet.

Встановіть драйвери пристроїв

Після активації DRA для вашого кластера ви можете встановити драйвери для підключених пристроїв. Інструкції шукайте у документації власника пристрою або проєкту, що підтримує драйвери пристроїв. Встановлені драйвери мають бути сумісні з DRA.

Щоб перевірити роботу встановлених драйверів, виведіть список ResourceSlices у кластері:

kubectl get resourceslices

Вивід буде схожий на:

NAME                                                  NODE                DRIVER               POOL                             AGE
00000-driver.example.com-cluster-1-node-1-abcde      cluster-1-node-1    driver.example.com   cluster-1-device-pool-1-r1gc     7s
00000-driver.example.com-cluster-1-node-2-fghij      cluster-1-node-2    driver.example.com   cluster-1-device-pool-2-446z     8s

Спробуйте наступні кроки для усунення несправностей:

  1. Перевірте стан драйвера DRA та шукайте повідомлення про помилки щодо публікації ResourceSlices у виводі його логів. Постачальник драйвера може надати додаткові інструкції щодо встановлення та усунення несправностей.

Створіть DeviceClasses

Ви можете визначити категорії пристроїв, які оператори ваших застосунків можуть запитувати у робочих навантаженнях, створюючи DeviceClasses. Деякі постачальники драйверів пристроїв також можуть вказати вам створити DeviceClasses під час встановлення драйверів.

ResourceSlices, які публікує ваш драйвер, містять інформацію про пристрої, якими керує драйвер, такі як ємність, метадані та атрибути. Ви можете використовувати Common Expression Language для фільтрації властивостей у DeviceClasses, що спрощує пошук пристроїв для операторів навантажень.

  1. Щоб знайти властивості пристрою, які можна вибирати у DeviceClasses за допомогою виразів CEL, отримайте специфікацію ResourceSlice:

    kubectl get resourceslice <resourceslice-name> -o yaml
    

    Вивід буде схожий на:

    apiVersion: resource.k8s.io/v1
    kind: ResourceSlice
    # рядки пропущено для ясності
    spec:
      devices:
      - attributes:
          type:
            string: gpu
        capacity:
          memory:
            value: 64Gi
        name: gpu-0
      - attributes:
          type:
            string: gpu
        capacity:
          memory:
            value: 64Gi
        name: gpu-1
      driver: driver.example.com
      nodeName: cluster-1-node-1
    # рядки пропущено для ясності
    

    Ви також можете переглянути документацію постачальника драйверів для доступних властивостей і значень.

  2. Ознайомтеся з прикладом маніфесту DeviceClass, який вибирає будь-який пристрій, керований драйвером пристроїв driver.example.com:

    apiVersion: resource.k8s.io/v1
    kind: DeviceClass
    metadata:
      name: example-device-class
    spec:
      selectors:
      - cel:
          expression: |-
            device.driver == "driver.example.com"
    
  3. Створіть DeviceClass у вашому кластері:

    kubectl apply -f https://k8s.io/examples/dra/deviceclass.yaml
    

Очищення

Щоб видалити DeviceClass, створений у цьому завданні, виконайте команду:

kubectl delete -f https://k8s.io/examples/dra/deviceclass.yaml

Що далі

Змінено November 05, 2026 at 6:43 AM PST: [uk] Add DRA task pages: set up DRA and allocate devices (f6d2a2dbc1)