Spec-Zone.ru › Kubernetes

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), чтобы определить, является ли его представление пула полным. Если нет, потребителю следует дождаться завершения обновления пула драйвером.

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

Поле Описание
apiVersion
string
APIVersion определяет версию схемы этого представления объекта. Серверы должны преобразовывать распознаваемые схемы в последнее внутреннее значение и могут отклонять нераспознаваемые значения. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind
string
Kind — строковое значение, обозначающее REST-ресурс, представленный этим объектом. Серверы могут определять его по конечной точке, на которую клиент отправляет запросы. Не может быть изменено. Указывается в CamelCase. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata
ObjectMeta
Стандартные метаданные объекта
spec *
ResourceSliceSpec
Содержит сведения, опубликованные драйвером. Изменение spec автоматически увеличивает номер metadata.generation.

ResourceSliceSpec

ResourceSliceSpec содержит сведения, опубликованные драйвером в одном ResourceSlice.

Поле Описание
allNodes
boolean
AllNodes указывает, что все узлы имеют доступ к ресурсам в пуле. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection.
devices
Device array
Devices содержит некоторые или все устройства в этом пуле. Не должно содержать более 128 элементов. Если какое-либо устройство использует taints или потребляет счётчики, ограничение составляет 64 элемента. В ResourceSlice может быть задано только одно из полей Devices и SharedCounters.
driver *
string
Driver идентифицирует драйвер DRA, предоставляющий сведения о ёмкости. Для перечисления только объектов ResourceSlice с определённым именем драйвера можно использовать селектор полей. Значение должно быть DNS-поддоменом и должно оканчиваться DNS-доменом, принадлежащим поставщику драйвера. Следует использовать только строчные символы. Это поле неизменяемо.
nodeName
string
NodeName идентифицирует узел, предоставляющий ресурсы в этом пуле. Для перечисления только объектов ResourceSlice, относящихся к определённому узлу, можно использовать селектор полей. Это поле можно использовать для ограничения доступа узлов к ResourceSlice с тем же именем узла. Оно также указывает средствам автоматического масштабирования, что добавление новых узлов того же типа, что и у старого узла, может сделать доступными новые ресурсы. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection. Это поле неизменяемо.
nodeSelector
NodeSelector
NodeSelector определяет, какие узлы имеют доступ к ресурсам в пуле, если пул не ограничен одним узлом. Должен содержать ровно один термин. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection.
perDeviceNodeSelection
boolean
PerDeviceNodeSelection определяет, задаётся ли доступ узлов к ресурсам в пуле на уровне ResourceSlice или для каждого устройства отдельно. Если установлено значение true, для каждого устройства, определённого в ResourceSlice, это значение необходимо указать отдельно. Должно быть задано ровно одно из полей NodeName, NodeSelector, AllNodes и PerDeviceNodeSelection.
pool *
ResourcePool
Pool описывает пул, к которому относится этот ResourceSlice.
sharedCounters
CounterSet array
SharedCounters определяет список наборов счётчиков, каждый из которых имеет имя и список доступных счётчиков. Имена наборов счётчиков должны быть уникальными в ResourcePool. В ResourceSlice может быть задано только одно из полей Devices и SharedCounters. Максимальное количество наборов счётчиков — 8.

ResourceSliceList

ResourceSliceList — это коллекция ResourceSlice.

Поле Описание
apiVersion
string
APIVersion определяет версию схемы этого представления объекта. Серверы должны преобразовывать распознаваемые схемы в последнее внутреннее значение и могут отклонять нераспознаваемые значения. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
items *
ResourceSlice array
Items — это список ресурсов ResourceSlice.
kind
string
Kind — строковое значение, обозначающее REST-ресурс, представленный этим объектом. Серверы могут определять его по конечной точке, на которую клиент отправляет запросы. Не может быть изменено. Указывается в CamelCase. Дополнительные сведения: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata
ListMeta
Стандартные метаданные списка

CapacityRequestPolicy

CapacityRequestPolicy определяет, как запросы потребляют ёмкость устройства.

Нельзя задавать более одного ValidRequestValues.

Поле Описание
default
Quantity
Default задаёт, какая часть этой ёмкости потребляется запросом, в котором для неё нет записи в Capacity объекта DeviceRequest.
validRange
CapacityRequestPolicyRange
ValidRange определяет допустимый диапазон значений количества в потребляющих запросах. Если это поле задано, необходимо определить Default, и его значение должно входить в заданный ValidRange. Если запрошенное количество не входит в заданный диапазон, запрос нарушает политику, и это устройство нельзя выделить. Если запрос не содержит запись об этой ёмкости, используется значение Default.
validValues
Quantity 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 (если он задан), запрос не соответствует политике, и устройство нельзя выделить.
Поле Описание
max
Quantity
Max задаёт верхний предел запрашиваемой ёмкости. Max должен быть меньше или равен значению ёмкости. Min и requestPolicy.default должны быть меньше или равны максимальному значению.
min *
Quantity
Min задаёт минимальную ёмкость, допустимую для запроса на потребление. Min должен быть больше или равен нулю и меньше или равен значению ёмкости. requestPolicy.default должен быть больше или равен минимальному значению.
step
Quantity
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 представляет отдельный экземпляр оборудования, который можно выбрать на основе его атрибутов. Помимо имени, должно быть задано ровно одно поле.

Поле Описание
allNodes
boolean
AllNodes указывает, что все узлы имеют доступ к устройству. Должно быть задано только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes.
allowMultipleAllocations
boolean
AllowMultipleAllocations указывает, разрешено ли выделять устройство для нескольких DeviceRequest. Если AllowMultipleAllocations имеет значение true, устройство можно выделить более одного раза, и вся его ёмкость доступна для потребления независимо от того, определена ли requestPolicy.
attributes
object
Attributes определяет набор атрибутов этого устройства. Имя каждого атрибута в наборе должно быть уникальным. Общее количество атрибутов и ёмкостей не должно превышать 32.
bindingConditions
string array
BindingConditions определяет условия для продолжения привязки. Чтобы продолжить привязку пода к узлу при планировании пода, все эти условия должны быть указаны в условиях состояния устройства со значением True. Максимальное количество условий привязки — 4. Условия должны быть допустимыми строками типа условия. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus.
bindingFailureConditions
string array
BindingFailureConditions определяет условия сбоя привязки. Они могут быть указаны в условиях состояния устройства. Если для любого из них задано значение "True", произошёл сбой привязки. Максимальное количество условий сбоя привязки — 4. Условия должны быть допустимыми строками типа условия. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus.
bindsToNode
boolean
BindsToNode указывает, должно ли использование выделения, включающего это устройство, быть ограничено именно тем узлом, который был выбран при выделении заявки. Если установлено значение true, планировщик задаст ResourceClaim.Status.Allocation.NodeSelector так, чтобы он соответствовал узлу, на котором было выполнено выделение. Это поле бета-версии; для его использования необходимо включить функциональные шлюзы DRADeviceBindingConditions и DRAResourceClaimDeviceStatus.
capacity
object
Capacity определяет набор ёмкостей этого устройства. Имя каждой ёмкости в наборе должно быть уникальным. Общее количество атрибутов и ёмкостей не должно превышать 32.
consumesCounters
DeviceCounterConsumption array
ConsumesCounters определяет список ссылок на sharedCounters и набор счётчиков, которые устройство будет потреблять из этих наборов счётчиков. Для каждого counterSet может быть только одна запись. Максимальное количество потреблений счётчиков устройством — 2.
name *
string
Name — уникальный идентификатор устройства среди всех устройств, управляемых драйвером в пуле. Должен соответствовать формату DNS-метки.
nodeAllocatableResourceMappings
object
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"). Имена расширенных ресурсов нельзя использовать в качестве ключей.
nodeName
string
NodeName идентифицирует узел, на котором доступно устройство. Должно быть задано только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes.
nodeSelector
NodeSelector
NodeSelector определяет узлы, на которых доступно устройство. Должен содержать ровно один термин. Должен быть задан только в том случае, если Spec.PerDeviceNodeSelection имеет значение true. Можно задать не более одного из полей NodeName, NodeSelector и AllNodes.
taints
DeviceTaint array
Если указано, это taints, определённые драйвером. Максимальное количество taints — 16. Если taints заданы хотя бы для одного устройства в ResourceSlice, максимальное количество устройств в ResourceSlice составляет 64 вместо 128. Это поле бета-версии; для его использования необходимо включить функциональный шлюз DRADeviceTaints.

DeviceAttribute

Для DeviceAttribute должно быть задано ровно одно поле.

Поле Описание
bool
boolean
BoolValue — значение true или false.
bools
boolean array
BoolValues — непустой список значений true или false.
int
integer
IntValue — число.
ints
integer array
IntValues — непустой список чисел. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes.
string
string
StringValue — строка. Длина не должна превышать 64 символа.
strings
string array
StringValues — непустой список строк. Длина каждой строки не должна превышать 64 символа. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes.
version
string
VersionValue — семантическая версия согласно спецификации semver.org 2.0.0. Длина не должна превышать 64 символа.
versions
string array
VersionValues — непустой список семантических версий согласно спецификации semver.org 2.0.0. Длина каждой строки версии не должна превышать 64 символа. Это поле альфа-версии; для его использования необходимо включить функциональный шлюз DRAListTypeAttributes.

DeviceCapacity

DeviceCapacity описывает количество, связанное с устройством.

Поле Описание
requestPolicy
CapacityRequestPolicy
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, применяемого к устройству. Должен быть именем метки.
timeAdded
Time
TimeAdded указывает время добавления taint или (только в DeviceTaintRule) изменения его воздействия. Если значение не задано, оно добавляется автоматически при создании или обновлении. Кроме того, в DeviceTaintRule при обновлении указанное значение заменяется текущим временем, если оно совпадает со старым значением, а новое воздействие отличается. Можно изменить ключ и/или значение, не меняя воздействие; в этом случае метка времени не обновляется, поскольку использующее её выселение либо уже началось (NoExecute), либо ещё не началось (NoEffect, NoSchedule).
value
string
Значение taint, соответствующее ключу taint. Должно быть значением метки.

NodeAllocatableResourceMapping

NodeAllocatableResourceMapping определяет преобразование запрошенных единиц устройства/ёмкости DRA в соответствующее количество выделяемого ресурса узла.

Поле Описание
allocationMultiplier
Quantity
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.
capacityKey
string
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"`
values
string 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API