NSD requirements for ASD deployment
Introduction
Supporting ASD deployment in NSD is required in cloud native service deployment. ETSI NFV SOL001 has NSD defined. This NSD structure could contain one or more VNF node template.
The proposed solution is to use the NSD to support ASD without any NSD standardization impacts. It only requires a sub-set of the existing NSD functionality which is needed for ONAP to define. The ASD support would be provided by an ONAP tailored “NFVO-light” with a sub-set of the NFVO functionality and an integrated ASD application manager component. The ONAP NFVO-light could expose a subset of the ETSI NFV SOL005 as an internal SMO interface. This would be a natural consequence when using the ETSI NFV NSD, rather than inventing a new NBI. However, this “NFVO-light” shall be standardized in ONAP so that vendor provided ASDs + NSDs can be onboarded into ONAP.
NSD referring to ASD
In order to avoid any changes to the NSD standard, the way to refer to a VNF as a VNF node template in the NSD shall be kept the same. This means that the VNF node template shall have an ETSI compliant VNF node type definition, derived from the tosca.nodes.nfv.VNF node type and the NSD will use this node type to refer to the ASD package. Meaning a generic “asdInNsd” node type is defined derived from the ETSI VNF node type, with default/fixed values for any property not used by the ASD and a number of generic virtual link requirements. The vnf_profile property in the ETSI VNF node type shall be possible to used to define the VNF cardinality in the NSD
The “asdInNsd” node type definition for the ASD must be included in both the NSD CSAR and the ASD CSAR package as it is referred from both the NSD and ASD yaml.
In the NSD the ASD package will be referred using the VNF node type descriptor_id. An NFVO that supports onboarding of ASD packages would need to have logic to identify the ASD package based on this descriptor_id. It is supported by exposing an ASD-unique descriptor_id as a substitution filter in the ASD TOSCA yaml file.
The NSD shall also support a VNF package invariant id for the ASD package
NSD features that shall be supported for the ASD
The NSD shall still support to define min/max number of instances within the vnf_profile
This will be used in order to support flexible deployment of ASD instances
The existing SOL005 support for Instantiate NS with zero occurrence of some VNF instances and Update NS in order to add VNF instances later can be used for this
The external virtual link requirement mapping towards NS Virtual Links is required
The simplification will be to define a fixed set of Virtual Link requirements in the asdInNsd node type definition
If a fixed set is not seen as sufficient it would also be possible in TOSCA to just define one Virtual Link requirement with occurrence [0, UNBOUNDED]
Instead of references to cpdIds an implicit reference based on the cpdIds list order will be used, first cpdId using first Virtual Link etc.
The NSD shall support NSD specific NS additional params
It could be relevant to define a number of pre-defined NS additional params, e.g. for target cluster name/id
NSD features not used for ASD packages
The ASD does not have support for multiple deployment flavors, thus the flavor_id would not be needed in the VNF node template
It is already optional so no changes to the NSD template structure
It can be constrained/defaulted to “simple” in the asdInNsd
The ASD does not have support for instantiation levels and scaling, thus the instantiation_level would not be needed in vnf_profile in the VNF node template
It is already optional so no changes to the NSD template structure
NSD level deployment flavor, scaling and instantiation level would not be used
NSD Service Access Points and externally exposed Virtual Link requirements would not be needed.
The NS Virtual Links created based on the ASD virtual link requirements would connect to transport network VPNs that can provide connectivity both within an NS Virtual Link (for distributed NS deployment) and between NS Virtual Links in different NS:es connected to the same VPN
Dedicated transport network VPNs for certain NS instances/NS Virtual Links can still be created/managed on Service Orchestration level
No requirements on Forwarding Graph support
Support for hierarchical NSDs under discussion in the ongoing Cloud RAN orchestration study
Hierarchical NSDs could be a solution for deploying only the NS Virtual Links/network resources that are needed for the deployed FUUs
But the preferred solution is instead to include logic in the ORAN NFVO-light to only deploy NS virtual Links with their network resources if at least one FUU that requires the NS Virtual Link is deployed in the NS
Will require changes in the SOL005 NS Update operation if an NS Virtual Link shall be added later
No PNF support, the scope for the NSD is only to manage virtualized deployments
Sharing of VNF instances between NS instances
This is recommended to be handled on SO level by sharing of resources in a common NS instance
Note 1: The details of the node type definition for asd and asdInNsd can be found in the following wiki page: TOSCA node types of ASD
Note 2: The details of ASD service template example can be found in the following wiki page: Application Service Descriptor (ASD) Resource Data Model
Note 3: The details of the NSD template example is following:
example of the NSD template
tosca_definitions_version: tosca_simple_yaml_1_3
imports: nsd_types.yaml
node_types:
tosca.example_NS:
derived_from: tosca.nodes.nfv.NS
properties:
descriptor_id:
type: string
constraints: [ equal: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177 ]
default: b1bb0ce7-ebca-4fa7-95ed-4840d70a1177
designer:
type: string
constraints: [ equal: MyCompany ]
default: MyCompany
name:
type: string
constraints: [ equal: ExampleService ]
default: ExampleService
version:
type: string
constraints: [ equal: '1.0' ]
default: '1.0'
invariant_id:
type: string
constraints: [ equal: b1bb0ce7-ebca-4fa7-95ed-4840d70a8888 ]
default: b1bb0ce7-ebca-4fa7-95ed-4840d70a8888
flavour_id:
type: string
constraints: [ equal: simple ]
default: simple
interfaces:
Nslcm:
type: tosca.interfaces.nfv.Nslcm
operations:
instantiate:
inputs:
additional_parameters:
type: MyCompany.datatypes.nfv.NsInstantiateAdditionalParameters
topology_template:
node_templates:
my_service:
type: tosca.example_NS
properties:
descriptor_id: 123e4567-e89b-12d3-a456-426614174000
designer: MyCompany
name: ExampleService
version: '1.0'
invariant_id: zzze4567-e89b-12d3-a456-426614174uuu
flavour_id: simple
interfaces:
Nslcm:
operations:
instantiate:
implementation: instantiate.workflow.yaml
terminate:
implementation: terminate.workflow.yaml
asd_1:
type: tosca.nodes.asdInNsd
properties:
descriptor_id: 123e4567-e89b-2222-1111-426614174000
requirements:
- virtual_links: NsVirtualLink_1
- virtual_links: NsVirtualLink_2
asd_2:
type: tosca.nodes.asdInNsd
properties:
descriptor_id: 123e4567-e89b-3214-0000-426614174000
requirements:
- virtual_links: NsVirtualLink_1
- virtual_links: NsVirtualLink_2
- dependency: asd_1
NsVirtualLink_1:
type: tosca.nodes.nfv.NsVirtualLink
properties:
connectivity_type:
layer_protocols: [ipv4]
flow_pattern: mesh
vl_profile:
max_bitrate_requirements:
root: 1000
min_bitrate_requirements:
root: 1000
NsVirtualLink_2:
type: tosca.nodes.nfv.NsVirtualLink
properties:
connectivity_type:
layer_protocols: [ipv4]
flow_pattern: mesh
vl_profile:
max_bitrate_requirements:
root: 5000
min_bitrate_requirements:
root: 10000
policies:
- ...