...
Gliffy Diagram size 1200 name Cloud Agnostic Intent Execution Workflow pagePin 30
Cloud Agnostic Policy Design Considerations:
- Organize Policy per group of Cloud Regions or Cloud Region
- Different cloud regions have different cloud control plane instances and naturally parallelizeable from MC and OOF perspective
- One or more of the cloud regions may not respond to the request in time and will be excluded
Cloud Policy Example (under discussion):
{
"service"
:
"cloudPolicy"
,
"policyName"
:
"oofMulti-cloudCasablanca.cloudPolicy_vCPE_VNF"
,
"description"
:
"Cloud Policy for vCPE VNF"
,
"templateVersion"
:
"0.0.1"
,
"version"
:
"oofMulti-cloudCasablanca"
,
"priority"
:
"3"
,
"riskType"
:
"test"
,
"riskLevel"
:
"2"
,
"guard"
:
"False"
,
"content"
: {
//Support the current simple capacity check API besides the intent-based framework for backward compatibility. If a cloud region does not support the policy-based interface, it is given a high net value assuming the current capacity api (yes/no) returns an yes. This ensures smooth migration to the new policy-based framework.
"cloudRegion" : {
"id": "All",
"intent": {
"name": "Infrastructure High Availability (HA) for VNF", //realization thru OpenStack-based: anti-affinity, Azure: Fault Domain or Availability set
// rack-level anti-affinity etc. – ETSI (host-level, rack-level, availability zone ...)
}
"intent": {
"name": "Infrastructure Resource Isolation for VNF", // realization possible without dedicating CPU and Memory, refer to section on "Cloud Resource Partitioning for Differentiated QoS" on how this can help in offering tiered services
{"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "10"}, {"operator", "OR"}, {"Guaranteed QoS": "TRUE"}
}
"cloudCapacityUtilizaitonAttributes" : {
"current_allocated_capacity" : { {"cpu", "memory", "network"}: {"cloud": {"weight": "0.85", "threshold": "0.9"}, "tenant (resource slice)": {"weight": "0.85", "threshold": "0.9"
}, "host aggregate (resource cluster)": {"weight": "0.85", "threshold": "0.9"} } },
"average_utilization" : { {"cpu", "memory", "network"}: {"cloud": {"weight": "0.13"}, "tenant (resource slice)": {"weight": "0.13"}, "host aggregate (resource cluster)": {"weight": "0.13"} }, "time-window": "24", "unit": "hours" },
"peak_utilization" : { {"cpu", "memory", "network"}: {"cloud": {"weight": "0.02"}, "tenant (resource slice)": {"weight": "0.02"}, "host aggregate (resource cluster)": {"weight": "0.02"} }, "time-window": "24", "unit": "hours" }
//current_allocated_capacity, average_utilization and peak_utilization are normalized to 1
//For a given object such as tenant_cpu, sum of weights across all attributes (current_allocated_capacity, average_utilization & peak_utilization) must be 1
//E.g. net_value = cloud_cpu_current_allocated_capacity*0.85 + cloud_cpu_average_utilization*0.13 + cloud_cpu_peak_utilization*.02 + ...
//For a given object such as cloud_cpu, if the current_allocated_capacity "threshold" exceeds the specified value, return "high net value"
}
}
"capacityProperty": { //enhanced from current capacity check // use cloud provider in – <cloud region id, cloud provider> – different cloud providers may need different capacities ...
// under discussion – "capabilityProperty": {SR_IOV, ...}
// under discussion - host network bandwidth
"controller": "multicloud",
"request": "{\"vCPU\": {\"quantity\": {\"get_param\": \"REQUIRED_VCPU\"}, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" //from R2
...
"
resources
": ["
vGMuxInfra
"
], //R2 support – single VF module assumption per VNF
"applicableResources
": "
any
",
"
identity
": "
distance-vGMuxInfra
",
"
policyScope
": ["
vCPE
", "
US
", "
INTERNATIONAL
", "
ip
", "
vGMuxInfra
"],
"
policyType
": "All
Policy"
}
Follow up for Casablanca :--
- Policy DB – is there any restriction on json objects store? - Matti to follow up with Ankit
...
- Current R2
...
- support – single VF module (VNFC) assumption per VNF for vCPE - follow up with Kang Xi to validate
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
//Support the current simple capacity check API besides the intent-based framework for backward compatibility. //If a cloud region does not support the policy-based interface, it is given a high net value assuming the current capacity api (yes/no) //returns an yes. This ensures smooth migration to the new policy-based framework. { "service": "cloudPolicy", "policyName": "oofMulti-cloudCasablanca.cloudPolicy_vCPE_VNF", "description": "Cloud Policy for vCPE VNF", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "cloudOwner" : { "owner": "All", "intent": { "name": "Infrastructure High Availability (HA) for VNF", given a high net value assuming the current capacity api (yes/no) //returns an yes. This ensures smooth migration to the new policy-based framework. { "service": "cloudPolicy", "policyName": "oofMulti-cloudCasablanca.cloudPolicy_vCPE_VNF", "description": "Cloud Policy for vCPE VNF", "templateVersion": "0.0.1", "version": "oofMulti-cloudCasablanca", "priority": "3", "riskType": "test", "riskLevel": "2", "guard": "False", "content": { "cloudOwner" : { "owner": "All", "intent": { "name": "Infrastructure High Availability (HA) for VNF", //realization thru OpenStack-based: anti-affinity, Azure: Fault Domain or //Availability set rack-level anti-affinity etc. – ETSI (host-level, rack-level, availability zone ...) } "intent": { "name": "Infrastructure Resource Isolation for VNF", // realization possible without dedicating CPU and Memory, refer to section on "Cloud Resource Partitioning for Differentiated QoS" //realization thru OpenStack-based: anti-affinity, Azure: Fault Domain or //Availability set rack-level anti-affinity etc. – ETSI (host-level, rack-level, availability zone ...) on how this can help in offering tiered services "qosProperty": { {"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "10"}, {"operator", "OR"}, {"Guaranteed QoS": "TRUE"} } } "intentcloudCapacityUtilizaitonAttributes" : { "name": "Infrastructure Resource Isolation for VNF", //current_allocated_capacity is normalized to 1 //max realization possible without dedicating CPU and Memory, refer to section on "Cloud Resource Partitioning for Differentiated QoS" // on how this can help in offering tiered servicesvalue for cpu or memory is 1 if usage is greater than equal to limit "qosPropertycurrent_allocated_capacity" : //slight modifications from R2 { {"Burstable QoS": "TRUE", "Burstable QoS Oversubscription Percentage": "10"}, {"operator{ {"cpu", "ORmemory"},: {"Guaranteed QoS": "TRUE"}"tenant (OpenStack Project or Resource Slice)", }, } "cloudCapacityUtilizaitonAttributes" : // under discussion - elaborate capacity, utilization checks for various objects { //"current_allocated_capacity is normalized to 1" : //max value for cpu or memory is 1 if usage is greater than equal to limit "current_allocated_capacity" : //slight modifications from R2 { {"cpu", "memory"}: "tenant (OpenStack Project or Resource Slice)", }, // under discussion - elaborate capacity, utilization checks for various objects{ // {"cpu", "memory", "network"}: // {"cloud": {"weight": "0.85", "threshold": "0.9"}, // {"tenant (resource slice)": {"weight": "0.85", "threshold": "0.9" }, // {"host aggregate (resource cluster)": {"weight": "0.85", "threshold": "0.9"}, //}, //"currentaverage_allocated_capacityutilization" : //{ // { {"cpu", "memory", "network"}: // {"cloud": {"weight": "0.85", "threshold": "0.9"13"}, // {"tenant (resource slice)": {"weight": "0.85", "threshold": "0.9" 13"}, // {"host aggregate (resource cluster)": {"weight": "0.8513"} }, "thresholdtime-window": "0.924"}, //, "unit": "hours" }, //"averagepeak_utilization" : { {"cpu", "memory", "network"}: {"cloud": {"weight": "0.1302"}, "tenant (resource slice)": {"weight": "0.1302"}, "host // "host aggregate (resource cluster)": {"weight": "0.1302"} }, "time-window": "24", "unit": "hours" }, //"peak_utilization" : { {"cpu", "memory", "network"}: {"cloud": {"weight": "0.02"}, "tenant (resource slice)": {"weight": "0.02"}, "host // aggregate (resource cluster)": {"weight": "0.02"} }, "time-window": "24", "unit": "hours" } //current_allocated_capacity, average_utilization and peak_utilization are normalized to 1current_allocated_capacity, average_utilization and peak_utilization are normalized to 1 //For a given object such as tenant_cpu, sum of weights across all attributes (current_allocated_capacity, average_utilization & //peak_utilization) must be 1 //E.g. net_value = cloud_cpu_current_allocated_capacity*0.85 + cloud_cpu_average_utilization*0.13 + cloud_cpu_peak_utilization*.02 + ... //For a given object such as tenantcloud_cpu, sumif of weights across all attributes (the current_allocated_capacity "threshold" exceeds the specified value, average_utilization & //peak_utilization) must be 1 //E.g. net_value = cloud_cpu_current_allocated_capacity*0.85 + cloud_cpu_average_utilization*0.13 + cloud_cpu_peak_utilization*.02 + ... //For a given object such as cloud_cpu, if the current_allocated_capacity "threshold" exceeds the specified value, return "high net //value" } } //use cloud provider in – <cloud region id, cloud provider> – different cloud providers may need different capacities for the same VNF "cloudOwner" : { return "high net //value" } } //use cloud provider in – <cloud region id, cloud provider> – different cloud providers may need different capacities for the same VNF "cloudOwner" : { "owner": "Azure", "capacityProperty": { //under discussion – "capabilityProperty": {SR_IOV, ...} //under discussion - host network bandwidth "controller": "multicloud", "request": //from R2 "{\"vCPU\": {\"quantity\": {\"get_param\": \"REQUIRED_VCPU\"}, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" } "owner": "AzureOpenStack", "capacityProperty": { //under discussion – "capabilityProperty": {SR_IOV, ...} //under discussion - host network bandwidth "controller": "multicloud", "request": //from R2 "{\"vCPU\": {\"quantity\": {\"get_param\": \"REQUIRED_VCPU\"}, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" } "owner} } "resources": ["vGMux"], //R2 support status – single VF module assumption per VNF "applicableResources": "any", "identity": "OpenStackdistance-vGMux", "capacityPropertypolicyScope": { //under discussion – "capabilityProperty": {SR_IOV, ...} //under discussion - host network bandwidth "controller": "multicloud", "request": //from R2 "{\"vCPU\": {\"quantity\": {\"get_param\": \"REQUIRED_VCPU\"}, \"Memory\": {\"quantity\": {\"get_param\": \"REQUIRED_MEM\"}, \"unit\": \"GB\"}, \"Storage\": {\"quantity\": {\"get_param\": \"REQUIRED_DISK\"}, \"unit\": \"GB\"}}" } } } "resources": ["vGMux"], //R2 support status – single VF module assumption per VNF "applicableResources": "any", "identity": "distance-vGMux", "policyScope": ["vCPE", "US", "INTERNATIONAL", "ip", "vGMux"], "policyType": "AllPolicy" }["vCPE", "US", "INTERNATIONAL", "ip", "vGMux"], "policyType": "AllPolicy" } Net value computation per cloud: [Intent cost -- Configuration file for Private Cloud (e.g. OpenStack), API for Public Cloud (e.g. Azure)] -- Allocated CPU capacity per Tenant - max. 1 -- Allocated Memory capacity per Tenant - max. 1 -- Cost of "Infrastructure High Availability (HA) for VNF" -- Cost of "Infrastructure Resource Isolation for VNF" -- If "Burstable Qos" is supported, use the corresponding cost -- Else use the cost for "Guaranteed QoS" |
Cloud Resource Partitioning for Differentiated QoS (Combined with Previous)
...