Стадия жизненного цикла модуля: Preview
Введение
Данное руководство посвящено созданию пользовательских ресурсов на основе уже существующих административных ресурсов, которые были получены от администратора кластера или сети.
Пользовательские ресурсы
Network
Для создания выделенной сети для проекта используется ресурс Network.
apiVersion: network.deckhouse.io/v1alpha1
kind: Network
metadata:
name: my-network
namespace: my-namespace
spec:
networkClass: my-network-class # mandatory
После создания ресурса Network вы можете проверить его статус:
d8 k -n my-namespace get network my-network -o yaml
Пример статуса ресурса `Network`
apiVersion: network.deckhouse.io/v1alpha1
kind: Network
metadata:
...
status:
bridgeName: d8-br-600
conditions:
- lastTransitionTime: "2025-09-29T14:51:26Z"
message: All node interface attachments are ready
reason: AllNodeInterfaceAttachmentsAreReady
status: "True"
type: AllNodeAttachementsAreReady
- lastTransitionTime: "2025-09-29T14:51:26Z"
message: Network is operational
reason: NetworkReady
status: "True"
type: Ready
nodeAttachementsCount: 1
observedGeneration: 1
readyNodeAttachementsCount: 1
vlanID: 600
Поддерживается статическое определение номера VLAN ID из пула, выданного администратором кластера или сети spec.vlan.id, если значение не указано в спецификации ресурса оно будет назначено динамически.
Подключение дополнительных сетей к подам
Настройка дополнительных сетей осуществляется с помощью аннотации пода:
network.deckhouse.io/networks-spec: |
[
{
"type": "Network",
"name": "my-network",
"ifName": "veth_mynet", # Имя TAP-интерфейса внутри пода (опционально).
"mac": "aa:bb:cc:dd:ee:ff" # MAC-адрес, который следует назначить TAP-интерфейсу (опционально).
},
{
"type": "ClusterNetwork",
"name": "my-cluster-network",
"ifName": "veth_public",
}
]
Подключение физических сетевых интерфейсов к подам (DPDK-приложения)
Для использования физических сетевых интерфейсов (PF/VF) напрямую в поды для DPDK-приложений необходимо:
- Убедиться, что ваш namespace был помечен администратором для использования UnderlayNetwork (см. Руководство администратора)
- Создать под c аннотацией, запрашивающей устройство из UnderlayNetwork
Создание пода c устройством из UnderlayNetwork
Создайте под, который запрашивает устройство из UnderlayNetwork. В аннотации пода network.deckhouse.io/networks-spec должно быть указано:
type: "UnderlayNetwork"— указывает, что это запрос физического устройстваname: "underlay-network-name"— имя ресурса UnderlayNetwork, созданного администраторомbindingMode— режим привязки устройства (VFIO-PCI, DPDK или NetDev)
Пример конфигурации пода для режима DPDK (универсальный режим, который автоматически выбирает подходящий драйвер для вендора сетевого адаптера):
apiVersion: v1
kind: Pod
metadata:
name: dpdk-app
namespace: mydpdk
annotations:
network.deckhouse.io/networks-spec: |
[
{
"type": "UnderlayNetwork",
"name": "dpdk-shared-network",
"bindingMode": "DPDK"
}
]
spec:
containers:
- name: dpdk-container
image: dpdk-app:latest
securityContext:
privileged: false
capabilities:
add:
- NET_ADMIN
- NET_RAW
- IPC_LOCK
volumeMounts:
- mountPath: /hugepages
name: hugepage
resources:
limits:
hugepages-2Mi: 4Gi
memory: 4Gi
cpu: 4
requests:
cpu: 4
memory: 4Gi
command: ["/bin/sh", "-c", "sleep infinity"]
volumes:
- name: hugepage
emptyDir:
medium: HugePages
Для DPDK-приложений важно:
- Настроить
capabilities(NET_ADMIN, NET_RAW, IPC_LOCK) для запуска в непривилегированном режиме вместо использованияprivileged: true - Подключить volumes с hugepages, так как DPDK требует hugepages для эффективного управления памятью
Для VF устройств в режиме Shared можно дополнительно указать vlanID в аннотации для настройки VLAN-тегирования на VF:
network.deckhouse.io/networks-spec: |
[
{
"type": "UnderlayNetwork",
"name": "dpdk-shared-network",
"bindingMode": "VFIO-PCI",
"vlanID": 100
}
]
После создания пода проверьте, что устройство было выделено, проверив аннотацию network.deckhouse.io/networks-status:
d8 k -n mydpdk get pod dpdk-app -o jsonpath='{.metadata.annotations.network\.deckhouse\.io/networks-status}' | jq
Вы также можете проверить ResourceClaim, который был автоматически создан:
d8 k -n mydpdk get resourceclaim
Пример статуса пода с выделенным устройством UnderlayNetwork
apiVersion: v1
kind: Pod
metadata:
name: dpdk-app
namespace: mydpdk
annotations:
network.deckhouse.io/networks-spec: |
[
{
"type": "UnderlayNetwork",
"name": "dpdk-shared-network",
"bindingMode": "DPDK"
}
]
network.deckhouse.io/networks-status: |
[
{
"type": "UnderlayNetwork",
"name": "dpdk-shared-network",
"bindingMode": "DPDK",
"netDevInterfaces": [
{
"name": "ens1f0",
"mac": "00:1b:21:bb:aa:cc"
}
],
"conditions": [
{
"type": "Configured",
"status": "True",
"reason": "InterfaceConfiguredSuccessfully",
"message": "",
"lastTransitionTime": "2025-01-15T10:35:00Z"
},
{
"type": "Negotiated",
"status": "True",
"reason": "Up",
"message": "",
"lastTransitionTime": "2025-01-15T10:35:00Z"
}
]
}
]
status:
phase: Running
...