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

СТАН ФУНКЦІОНАЛУ: Kubernetes v1.32 [beta] (стандартно увімкнено: false)

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

Про DRA

Функція Kubernetes, яка дозволяє вам запитувати ресурси та ділитися ними з іншими Podʼами. Ці ресурси часто приєднуються до пристроїів, наприклад, до апаратних прискорювачів.

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

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

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

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

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

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

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

Увімкніть групи API DRA

Щоб Kubernetes міг виділяти ресурси для ваших Podʼів за допомогою DRA, виконайте наступні кроки налаштування:

  1. Увімкніть функціональну можливість DynamicResourceAllocation на всіх наступних компонентах:

    • kube-apiserver
    • kube-controller-manager
    • kube-scheduler
    • kubelet
  2. Увімкніть наступні API groups:

    • resource.k8s.io/v1beta1: необхідна для роботи DRA.
    • resource.k8s.io/v1beta2: необов'язкова, рекомендовані покращення для користувачів.

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

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

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

kubectl get deviceclasses

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

No resources found

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

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

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

  1. Переконайтеся, що компонент kube-scheduler має увімкнений feature gate DynamicResourceAllocation та використовує v1 API конфігурації. Якщо ви використовуєте власну конфігурацію, можливо, потрібно виконати додаткові дії для активації плагіна DynamicResource.
  2. Перезапустіть компоненти kube-apiserver та kube-controller-manager, щоб зміни груп API набули чинності.

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

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

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

kubectl get resourceslices

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

NAME                                                  NODE                DRIVER               POOL                             AGE
cluster-1-device-pool-1-driver.example.com-lqx8x      cluster-1-node-1    driver.example.com   cluster-1-device-pool-1-r1gc     7s
cluster-1-device-pool-2-driver.example.com-29t7b      cluster-1-node-2    driver.example.com   cluster-1-device-pool-2-446z     8s

Створіть DeviceClasses

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

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

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

    kubectl get resourceslice <resourceslice-name> -o yaml
    

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

    apiVersion: resource.k8s.io/v1beta1
    kind: ResourceSlice
    # деякі рядки пропущено для зручності
    spec:
      devices:
      - basic:
          attributes:
            type:
              string: gpu
          capacity:
            memory:
              value: 64Gi
          name: gpu-0
      - basic:
          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/v1beta2
     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

Що далі

Змінено July 19, 2025 at 6:51 PM PST: sync upstream (d9621c798a)