tacker/doc/source/user/etsi_cnf_change_current_vnf...

546 lines
18 KiB
ReStructuredText

===========================================
ETSI NFV-SOL CNF Change Current VNF Package
===========================================
This document describes how to change current VNF package for CNF in Tacker.
Overview
--------
The diagram below shows an overview of changing current VNF package.
1. Request Change Current VNF Package
A user requests tacker-server to change current VNF package for VNF instance
with tacker-client by requesting ``change current vnf package``.
2. Call Kubernetes API
Upon receiving a request from tacker-client, tacker-server redirects it to
tacker-conductor. In tacker-conductor, the request is redirected again to
an appropriate infra-driver (in this case Kubernetes infra-driver) according
to the contents of VNF instance. Then, Kubernetes infra-driver calls
Kubernetes APIs.
3. Change the image of Container defined in the manifest file of Deployment
Kubernetes Master update the image of Container defined in the manifest
file of Deployment according to the API calls.
.. figure:: ../_images/etsi_cnf_change_current_vnf_package.png
:align: left
Prerequisites
-------------
The following packages should be installed:
* tacker
* python-tackerclient
At least one VNF instance with status of ``INSTANTIATED`` is required.
You can refer to :doc:`./etsi_containerized_vnf_usage_guide` for the
procedure to instantiate VNF.
You can also refer to :doc:`./vnf-package` for the operation of uploading
VNF package.
The sample packages for CNF can be obtained from the following links.
* `VNF Package for Common instantiate`_
* `VNF Package for Change Current VNF Package`_
Change Current VNF Package
--------------------------
As mentioned in Prerequisites, the VNF must be created
before performing change current VNF package.
You need to upload the VNF package you want to change to before
executing change current vnf package.
Details of CLI commands are described in
:doc:`../cli/cli-etsi-vnflcm`.
For changing current VNF package, you need to prepare a JSON-formatted
definition file before running command for changing the VNF package.
``sample_param_file_for_specified_resources.json:``
.. code-block:: json
{
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
"additionalParams": {
"upgrade_type": "RollingUpdate",
"lcm-kubernetes-def-files": ["Files/new_kubernetes/new_deployment.yaml"],
"vdu_params": [{
"vdu_id": "VDU1"
}]
}
}
``sample_param_file_without_specified_resources.json:``
.. code-block:: json
{
"vnfdId": "c6595341-a5bb-8246-53c4-7aeb843d60c5",
"additionalParams": {
"upgrade_type": "RollingUpdate",
}
}
.. note::
Unlike Change Current Vnf Package for VNF,
coordination scripts are not supported for CNF.
Therefore, lcm-operation-coordinate files need not be
specified by `additionalParams`.
You can set following parameter in additionalParams:
.. list-table:: additionalParams
:widths: 15 10 30
:header-rows: 1
* - Attribute name
- Cardinality
- Parameter description
* - upgrade_type
- 1
- Type of file update operation method. Specify Blue-Green or Rolling update.
* - vdu_params
- 1..N
- VDU information of target VDU to update.
* - > vdu_id
- 1
- VDU name of target VDU to update.
.. note:: ``sample_param_file_for_specified_resources.json`` contains
all optional parameters.
* ``vnfdId`` is the vnfd id of the new VNF package you uploaded.
* ``lcm-kubernetes-def-files`` is only used in Kubernetes VIM, not
OpenStack VIM. And you only need to set this parameter when you need to
update the path of the manifest file of the deployment resource.
* ``vdu_params`` is VDU information of target VDU to update.
.. note:: Currently, this operation only supports some functions of
``Change Current VNF Package``.
* There are several ways to update deployment, but Yoga version Tacker only
supports ``RollingUpdate`` type. You can set it via ``upgrade_type``
param.
* Currently only support update images of deployment.
* Currently unsupported updates:
* This API currently does not support increasing or decreasing the number
of Pods according to the VNF package.
* The add and delete operations of the entire deployment are not
supported.
* In the definition of ETSI, external networks (e.g. extVirtualLinks,
extManagedVirtualLinks) can be modified. This API currently does not
support the operations of modifying, adding, and deleting these
networks.
How to Change Current VNF Package with specified resource
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can update only specific kubernetes resources (e.g. deployment) by
specifying the file path of the kubernetes definition file in the
``lcm-kubernetes-def-files`` and vdu information in ``vdu_params``
of the ``change current VNF package`` request parameter file
(e.g. sample_param_file_for_specified_resources.json).
Execute Change Current VNF Package CLI command. After complete this change
operation you should check resource status by Kubernetes CLI commands.
1. check deployment's image information. This is to confirm that deployment's
image has changed before and after operation.
2. check the age of deployment and pods under this deployment. This is to
confirm that the deployment has not redeployed before and after operation,
and the pods under this deployment have redeployed.
3. check the status and name of pods under this deployment. This is to confirm
that the status of pods under this deployment are running, the name of pods
under this deployment has changed before and after operation.
Deployment information before operation:
.. code-block:: console
$ kubectl get deployment -o wide -n curry
Result:
.. code-block:: console
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
vdu2 2/2 2 2 20s nginx nginx app=webserver
Deployment detailed information before operation:
.. code-block:: console
$ kubectl describe deployment vdu2 -n curry
Result:
.. code-block:: console
Name: vdu2
Namespace: curry
CreationTimestamp: Tue, 22 Mar 2022 03:04:03 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=webserver
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=webserver
Containers:
nginx:
Image: nginx
Port: 80/TCP
Host Port: 0/TCP
Limits:
memory: 200Mi
Requests:
memory: 100Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: vdu2-674d7d8766 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 37s deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
Pods information before operation:
.. code-block:: console
$ kubectl get pods -o wide -n curry
Result:
.. code-block:: console
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vdu2-674d7d8766-8mcb6 1/1 Running 0 72s 10.233.96.15 node2 <none> <none>
vdu2-674d7d8766-tmlhd 1/1 Running 0 72s 10.233.96.14 node2 <none> <none
Change Current VNF Package execution of the entire VNF:
.. code-block:: console
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
./sample_param_file_for_specified_resources.json \
--os-tacker-api-version 2
Result:
.. code-block:: console
Change Current VNF Package for VNF Instance f9bb1ad5-2e30-4074-86d9-3da3a636601a has been accepted.
Deployment information after operation:
.. code-block:: console
$ kubectl get deployment -o wide -n curry
Result:
.. code-block:: console
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
vdu2 2/2 2 2 6m23s nginx nginx:alpine app=webserver
Deployment detailed information after operation:
.. code-block:: console
$ kubectl describe deployment vdu2 -n curry
Result:
.. code-block:: console
Name: vdu2
Namespace: curry
CreationTimestamp: Tue, 22 Mar 2022 03:04:03 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 2
Selector: app=webserver
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=webserver
Containers:
nginx:
Image: nginx:alpine
Port: 80/TCP
Host Port: 0/TCP
Limits:
memory: 200Mi
Requests:
memory: 100Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: vdu2-6696c74f5c (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 6m46s deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
Normal ScalingReplicaSet 78s deployment-controller Scaled up replica set vdu2-6696c74f5c to 1
Normal ScalingReplicaSet 67s deployment-controller Scaled down replica set vdu2-674d7d8766 to 1
Normal ScalingReplicaSet 67s deployment-controller Scaled up replica set vdu2-6696c74f5c to 2
Normal ScalingReplicaSet 55s deployment-controller Scaled down replica set vdu2-674d7d8766 to 0
.. note:: ``image`` has changed from ``nginx`` to ``nginx:alpine``.
The age of deployment ``vdu2`` has not been reset, so deployment ``vdu2``
has not redeployed.
Pods information after operation:
.. code-block:: console
$ kubectl get pods -o wide -n curry
Result:
.. code-block:: console
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vdu2-6696c74f5c-9xwvv 1/1 Running 0 114s 10.233.96.17 node2 <none> <none>
vdu2-6696c74f5c-kgtjt 1/1 Running 0 2m5s 10.233.96.16 node2 <none> <none>
.. note:: ``name`` of pods has changed before and after operation.
The age of pods under deployment has been reset, so pods under
this deployment has redeployed before and after operation.
How to Change Current VNF Package without specified resource
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We can update all kubernetes deployment resources by not
specifying the file path of the kubernetes definition file in the
``lcm-kubernetes-def-files`` and vdu information in ``vdu_params``
of the ``change current VNF package`` request parameter file
(e.g. sample_param_file_without_specified_resources.json).
Execute Change Current VNF Package CLI command. After complete this change
operation you should check resource status by Kubernetes CLI commands.
1. check all deployments' image information. This is to confirm that
all deployments' images have changed before and after operation.
2. check the ages of deployments and pods under each deployment. This is to
confirm that the deployments have not redeployed before and after operation,
and the pods under each deployment have redeployed.
3. check the status and name of pods under this deployment. This is to confirm
that the status of pods under deployments are running, the names of pods
under deployments have changed before and after operation.
Deployments information before operation:
.. code-block:: console
$ kubectl get deployment -o wide
Result:
.. code-block:: console
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
vdu2 2/2 2 2 14s nginx nginx app=webserver
Deployment detailed information before operation:
.. code-block:: console
$ kubectl describe deployment vdu2
Result:
.. code-block:: console
Name: vdu2
Namespace: default
CreationTimestamp: Tue, 22 Mar 2022 05:38:12 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=webserver
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=webserver
Containers:
nginx:
Image: nginx
Port: 80/TCP
Host Port: 0/TCP
Limits:
memory: 200Mi
Requests:
memory: 100Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: vdu2-674d7d8766 (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 73s deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
Pods information before operation:
.. code-block:: console
$ kubectl get pods -o wide
Result:
.. code-block:: console
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vdu2-674d7d8766-9bbnp 1/1 Running 0 2m13s 10.233.96.19 node2 <none> <none>
vdu2-674d7d8766-r9wz5 1/1 Running 0 2m13s 10.233.96.18 node2 <none> <none>
Change Current VNF Package execution of the entire VNF:
.. code-block:: console
$ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \
./sample_param_file_without_specified_resources.json \
--os-tacker-api-version 2
Result:
.. code-block:: console
Change Current VNF Package for VNF Instance 51dc9635-aaf0-4acf-b069-86017a39e2f4 has been accepted.
Deployments information after operation:
.. code-block:: console
$ kubectl get deployment -o wide
Result:
.. code-block:: console
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
vdu2 2/2 2 2 19m nginx nginx:alpine app=webserver
Deployment detailed information after operation:
.. code-block:: console
$ kubectl describe deployment vdu2
Result:
.. code-block:: console
Name: vdu2
Namespace: default
CreationTimestamp: Tue, 22 Mar 2022 05:38:12 +0000
Labels: <none>
Annotations: deployment.kubernetes.io/revision: 2
Selector: app=webserver
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=webserver
Containers:
nginx:
Image: nginx:alpine
Port: 80/TCP
Host Port: 0/TCP
Limits:
memory: 200Mi
Requests:
memory: 100Mi
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: vdu2-6696c74f5c (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 20m deployment-controller Scaled up replica set vdu2-674d7d8766 to 2
Normal ScalingReplicaSet 15m deployment-controller Scaled up replica set vdu2-6696c74f5c to 1
Normal ScalingReplicaSet 14m deployment-controller Scaled down replica set vdu2-674d7d8766 to 1
Normal ScalingReplicaSet 14m deployment-controller Scaled up replica set vdu2-6696c74f5c to 2
Normal ScalingReplicaSet 14m deployment-controller Scaled down replica set vdu2-674d7d8766 to 0
.. note:: ``image`` has changed from ``nginx`` to ``nginx:alpine``.
The age of deployment ``vdu2`` has not been reset, so deployment ``vdu2``
has not redeployed.
Pods information after operation:
.. code-block:: console
$ kubectl get pods -o wide
Result:
.. code-block:: console
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
vdu2-6696c74f5c-cjdh8 1/1 Running 0 15m 10.233.96.21 node2 <none> <none>
vdu2-6696c74f5c-ssztd 1/1 Running 0 15m 10.233.96.20 node2 <none> <none>
.. note:: ``name`` of pods has changed before and after operation.
The age of pods under deployment has been reset, so pods under
this deployment has redeployed before and after operation.
.. _VNF Package for Common instantiate: https://opendev.org/openstack/tacker/src/branch/master/tacker/tests/functional/sol_kubernetes_v2/samples/test_instantiate_cnf_resources/contents
.. _VNF Package for Change Current VNF Package: https://opendev.org/openstack/tacker/src/branch/master/tacker/tests/functional/sol_kubernetes_v2/samples/test_change_vnf_pkg_with_deployment/contents
.. _ETSI SOL002 v3.5.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.05.01_60/gs_nfv-sol002v030501p.pdf