Saltar al contenido principal

Cuotas y recursos del VDC

Las cuotas son una propiedad del VDC, y no de los objetos individuales que contiene. Se establecen durante la creación (vdc-create) y se cambian mediante actualizaciones (vdc-set); se leen junto con los contadores de uso en una sola llamada a vdc-list. Un valor vacío (null) significa que no hay límite establecido para ese recurso.

Las redes se contabilizan por separado de las cuotas. Una red es un objeto a nivel de clúster: entra en un VDC mediante su asignación, y su capacidad de direcciones está restringida por un límite sobre el par VDC↔red. Un mismo límite no se aplica a dos VDC en una red compartida; se establece un valor para cada par.

Cuotas​

Hay cinco campos, y cada uno limita su propio recurso. vdc-create acepta un valor como número o como cadena ("" y null producen null) y lo deserializa a i32; vdc-set acepta un número o null.

CampoRecurso limitado
quota_ram_gbRAM, GB
quota_space_gbEspacio en disco, GB
quota_cpu_ghzFrecuencia de CPU, GHz
quota_cpu_coresNúcleos de CPU
quota_space_snapshotsEspacio para instantáneas

quota_space_gb limita el espacio total del VDC: se suman los discos de las máquinas virtuales y los volúmenes de almacenamiento. Un inquilino que ha agotado la cuota con volúmenes no puede añadir ni ampliar un disco de VM. El arranque de las máquinas existentes no está sujeto a esta regla: un inquilino puede encender su propia máquina apagada incluso cuando la cuota está agotada.

No se puede reducir quota_space_gb por debajo del espacio realmente utilizado: vdc-set rechaza dicho valor con el código -3309 e incluye en el mensaje el límite solicitado y el uso actual del espacio. Un valor rechazado no se aplica; el límite siempre se puede eliminar por completo (null).

Ficha del VDC: uso respecto a las cuotas, resumen de cuotas y límites, y formulario de configuración

Factores de sobresuscripción​

Hay un factor por cada cuota. Los valores se deserializan a f64: a diferencia de las propias cuotas, los factores pueden ser fraccionarios. Las reglas de entrada son las mismas: vdc-create acepta un número o una cadena, y vdc-set acepta un número o null.

CampoCuota correspondiente
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

Contadores y contabilidad del uso​

vdc-list devuelve un registro completo para cada VDC accesible: identificación, el rol del usuario que realiza la llamada, cuotas, factores y uso.

CampoSignificado
id, name, descriptionIdentificación del VDC
created, modifiedMarcas de tiempo de creación y de última modificación
role_id, role_nameEl rol del usuario que realiza la llamada en este VDC
vms_total, vms_runningTotal de VM y VM en ejecución
cpu_runningUso de CPU por las VM en ejecución
ram_usageUso de RAM
space_gb_usedEspacio utilizado, GB: discos de VM y volúmenes de almacenamiento en conjunto
cpu_cores_quota_usageUso de núcleos de CPU respecto a la cuota
ram_quota_usageUso de memoria respecto a la cuota
space_quota_usageUso de espacio en disco respecto a la cuota

Respuesta a una solicitud sin parámetros:

{
"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
}
]
}
}

Este VDC no tiene cuotas: todos los campos quota_* están vacíos, al igual que los campos relativos (*_quota_usage), porque no hay ningún valor respecto al cual calcular una proporción. Los contadores absolutos sí se rellenan y son iguales a cero.

El formato objective​

El parámetro opcional objective cambia la forma de la respuesta de vdc-list: en lugar de una matriz, devuelve un objeto cuyas claves son los ID de los VDC y cuyos valores son los mismos registros. El formato se activa por la presencia del campo; el valor del parámetro no importa. Esto evita que el cliente tenga que recorrer una matriz al buscar un VDC por id.

Redes asignadas a un VDC​

MétodoFinalidadAcceso
vdc-assign-networkAsignar una red a un VDCCluster master o el creador de la red con un rol a nivel de VDC (role_id <= 2)
vdc-deassign-networkEliminar la asignación de una redLos mismos requisitos
vdc-networksRedes asignadas a los VDC accesiblesCualquier usuario; la respuesta está limitada a los VDC accesibles
vdc-network-addr-limitLímite de direcciones de un par VDC↔redCluster master

vdc-assign-network y vdc-deassign-network aceptan el mismo par de parámetros: vdc_id y network_id, ambos obligatorios. Una respuesta correcta tiene el campo data vacío.

Solicitud de asignación:

{
"jsonrpc": "2.0",
"method": "vdc-assign-network",
"params": {
"vdc_id": 10,
"network_id": 42
},
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585"
}

La desasignación es más restrictiva: no se puede desasignar una red que tenga puertos asignados a VM. La respuesta -2206 indica el número de esos puertos. Desconecte las VM de la red y repita la llamada.

La respuesta de vdc-networks es un objeto anidado: las claves externas son los ID de los VDC; dentro están el id y el name del VDC, además de los registros de las redes asignadas, cada uno con su ID como clave. Cada registro de red incluye addr_limit, el límite de direcciones actual para ese par VDC↔red, junto con los parámetros propios de la red: tipo y transporte (network_type_id, backend), las etiquetas vlan_id y qinq_id, y los parámetros de VXLAN (vxlan_multicast_addr, vxlan_port). Los campos que no se aplican a este tipo de red están vacíos (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
}
}
}
}
}

Límite de direcciones de un par VDC↔red​

El método vdc-network-addr-limit solo está disponible para Cluster master.

ParámetroTipoObligatorioRestricciones
vdc_idNúmeroSíComo mínimo 0
network_idNúmeroSíComo mínimo 0
addr_limitNúmero o nullSíComo mínimo 0; no se admite una cadena vacía

Solicitud:

{
"jsonrpc": "2.0",
"method": "vdc-network-addr-limit",
"params": {
"vdc_id": 10,
"network_id": 42,
"addr_limit": 32
},
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585"
}

El orden de las operaciones es fijo: solo se puede establecer un límite en una red que ya esté asignada. Si la red no está asignada al VDC, la respuesta es -23030 e identifica el par. Ejecute primero vdc-assign-network.

Roles asignados en un VDC​

vdc-roles acepta el id del VDC y solo está disponible para Cluster master. La respuesta es un mapa de asignaciones: cada clave corresponde a una lista de ID de roles concedidos en este VDC.

{
"jsonrpc": "2.0",
"id": "cbf4478c-84b5-45ac-97cd-0390d7190585",
"result": {
"code": 1,
"data": {
"12": [2, 3],
"15": [4]
}
}
}

El rechazo -403 ("Access denied") significa que la llamada no la realizó un Cluster master.

Códigos de error de los recursos del VDC​

En cada par de códigos, el primero corresponde a vdc-assign-network y el segundo a vdc-deassign-network: los métodos realizan las mismas comprobaciones, pero usan conjuntos de códigos de error independientes. En los mensajes, <vdc> y <net> son ID de la solicitud; el servidor sustituye sus valores reales.

CódigoMensajeCuándo se devuelve
-2102, -2203"No params at all"La solicitud no tiene el objeto params
-403"Access denied"No hay concesiones para el VDC de la solicitud, o existe una concesión pero el rol está por debajo del nivel requerido; ambos casos usan el mismo rechazo de permisos
-2108, -2218"You ain't the creator of network"Un rol a nivel de VDC sin permisos de clúster, y la red la creó otro usuario
-2120, -2220"Network id does not exist"No existe ninguna red con este network_id
-2121, -2221"Bad vdc_id param value"vdc_id falta o está fuera del rango permitido
-2122, -2222"Bad network_id param value"network_id falta o está fuera del rango permitido
-2206"There are N ports assigned to VMs"Se está desasignando una red de un VDC mientras todavía hay puertos de VM asignados
-2207"Error upon network ID==<net> deassignment from vDC ID==<vdc>"La desasignación de la red falla
-23020"No param addr_limit"Falta en la solicitud el parámetro obligatorio addr_limit
-23022"Bad addr_limit"El valor de addr_limit no supera la validación
-23030"network_id==<net> has not been assigned to vdc_id==<vdc>, so limit can't be set"Se está estableciendo un límite en una red que no está asignada al VDC

Véase también​