Pular para o conteúdo principal

Cotas e recursos do VDC

As cotas são uma propriedade de um VDC, e não dos objetos individuais dentro dele. Elas são definidas na criação (vdc-create) e alteradas por atualizações (vdc-set); são lidas junto com os contadores de uso em uma única chamada a vdc-list. Um valor vazio (null) significa que não há limite definido para aquele recurso.

As redes são contabilizadas separadamente das cotas. Uma rede é um objeto no nível do cluster: ela entra em um VDC por atribuição, e sua capacidade de endereços é restringida por um limite no par VDC↔rede. Um único limite não se aplica a dois VDCs em uma rede compartilhada; um valor é definido para cada par.

Cotas​

Há cinco campos, e cada um limita o próprio recurso. vdc-create aceita um valor como número ou string ("" e null resultam em null) e o desserializa para i32; vdc-set aceita um número ou null.

CampoRecurso limitado
quota_ram_gbRAM, GB
quota_space_gbEspaço em disco, GB
quota_cpu_ghzFrequência de CPU, GHz
quota_cpu_coresNúcleos de CPU
quota_space_snapshotsEspaço para snapshots

quota_space_gb limita o espaço total do VDC: os discos das máquinas virtuais e os volumes de armazenamento são somados. Um tenant que esgotou a cota com volumes não pode adicionar nem expandir um disco de VM. Iniciar máquinas existentes não está sujeito a essa regra: um tenant pode ligar a própria máquina desligada mesmo quando a cota está esgotada.

Não é possível reduzir quota_space_gb abaixo do espaço efetivamente usado: vdc-set rejeita esse valor com o código -3309 e inclui na mensagem o limite solicitado e o uso atual de espaço. Um valor rejeitado não é aplicado; o limite sempre pode ser removido por completo (null).

Cartão do VDC: uso em relação às cotas, resumo de cotas e limites e formulário de configurações

Fatores de oversubscription​

Há um fator para cada cota. Os valores são desserializados para f64: diferentemente das próprias cotas, os fatores podem ser fracionários. As regras de entrada são as mesmas: vdc-create aceita um número ou uma string, e vdc-set aceita um número ou null.

CampoCota correspondente
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 e contabilização de uso​

vdc-list retorna um registro completo para cada VDC acessível: identificação, o papel do usuário que faz a chamada, cotas, fatores e uso.

CampoSignificado
id, name, descriptionIdentificação do VDC
created, modifiedTimestamps de criação e da última modificação
role_id, role_nameO papel do usuário que faz a chamada neste VDC
vms_total, vms_runningTotal de VMs e VMs em execução
cpu_runningUso de CPU pelas VMs em execução
ram_usageUso de RAM
space_gb_usedEspaço usado, GB: discos de VM e volumes de armazenamento somados
cpu_cores_quota_usageUso de núcleos de CPU em relação à cota
ram_quota_usageUso de memória em relação à cota
space_quota_usageUso de espaço em disco em relação à cota

Resposta a uma solicitação sem 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 não tem cotas: todos os campos quota_* estão vazios, assim como os campos relativos (*_quota_usage), porque não há valor em relação ao qual calcular uma razão. Os contadores absolutos continuam preenchidos e iguais a zero.

O formato objective​

O parâmetro opcional objective altera o formato da resposta de vdc-list: em vez de um array, ele retorna um objeto cujas chaves são os IDs dos VDCs e cujos valores são os mesmos registros. O formato é ativado pela presença do campo; o valor do parâmetro não importa. Isso poupa o cliente de percorrer um array ao procurar um VDC por id.

Redes atribuídas a um VDC​

MétodoFinalidadeAcesso
vdc-assign-networkAtribuir uma rede a um VDCCluster master ou o criador da rede com um papel no nível do VDC (role_id <= 2)
vdc-deassign-networkRemover a atribuição de uma redeMesmos requisitos
vdc-networksRedes atribuídas aos VDCs acessíveisQualquer usuário; a resposta é limitada aos VDCs acessíveis
vdc-network-addr-limitLimite de endereços de um par VDC↔redeCluster master

vdc-assign-network e vdc-deassign-network aceitam o mesmo par de parâmetros: vdc_id e network_id, ambos obrigatórios. Uma resposta bem-sucedida tem o campo data vazio.

Solicitação de atribuição:

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

A remoção da atribuição é mais restritiva: uma rede com portas atribuídas a VMs não pode ter a atribuição removida. A resposta -2206 informa o número dessas portas. Desconecte as VMs da rede e repita a chamada.

A resposta de vdc-networks é um objeto aninhado: as chaves externas são os IDs dos VDCs; dentro estão o id e o name do VDC, além dos registros das redes atribuídas, cada um com a chave igual ao seu ID. Cada registro de rede inclui addr_limit, o limite de endereços atual para aquele par VDC↔rede, junto com os parâmetros da própria rede: tipo e transporte (network_type_id, backend), as tags vlan_id e qinq_id e os parâmetros de VXLAN (vxlan_multicast_addr, vxlan_port). Os campos que não se aplicam a esse tipo de rede ficam vazios (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
}
}
}
}
}

Limite de endereços de um par VDC↔rede​

O método vdc-network-addr-limit está disponível apenas para o Cluster master.

ParâmetroTipoObrigatórioRestrições
vdc_idNúmeroSimNo mínimo 0
network_idNúmeroSimNo mínimo 0
addr_limitNúmero ou nullSimNo mínimo 0; string vazia não é permitida

Solicitação:

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

A ordem das operações é fixa: um limite só pode ser definido em uma rede que já esteja atribuída. Se a rede não estiver atribuída ao VDC, a resposta é -23030 e identifica o par. Execute vdc-assign-network primeiro.

Papéis atribuídos em um VDC​

vdc-roles aceita o id do VDC e está disponível apenas para o Cluster master. A resposta é um mapa de atribuições: cada chave corresponde a uma lista de IDs de papéis concedidos neste VDC.

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

A rejeição -403 ("Access denied") significa que a chamada não foi feita por um Cluster master.

Códigos de erro de recursos do VDC​

Em cada par de códigos, o primeiro código pertence a vdc-assign-network e o segundo a vdc-deassign-network: os métodos fazem as mesmas verificações, mas usam conjuntos separados de códigos de erro. Nas mensagens, <vdc> e <net> são IDs da solicitação; o servidor os substitui pelos valores reais.

CódigoMensagemQuando é retornado
-2102, -2203"No params at all"A solicitação não tem o objeto params
-403"Access denied"Não há concessões para o VDC da solicitação, ou existe uma concessão, mas o papel está abaixo do nível exigido; os dois casos usam a mesma rejeição de permissão
-2108, -2218"You ain't the creator of network"Um papel no nível do VDC sem permissões de cluster, e a rede foi criada por outro usuário
-2120, -2220"Network id does not exist"Não existe rede com esse network_id
-2121, -2221"Bad vdc_id param value"vdc_id está ausente ou fora do intervalo permitido
-2122, -2222"Bad network_id param value"network_id está ausente ou fora do intervalo permitido
-2206"There are N ports assigned to VMs"Uma rede está tendo a atribuição a um VDC removida enquanto ainda há portas de VM atribuídas
-2207"Error upon network ID==<net> deassignment from vDC ID==<vdc>"A remoção da atribuição da rede falha
-23020"No param addr_limit"O addr_limit obrigatório está ausente da solicitação
-23022"Bad addr_limit"O valor de addr_limit não passa na validação
-23030"network_id==<net> has not been assigned to vdc_id==<vdc>, so limit can't be set"Um limite está sendo definido em uma rede que não está atribuída ao VDC

Veja também​