Перейти к основному содержимому

Квоты и ресурсы ВЦОД

Квоты — свойство ВЦОД, а не отдельных объектов внутри него. Они задаются при создании (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_ramquota_ram_gb
quota_oversubscription_rate_space_gbquota_space_gb
quota_oversubscription_rate_cpu_ghzquota_cpu_ghz
quota_oversubscription_rate_cpu_coresquota_cpu_cores
quota_oversubscription_rate_space_snapshotsquota_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»лимит ставится на не назначенную в ВЦОД сеть

См. также​