Квоты и ресурсы ВЦОД
Квоты — свойство ВЦОД, а не отдельных объектов внутри него. Они задаются при
создании (vdc-create) и меняются правкой (vdc-set); читаются вместе со
счётчиками потребления одним вызовом vdc-list. Пустое значение (null)
означает, что ограничение по этому ресурсу не выставлено.
Сети учитываются отдельно от квот. Сеть — объект уровня кластера: в ВЦОД она входит назначением, а её адресная ёмкость ограничивается лимитом на пару ВЦОД↔сеть. Один и тот же лимит для двух ВЦОД на общей сети не действует — значение выставляется на каждую пару.
Квоты
Пять полей, каждое ограничивает свой ресурс. vdc-create принимает значение
числом или строкой ("" и null дают null) и десериализует его в i32;
vdc-set принимает число или null.
| Поле | Что ограничивает |
|---|---|
quota_ram_gb | оперативная память, ГБ |
quota_space_gb | дисковое пространство, ГБ |
quota_cpu_ghz | частота CPU, ГГц |
quota_cpu_cores | ядра CPU |
quota_space_snapshots | пространство под снимки |
quota_space_gb ограничивает всё пространство ВЦОД целиком: диски виртуальных
машин и тома хранилища суммируются в одну величину. Арендатор, выбравший квоту
томами, не добавит и не расширит диск машины. Запуск уже созданных машин под
это правило не попадает — включить собственную выключенную машину можно и при
выбранной квоте.
Опустить quota_space_gb ниже фактически занятого нельзя: vdc-set отклоняет
такое значение кодом -3309 и называет в сообщении запрошенный лимит и текущее
занятое место. Значение при отказе не применяется; снять лимит целиком (null)
можно всегда.

Коэффициенты переподписки
По одному коэффициенту на каждую квоту. Значения десериализуются в f64 — в
отличие от самих квот, коэффициент дробный. Правила приёма те же: vdc-create
берёт число или строку, vdc-set — число или null.
| Поле | К какой квоте относится |
|---|---|
quota_oversubscription_rate_ram | quota_ram_gb |
quota_oversubscription_rate_space_gb | quota_space_gb |
quota_oversubscription_rate_cpu_ghz | quota_cpu_ghz |
quota_oversubscription_rate_cpu_cores | quota_cpu_cores |
quota_oversubscription_rate_space_snapshots | quota_space_snapshots |
Счётчики и учёт потребления
vdc-list возвращает по каждому доступному ВЦОД полную запись: идентификацию,
роль вызывающего пользователя, квоты, коэффициенты и учёт.
| Поле | Смысл |
|---|---|
id, name, description | идентификация ВЦОД |
created, modified | метки времени создания и последней правки |
role_id, role_name | роль вызывающего пользователя в этом ВЦОД |
vms_total, vms_running | ВМ всего и ВМ в запущенном состоянии |
cpu_running | потребление CPU запущенными ВМ |
ram_usage | потребление оперативной памяти |
space_gb_used | занятое пространство, ГБ: диски ВМ и тома хранилища вместе |
cpu_cores_quota_usage | потребление ядер CPU относительно квоты |
ram_quota_usage | потребление памяти относительно квоты |
space_quota_usage | потребление дискового пространства относительно квоты |
Ответ на запрос без параметров:
{
"jsonrpc": "2.0",
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585",
"result": {
"code": 1,
"data": [
{
"id": 2,
"name": "vdc_name",
"description": null,
"created": 1710000000,
"modified": 1710000000,
"role_id": 2,
"role_name": "vDC admin",
"quota_cpu_cores": null,
"quota_cpu_ghz": null,
"quota_ram_gb": null,
"quota_space_gb": null,
"quota_space_snapshots": null,
"quota_oversubscription_rate_cpu_cores": null,
"quota_oversubscription_rate_cpu_ghz": null,
"quota_oversubscription_rate_ram": null,
"quota_oversubscription_rate_space_gb": null,
"quota_oversubscription_rate_space_snapshots": null,
"cpu_cores_quota_usage": null,
"cpu_running": 0,
"ram_quota_usage": null,
"ram_usage": 0,
"space_gb_used": 0,
"space_quota_usage": null,
"vms_running": 0,
"vms_total": 0
}
]
}
}
Здесь ВЦОД без квот: все quota_* пустые, и относительные поля
(*_quota_usage) тоже пустые — считать долю не от чего. Абсолютные счётчики при
этом заполнены и равны нулю.
Формат objective
Необязательный параметр objective меняет форму ответа vdc-list: вместо
массива приходит объект, ключи которого — идентификаторы ВЦОД, а значения — те же
записи. Формат включается наличием поля, значение параметра роли не играет. Это
избавляет клиента от прохода по массиву, когда ВЦОД нужен по id.
Сети, назначенные в ВЦОД
| Метод | Назначение | Доступ |
|---|---|---|
vdc-assign-network | назначить сеть в ВЦОД | Cluster master либо создатель сети с ролью уровня ВЦОД (role_id <= 2) |
vdc-deassign-network | снять назначение сети | те же требования |
vdc-networks | сети, назначенные в доступных ВЦОД | любой пользователь; ответ ограничен доступными ВЦОД |
vdc-network-addr-limit | лимит адресов на пару ВЦОД↔сеть | Cluster master |
vdc-assign-network и vdc-deassign-network принимают одинаковую пару
параметров: vdc_id и network_id, оба обязательные. Успешный ответ приходит с
пустым data.
Запрос на назначение:
{
"jsonrpc": "2.0",
"method": "vdc-assign-network",
"params": {
"vdc_id": 10,
"network_id": 42
},
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585"
}
Снятие назначения жёстче: сеть с портами, назначенными ВМ, снять нельзя. Ответ
-2206 называет число таких портов — отключите ВМ от сети, затем повторите
вызов.
Ответ vdc-networks — вложенный объект: внешние ключи это идентификаторы ВЦОД,
внутри лежат id и name ВЦОД плюс записи назначенных сетей, каждая под ключом
своего идентификатора. В записи сети приходит addr_limit — действующий лимит
адресов для этой пары ВЦОД↔сеть, — а рядом параметры самой сети: тип и транспорт
(network_type_id, backend), теги vlan_id и qinq_id, параметры VXLAN
(vxlan_multicast_addr, vxlan_port). Поля, к типу этой сети не относящиеся,
приходят пустыми (null):
{
"jsonrpc": "2.0",
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585",
"result": {
"code": 1,
"data": {
"10": {
"id": 10,
"name": "vdc_name",
"42": {
"addr_limit": 32,
"backend": 2,
"creator": 1,
"id": 42,
"mtu": 1500,
"name": "net",
"net_cidr": "192.0.2.0/24",
"network_type_id": 2,
"vlan_id": null,
"qinq_id": null,
"vxlan_multicast_addr": "239.0.0.1",
"vxlan_port": 9009
}
}
}
}
}
Лимит адресов на пару ВЦОД↔сеть
Метод vdc-network-addr-limit доступен только Cluster master.
| Параметр | Тип | Обязательный | Ограничения |
|---|---|---|---|
vdc_id | число | да | не меньше 0 |
network_id | число | да | не меньше 0 |
addr_limit | число или null | да | не меньше 0; пустая строка недопустима |
Запрос:
{
"jsonrpc": "2.0",
"method": "vdc-network-addr-limit",
"params": {
"vdc_id": 10,
"network_id": 42,
"addr_limit": 32
},
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585"
}
Порядок операций фиксирован: лимит ставится только на уже назначенную сеть. Если
сеть в ВЦОД не назначена, приходит -23030 с указанием пары — сначала выполните
vdc-assign-network.
Роли, назначенные в ВЦОД
vdc-roles принимает id ВЦОД и доступен только Cluster master. Ответ — карта
назначений: каждому ключу соответствует список идентификаторов ролей, выданных в
этом ВЦОД.
{
"jsonrpc": "2.0",
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585",
"result": {
"code": 1,
"data": {
"12": [2, 3],
"15": [4]
}
}
}
Отказ -403 («Access denied») означает, что вызов пришёл не от Cluster master.
Коды ошибок по ресурсам ВЦОД
В парах кодов первый принадлежит vdc-assign-network, второй —
vdc-deassign-network: методы проверяют одно и то же, но нумеруют отказы каждый
своим набором. В сообщениях <vdc> и <net> — идентификаторы из запроса,
сервер подставляет их фактические значения.
| Код | Сообщение | Когда приходит |
|---|---|---|
-2102, -2203 | «No params at all» | запрос пришёл без объекта params |
-403 | «Access denied» | грантов на ВЦОД из запроса нет вовсе либо грант есть, но роль ниже требуемого уровня — отказ по правам один на оба случая |
-2108, -2218 | «You ain't the creator of network» | роль уровня ВЦОД без прав кластера, а сеть создал другой пользователь |
-2120, -2220 | «Network id does not exist» | сети с таким network_id нет |
-2121, -2221 | «Bad vdc_id param value» | vdc_id отсутствует или вне допустимого диапазона |
-2122, -2222 | «Bad network_id param value» | network_id отсутствует или вне допустимого диапазона |
-2206 | «There are N ports assigned to VMs» | снятие сети с ВЦОД при живых портах ВМ |
-2207 | «Error upon network ID==<net> deassignment from vDC ID==<vdc>» | сбой при снятии назначения |
-23020 | «No param addr_limit» | в запросе нет обязательного addr_limit |
-23022 | «Bad addr_limit» | значение addr_limit не проходит проверку |
-23030 | «network_id==<net> has not been assigned to vdc_id==<vdc>, so limit can't be set» | лимит ставится на не назначенную в ВЦОД сеть |