ResourceSlice
ResourceSlice представляет один или несколько ресурсов в пуле аналогичных ресурсов, управляемом общим драйвером. Пул может охватывать несколько ResourceSlice, а точное количество ResourceSlice в пуле определяется драйвером.
На данный момент поддерживаются только устройства с атрибутами и ёмкостями. Каждое устройство в данном пуле должно иметь уникальное имя независимо от количества ResourceSlice. ResourceSlice, в котором публикуется устройство, может со временем меняться. Уникальный идентификатор устройства — это кортеж <driver name>, <pool name>, <device name>.
При необходимости обновить пул драйвер увеличивает значение pool.Spec.Pool.Generation и обновляет все ResourceSlice, указывая в них новый номер и новые определения ресурсов. Потребитель должен использовать только ResourceSlice с наибольшим номером поколения и игнорировать все остальные.
При выделении всех ресурсов в пуле, соответствующих определённым критериям, или при поиске наилучшего решения среди нескольких вариантов потребителю следует проверять количество ResourceSlice в пуле (оно указано в каждом ResourceSlice), чтобы определить, является ли его представление пула полным. Если нет, потребителю следует дождаться завершения обновления пула драйвером.
Для ресурсов, не привязанных к узлу, имя узла не указывается. Вместо этого драйвер может использовать селектор узлов, чтобы указать, где доступны устройства.
apiVersion: resource.k8s.io/v1
import "k8s.io/api/resource/v1"
ResourceSlice
ResourceSlice представляет один или несколько ресурсов в пуле аналогичных ресурсов, управляемом общим драйвером. Пул может охватывать несколько ResourceSlice, а точное количество ResourceSlice в пуле определяется драйвером.
На данный момент поддерживаются только устройства с атрибутами и ёмкостями. Каждое устройство в данном пуле должно иметь уникальное имя независимо от количества ResourceSlice. ResourceSlice, в котором публикуется устройство, может со временем меняться. Уникальный идентификатор устройства — это кортеж <driver name>, <pool name>, <device name>.
При необходимости обновить пул драйвер увеличивает значение pool.Spec.Pool.Generation и обновляет все ResourceSlice, указывая в них новый номер и новые определения ресурсов. Потребитель должен использовать только ResourceSlice с наибольшим номером поколения и игнорировать все остальные.
При выделении всех ресурсов в пуле, соответствующих определённым критериям, или при поиске наилучшего решения среди нескольких вариантов потребителю следует проверять количество ResourceSlice в пуле (оно указано в каждом ResourceSlice), чтобы определить, является ли его представление пула полным. Если нет, потребителю следует дождаться завершения обновления пула драйвером.
Для ресурсов, не привязанных к узлу, имя узла не указывается. Вместо этого драйвер может использовать селектор узлов, чтобы указать, где доступны устройства.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версию схемы этого представления объекта. Серверы должны преобразовывать распознаваемые схемы в последнее внутреннее значение и могут отклонять нераспознаваемые значения. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
kindstring |
Kind — строковое значение, обозначающее REST-ресурс, представленный этим объектом. Серверы могут определять его по конечной точке, на которую клиент отправляет запросы. Не может быть изменено. Указывается в CamelCase. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataObjectMeta |
Стандартные метаданные объекта |
spec *ResourceSliceSpec |
Содержит сведения, опубликованные драйвером. Изменение spec автоматически увеличивает номер metadata.generation. |
ResourceSliceSpec
ResourceSliceSpec содержит сведения, опубликованные драйвером в одном ResourceSlice.
| Поле | Описание |
|---|---|
allNodesboolean |
AllNodes указывает, что все узлы имеют доступ к ресурсам в пуле. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection. |
devicesDevice array |
Devices содержит некоторые или все устройства в этом пуле. Не должно содержать более 128 элементов. Если какое-либо устройство использует taints или потребляет счётчики, ограничение составляет 64 элемента. В ResourceSlice может быть задано только одно из полей Devices и SharedCounters. |
driver *string |
Driver идентифицирует драйвер DRA, предоставляющий сведения о ёмкости. Для перечисления только объектов ResourceSlice с определённым именем драйвера можно использовать селектор полей. Значение должно быть DNS-поддоменом и должно оканчиваться DNS-доменом, принадлежащим поставщику драйвера. Следует использовать только строчные символы. Это поле неизменяемо. |
nodeNamestring |
NodeName идентифицирует узел, предоставляющий ресурсы в этом пуле. Для перечисления только объектов ResourceSlice, относящихся к определённому узлу, можно использовать селектор полей. Это поле можно использовать для ограничения доступа узлов к ResourceSlice с тем же именем узла. Оно также указывает средствам автоматического масштабирования, что добавление новых узлов того же типа, что и у старого узла, может сделать доступными новые ресурсы. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection. Это поле неизменяемо. |
nodeSelectorNodeSelector |
NodeSelector определяет, какие узлы имеют доступ к ресурсам в пуле, если пул не ограничен одним узлом. Должен содержать ровно один термин. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection. |
perDeviceNodeSelectionboolean |
PerDeviceNodeSelection определяет, задаётся ли доступ узлов к ресурсам в пуле на уровне ResourceSlice или для каждого устройства отдельно. Если установлено значение true, для каждого устройства, определённого в ResourceSlice, это значение необходимо указать отдельно. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection. |
pool *ResourcePool |
Pool описывает пул, к которому относится этот ResourceSlice. |
sharedCountersCounterSet array |
SharedCounters определяет список наборов счётчиков, каждый из которых имеет имя и список доступных счётчиков. Имена наборов счётчиков должны быть уникальными в ResourcePool. В ResourceSlice может быть задано только одно из полей Devices и SharedCounters. Максимальное количество наборов счётчиков — 8. |
ResourceSliceList
ResourceSliceList — это коллекция ResourceSlice.
| Поле | Описание |
|---|---|
apiVersionstring |
APIVersion определяет версию схемы этого представления объекта. Серверы должны преобразовывать распознаваемые схемы в последнее внутреннее значение и могут отклонять нераспознаваемые значения. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
items *ResourceSlice array |
Items — это список ресурсов ResourceSlice. |
kindstring |
Kind — строковое значение, обозначающее REST-ресурс, представленный этим объектом. Серверы могут определять его по конечной точке, на которую клиент отправляет запросы. Не может быть изменено. Указывается в CamelCase. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadataListMeta |
Стандартные метаданные списка |
CapacityRequestPolicy
CapacityRequestPolicy определяет, как запросы потребляют ёмкость устройства.
Нельзя задавать более одного ValidRequestValues.
| Поле | Описание |
|---|---|
defaultQuantity |
Default задаёт, какая часть этой ёмкости потребляется запросом, в котором для неё нет записи в Capacity объекта DeviceRequest. |
validRangeCapacityRequestPolicyRange |
ValidRange определяет допустимый диапазон значений количества в потребляющих запросах. Если это поле задано, необходимо определить Default, и его значение должно входить в заданный ValidRange. Если запрошенное количество не входит в заданный диапазон, запрос нарушает политику, и это устройство нельзя выделить. Если запрос не содержит запись об этой ёмкости, используется значение Default. |
validValuesQuantity array |
ValidValues определяет набор допустимых значений количества в потребляющих запросах. Не должно содержать более 10 элементов. Значения должны быть отсортированы по возрастанию. Если это поле задано, необходимо определить Default, и его значение должно входить в список ValidValues. Если запрошенное количество не совпадает ни с одним допустимым значением, но меньше некоторых допустимых значений, планировщик вычисляет наименьшее допустимое значение, большее или равное запросу. Иными словами: min(ceil(requestedValue) ∈ validValues), где requestedValue ≤ max(validValues). Если запрошенное количество превышает все допустимые значения, запрос нарушает политику, и это устройство нельзя выделить. |
CapacityRequestPolicyRange
CapacityRequestPolicyRange определяет допустимый диапазон значений потребляемой ёмкости.
- Если запрошенное количество меньше Min, оно округляется вверх до значения Min.
- Если задано Step и запрошенное количество находится между Min и Max, но не кратно Step, оно округляется вверх до следующего значения, равного Min + (n * Step).
- Если Step не задан, запрошенное количество используется без изменений, если оно находится в диапазоне от Min до Max (если Max задан).
- Если запрошенное или округлённое количество превышает Max (если он задан), запрос не соответствует политике, и устройство нельзя выделить.
| Поле | Описание |
|---|---|
maxQuantity |
Max задаёт верхний предел запрашиваемой ёмкости. Max должен быть меньше или равен значению ёмкости. Min и requestPolicy.default должны быть меньше или равны максимальному значению. |
min *Quantity |
Min задаёт минимальную ёмкость, допустимую для запроса на потребление. Min должен быть больше или равен нулю и меньше или равен значению ёмкости. requestPolicy.default должен быть больше или равен минимальному значению. |
stepQuantity |
Step задаёт размер шага между допустимыми значениями ёмкости в диапазоне. Max (если задан) и requestPolicy.default должны быть кратны Step. Min + Step должно быть меньше или равно значению ёмкости. |
Counter
Counter описывает количество, связанное с устройством.
| Поле | Описание |
|---|---|
value *Quantity |
Value определяет, какое количество определённого счётчика устройства доступно. |
CounterSet
CounterSet определяет именованный набор счётчиков, доступных для использования устройствами, определёнными в ResourcePool.
Счётчики нельзя выделить самостоятельно, но на них могут ссылаться устройства. При выделении устройства используемая им часть счётчиков перестаёт быть доступной для других устройств.
| Поле | Описание |
|---|---|
counters *object |
Counters определяет набор счётчиков для этого CounterSet. Имя каждого счётчика в наборе должно быть уникальным и соответствовать формату DNS-метки. Максимальное количество счётчиков — 32. |
name *string |
Name задаёт имя набора счётчиков. Оно должно соответствовать формату DNS-метки. |
Device
Device представляет отдельный экземпляр оборудования, который можно выбрать на основе его атрибутов. Помимо имени, должно быть задано ровно одно поле.
| Поле | Описание |
|---|---|
allNodesboolean |
AllNodes указывает, что все узлы имеют доступ к устройству. Должно быть задано только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes. |
allowMultipleAllocationsboolean |
AllowMultipleAllocations указывает, разрешено ли выделять устройство для нескольких DeviceRequest. Если AllowMultipleAllocations имеет значение true, устройство можно выделить более одного раза, и вся его ёмкость доступна для потребления независимо от того, определена ли requestPolicy. |
attributesobject |
Attributes определяет набор атрибутов этого устройства. Имя каждого атрибута в наборе должно быть уникальным. Общее количество атрибутов и ёмкостей не должно превышать 32. |
bindingConditionsstring array |
BindingConditions определяет условия для продолжения привязки. Чтобы продолжить привязку пода к узлу при планировании пода, все эти условия должны быть указаны в условиях состояния устройства со значением True. Максимальное количество условий привязки — 4. Условия должны быть допустимыми строками типа условия. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus. |
bindingFailureConditionsstring array |
BindingFailureConditions определяет условия сбоя привязки. Они могут быть указаны в условиях состояния устройства. Если для любого из них задано значение "True", произошёл сбой привязки. Максимальное количество условий сбоя привязки — 4. Условия должны быть допустимыми строками типа условия. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus. |
bindsToNodeboolean |
BindsToNode указывает, должно ли использование выделения, включающего это устройство, быть ограничено именно тем узлом, который был выбран при выделении заявки. Если установлено значение true, планировщик задаст ResourceClaim.Status.Allocation.NodeSelector так, чтобы он соответствовал узлу, на котором было выполнено выделение. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus. |
capacityobject |
Capacity определяет набор ёмкостей этого устройства. Имя каждой ёмкости в наборе должно быть уникальным. Общее количество атрибутов и ёмкостей не должно превышать 32. |
consumesCountersDeviceCounterConsumption array |
ConsumesCounters определяет список ссылок на sharedCounters и набор счётчиков, которые устройство будет потреблять из этих наборов счётчиков. Для каждого counterSet может быть только одна запись. Максимальное количество потреблений счётчиков устройством — 2. |
name *string |
Name — уникальный идентификатор устройства среди всех устройств, управляемых драйвером в пуле. Должен соответствовать формату DNS-метки. |
nodeAllocatableResourceMappingsobject |
NodeAllocatableResourceMappings определяет сопоставление ресурсов узла, которыми управляет драйвер DRA, предоставляющий это устройство. Сюда входят ресурсы, которые сейчас указаны в `status.allocatable` объекта v1.Node и не являются расширенными ресурсами (см. https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#extended-resources). Примеры: "cpu", "memory", "ephemeral-storage" и hugepages. Помимо стандартных запросов, задаваемых через `spec` пода, эти ресурсы также можно запросить через заявки и выделить с помощью драйвера DRA. Например, драйвер DRA для CPU может выделять эксклюзивные CPU или дополнительные зависимости устройства-ускорителя от памяти узла. Ключами этой карты являются имена выделяемых ресурсов узла (например, "cpu", "memory"). Имена расширенных ресурсов нельзя использовать в качестве ключей. |
nodeNamestring |
NodeName идентифицирует узел, на котором доступно устройство. Должно быть задано только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes. |
nodeSelectorNodeSelector |
NodeSelector определяет узлы, на которых доступно устройство. Должен содержать ровно один термин. Должен быть задан только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes. |
taintsDeviceTaint array |
Если указано, это taints, определённые драйвером. Максимальное количество taints — 16. Если taints заданы хотя бы для одного устройства в ResourceSlice, максимальное количество устройств в ResourceSlice составляет 64 вместо 128. Это поле бета-версии; для его использования необходимо включить функциональный шлюз DRADeviceTaints. |
DeviceAttribute
Для DeviceAttribute должно быть задано ровно одно поле.
| Поле | Описание |
|---|---|
boolboolean |
BoolValue — значение true или false. |
boolsboolean array |
BoolValues — непустой список значений true или false. |
intinteger |
IntValue — число. |
intsinteger array |
IntValues — непустой список чисел. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes. |
stringstring |
StringValue — строка. Длина не должна превышать 64 символа. |
stringsstring array |
StringValues — непустой список строк. Длина каждой строки не должна превышать 64 символа. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes. |
versionstring |
VersionValue — семантическая версия согласно спецификации semver.org 2.0.0. Длина не должна превышать 64 символа. |
versionsstring array |
VersionValues — непустой список семантических версий согласно спецификации semver.org 2.0.0. Длина каждой строки версии не должна превышать 64 символа. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes. |
DeviceCapacity
DeviceCapacity описывает количество, связанное с устройством.
| Поле | Описание |
|---|---|
requestPolicyCapacityRequestPolicy |
RequestPolicy определяет, как должна потребляться эта DeviceCapacity, если устройство разрешено совместно использовать нескольким выделениям. Чтобы задать requestPolicy, для Device должно быть установлено allowMultipleAllocations со значением true. Если поле не задано, запросы ёмкости не ограничены: запросы могут потреблять любое количество ёмкости, пока суммарное потребление всеми выделениями не превышает заданную ёмкость устройства. Если request также не задан, по умолчанию используется полное значение ёмкости. |
value *Quantity |
Value определяет количество ёмкости данного типа у устройства. Это поле отражает фиксированную общую ёмкость и не изменяется. Потреблённое количество отслеживается планировщиком отдельно и не влияет на это значение. |
DeviceCounterConsumption
DeviceCounterConsumption определяет набор счётчиков, которые устройство будет потреблять из CounterSet.
| Поле | Описание |
|---|---|
counterSet *string |
CounterSet — имя набора, из которого будут потребляться определённые счётчики. |
counters *object |
Counters определяет счётчики, которые будет потреблять устройство. Максимальное количество счётчиков — 32. |
DeviceTaint
Устройство, к которому прикреплён этот taint, оказывает указанное "воздействие" на любую заявку, которая не допускает этот taint, а через заявку — на поды, использующие её.
| Поле | Описание |
|---|---|
effect *string |
Воздействие taint на заявки, которые его не допускают, и через такие заявки — на использующие их поды. Допустимые воздействия: None, NoSchedule и NoExecute. Значение PreferNoSchedule, используемое для узлов, здесь недопустимо. В будущем могут быть добавлены другие воздействия. Потребители должны трактовать неизвестные воздействия как None. Возможные значения перечисления: - `"NoExecute"` Выселить все уже запущенные поды, которые не допускают taint устройства. - `"NoSchedule"` Не разрешать планирование новых подов, использующих устройство с taint, если они не допускают этот taint, но разрешать запуск всех подов, переданных Kubelet в обход планировщика, и продолжать выполнение всех уже запущенных подов. - `"None"` Воздействия нет; taint носит исключительно информационный характер. |
key *string |
Ключ taint, применяемого к устройству. Должен быть именем метки. |
timeAddedTime |
TimeAdded указывает время добавления taint или (только в DeviceTaintRule) изменения его воздействия. Если значение не задано, оно добавляется автоматически при создании или обновлении. Кроме того, в DeviceTaintRule при обновлении указанное значение заменяется текущим временем, если оно совпадает со старым значением, а новое воздействие отличается. Можно изменить ключ и/или значение, не меняя воздействие; в этом случае метка времени не обновляется, поскольку использующее её выселение либо уже началось (NoExecute), либо ещё не началось (NoEffect, NoSchedule). |
valuestring |
Значение taint, соответствующее ключу taint. Должно быть значением метки. |
NodeAllocatableResourceMapping
NodeAllocatableResourceMapping определяет преобразование запрошенных единиц устройства/ёмкости DRA в соответствующее количество выделяемого ресурса узла.
| Поле | Описание |
|---|---|
allocationMultiplierQuantity |
AllocationMultiplier используется как множитель для количества выделенных устройств или выделенной ёмкости в заявке. Если значение не указано, по умолчанию используется 1. Использование этого поля также зависит от того, задан ли `capacityKey`. 1. Если `capacityKey` НЕ задан: `allocationMultiplier` умножает количество устройств, выделенных для заявки. a. Драйвер DRA, представляющий каждое ядро CPU как устройство, указал бы {ResourceName: "cpu", allocationMultiplier: "2"} в своём `nodeAllocatableResourceMappings`. Если для заявки выделено 4 устройства, 4 * 2 CPU будут считаться выделенными и вычитаться из ёмкости узла. b. Устройство GPU, которому требуется дополнительная память узла для каждого выделения GPU, указало бы {ResourceName: "memory", allocationMultiplier: "2Gi"}. Каждый выделенный экземпляр устройства GPU этого типа будет учитываться как 2Gi памяти. 2. Если `capacityKey` задан: `allocationMultiplier` умножается на потреблённое количество этой ёмкости. Итоговое количество выделяемого ресурса узла равно `consumedCapacity[capacityKey]` * `allocationMultiplier`. Например, если потребляется ёмкость устройства "dra.example.com/cores" и каждое "core" предоставляет 2 "cpu", сопоставление будет таким: {ResourceName: "cpu", capacityKey: "dra.example.com/cores", allocationMultiplier: "2"}. Если заявка потребляет 8 "dra.example.com/cores", потребление CPU составит 8 * 2 = 16. |
capacityKeystring |
CapacityKey ссылается на имя ёмкости, заданное в качестве ключа в карте `spec.devices[*].capacity`. Если это поле задано, значение, связанное с этим ключом в карте `status.allocation.devices.results[*].consumedCapacity` (для определённого выделения заявки), определяет базовое количество для выделяемого ресурса узла. Если также задан `allocationMultiplier`, он умножается на базовое количество. Например, если в `spec.devices[*].capacity` есть запись "dra.example.com/memory": "128Gi" и для этого поля задано значение "dra.example.com/memory", то для выделения заявки, потребляющего { "dra.example.com/memory": "4Gi" }, базовое количество для сопоставления с выделяемым ресурсом узла будет равно "4Gi", а `allocationMultiplier` следует опустить или задать равным "1". |
NodeSelectorRequirement
Требование селектора узлов — это селектор, содержащий значения, ключ и оператор, связывающий ключ со значениями.
| Поле | Описание |
|---|---|
key *string |
Ключ метки, к которому применяется селектор. |
operator *string |
Определяет отношение ключа к набору значений. Допустимые операторы: In, NotIn, Exists, DoesNotExist, Gt и Lt. Возможные значения перечисления: - `"DoesNotExist"` - `"Exists"` - `"Gt"` - `"In"` - `"Lt"` - `"NotIn"` |
valuesstring array |
Массив строковых значений. Если оператор — In или NotIn, массив values должен быть непустым. Если оператор — Exists или DoesNotExist, массив values должен быть пустым. Если оператор — Gt или Lt, массив values должен содержать один элемент, который будет интерпретирован как целое число. Этот массив заменяется при применении стратегического патча слияния. |
ResourcePool
ResourcePool описывает пул, к которому относятся ResourceSlice.
| Поле | Описание |
|---|---|
generation *integer |
Generation отслеживает изменения пула с течением времени. При любом изменении одного или нескольких ресурсов в пуле драйвер должен изменить поколение во всех ResourceSlice, входящих в этот пул. Потребителям ResourceSlice следует учитывать только ресурсы из пула с наибольшим номером поколения. Драйверы могут сбрасывать номер поколения; это не должно создавать проблем для потребителей, если все ResourceSlice в пуле обновлены соответствующим образом или удалены. В сочетании с ResourceSliceCount этот механизм позволяет потребителям обнаруживать пулы, состоящие из нескольких ResourceSlice и находящиеся в неполном состоянии. |
name *string |
Name используется для идентификации пула. Для устройств, локальных для узла, это часто имя узла, но это не обязательно. Длина не должна превышать 253 символа; значение должно состоять из одного или нескольких DNS-поддоменов, разделённых косой чертой. Это поле неизменяемо. |
resourceSliceCount *integer |
ResourceSliceCount — общее количество ResourceSlice в пуле для этого номера поколения. Значение должно быть больше нуля. Потребители могут использовать его, чтобы проверить, увидели ли они все ResourceSlice, относящиеся к одному пулу. |
© 2026 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
Copyright © 2026 The Linux Foundation ®. All rights reserved.
https://kubernetes.io/docs/reference/kubernetes-api/resource/resource-slice-v1/