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

LLMS index: [llms.txt](/llms.txt)

---

<div class="feature-state-notice feature-stable" title="Функціональна можливість: DynamicResourceAllocation">
              <span class="feature-state-name">СТАН ФУНКЦІОНАЛУ:</span> 
              <code>Kubernetes v1.35 [stable]</code>(стандартно увімкнено)</div>


<!-- overview -->

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

<!-- body -->

## Про DRA {#about-dra}

<p>Функція Kubernetes, яка дозволяє вам запитувати ресурси та ділитися ними з іншими Podʼами. Ці ресурси часто приєднуються до <a class='glossary-tooltip' title='Будь-який ресурс, який безпосередньо або опосередковано підключений до вузлів вашого кластера, наприклад, GPU або інші плати.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/reference/glossary/?all=true#term-device' target='_blank' aria-label='пристроїв'>пристроїв</a>, наприклад, до апаратних прискорювачів.</p>
<p>З DRA драйвери пристроїв і адміністратори кластерів визначають <em>класи</em> пристроїв, які доступні для <em>заявки</em> в робочих навантаженнях. Kubernetes виділяє відповідні пристрої для конкретних заявок і розміщує відповідні Podʼи на вузлах, які можуть отримати доступ до виділених пристроїв.</p>

Переконайтеся, що ви ознайомлені з принципом роботи DRA та термінологією DRA, такою як <a class='glossary-tooltip' title='Категорія пристроїв у кластері. Користувачі можуть запитувати певні пристрої з класу DeviceClass.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#deviceclass' target='_blank' aria-label='DeviceClasses'>DeviceClasses</a>, <a class='glossary-tooltip' title='Описує ресурси, які потрібні робочому навантаженню, наприклад, пристрої. ResourceClaims можуть запитувати пристрої з DeviceClasses.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#resourceclaims-templates' target='_blank' aria-label='ResourceClaims'>ResourceClaims</a> і <a class='glossary-tooltip' title='Визначає шаблон для Kubernetes для створення ResourceClaims. Використовується для забезпечення доступу до окремих схожих ресурсів на кожному Podʼі або PodGroup.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#resourceclaims-templates' target='_blank' aria-label='ResourceClaimTemplates'>ResourceClaimTemplates</a>. Детальніше дивіться [Динамічне виділення ресурсів (DRA)](/docs/concepts/scheduling-eviction/dynamic-resource-allocation/).

<!-- prerequisites -->

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

<p>Вам треба мати кластер Kubernetes, а також інструмент командного рядка kubectl має бути налаштований для роботи з вашим кластером. Рекомендується виконувати ці настанови у кластері, що має щонайменше два вузли, які не виконують роль вузлів управління. Якщо у вас немає кластера, ви можете створити його, за допомогою <a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a> або використовувати одну з цих пісочниць:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
 
 Версія вашого Kubernetes сервера має бути не старішою ніж v1.34.
  <p>Для перевірки версії введіть  <code>kubectl version</code>.</p>


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

<!-- steps -->

## Опціонально: увімкніть додаткові групи API DRA {#enable-dra}

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

Деякі старі драйвери або робочі навантаження DRA можуть все ще потребувати API v1beta1 з Kubernetes 1.30 або v1beta2 з Kubernetes 1.32. Тільки якщо потрібна підтримка цих версій, увімкніть наступні <a class='glossary-tooltip' title='Набір повʼязаних шляхів в API Kubernetes.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/overview/kubernetes-api/#api-groups-and-versioning' target='_blank' aria-label='групи API'>групи API</a>:

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

Функції Alpha з окремими типами API потребують:

* `resource.k8s.io/v1alpha3`

Для отримання додаткової інформації дивіться [Увімкнення або вимкнення груп API](/docs/reference/using-api/#enabling-or-disabling).

## Перевірте, що DRA увімкнено {#verify}

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

```shell
kubectl get deviceclasses
```

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

```console
No resources found
```

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

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

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

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

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

1. Якщо повне поле `.spec.resourceClaims` видаляється з Podʼів, або якщо Podʼи плануються без урахування ResourceClaims, перевірте, чи не вимкнено [функціональну можливість](/docs/reference/command-line-tools-reference/feature-gates/) `DynamicResourceAllocation` для kube-apiserver, kube-controller-manager, kube-scheduler або kubelet.

## Встановіть драйвери пристроїв {#install-drivers}

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

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

```shell
kubectl get resourceslices
```

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

```console
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 {#create-deviceclasses}

Ви можете визначити категорії пристроїв, які оператори ваших застосунків можуть використовувати у робочих навантаженнях, створюючи <a class='glossary-tooltip' title='Категорія пристроїв у кластері. Користувачі можуть запитувати певні пристрої з класу DeviceClass.' data-bs-toggle='tooltip' data-bs-placement='top' href='/uk/docs/concepts/scheduling-eviction/dynamic-resource-allocation/#deviceclass' target='_blank' aria-label='DeviceClasses'>DeviceClasses</a>. Деякі постачальники драйверів також можуть рекомендувати створити DeviceClasses під час встановлення драйверів.

ResourceSlices, які публікує ваш драйвер, містять інформацію про пристрої, якими керує драйвер, такі як ємність, метадані та атрибути. Ви можете використовувати <a class='glossary-tooltip' title='Мова виразів, яка розроблена для безпечного виконання коду користувача.' data-bs-toggle='tooltip' data-bs-placement='top' href='https://cel.dev' target='_blank' aria-label='Загальна мова виразів'>Загальна мова виразів</a> для фільтрації властивостей у DeviceClasses, що спрощує пошук пристроїв для операторів навантажень.

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

    ```shell
    kubectl get resourceslice <resourceslice-name> -o yaml
    ```

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

    ```yaml
    apiVersion: resource.k8s.io/v1
    kind: ResourceSlice
    # lines omitted for clarity
    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
    # lines omitted for clarity
    ```

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

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

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    <div class="highlight code-sample">
        <div class="copy-code-icon">
        <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/uk/examples/dra/deviceclass.yaml" download="dra/deviceclass.yaml"><code>dra/deviceclass.yaml</code>
        </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('dra-deviceclass-yaml')" title="Копіювати dra/deviceclass.yaml до буферу обміну"></img></div>
        <div class="includecode" id="dra-deviceclass-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">resource.k8s.io/v1</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">DeviceClass</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">example-device-class</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">selectors</span><span class="p">:</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">cel</span><span class="p">:</span><span class="w">
    </span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">expression</span><span class="p">:</span><span class="w"> </span><span class="p">|-</span><span class="sd">
    </span></span></span><span class="line"><span class="cl"><span class="sd">        device.driver == &#34;driver.example.com&#34;</span><span class="w">
    </span></span></span></code></pre></div></div>
    </div>

3. Створіть DeviceClass у вашому кластері:

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

## очищення {#clean-up}

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

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

## Що далі

* [Дізнайтеся більше про DRA](/docs/concepts/scheduling-eviction/dynamic-resource-allocation)
* [Виділення пристроїв для навантажень за допомогою DRA](/docs/tasks/configure-pod-container/assign-resources/allocate-devices-dra)
