..
   SPDX-FileCopyrightText: © 2020 Open Networking Foundation <support@opennetworking.org>
   SPDX-License-Identifier: Apache-2.0

Deployment Guide
================

Deployment Overview
-------------------
SD-Fabric is released with Helm chart and container images.
We recommend using **Kubernetes** and **Helm** to deploy SD-Fabric.
Here's a list of high level steps required to deploy SD-Fabric:

1. **Provision switch**

   We first need to install operating system with Docker and Kubernetes on the bare-metal switches.

2. **Prepare switches as special Kubernetes nodes**

   Kubernetes ``label`` and ``taint`` are used to configure switches as special Kubernetes worker nodes.
   This is to make sure we deploy Stratum (and only Stratum) on switches.

3. **Prepare access credential for SD-Fabric images**

   SD-Fabric images are hosted on an ONF member-only Docker registry.
   You need to obtain access token and supply that as part of the Helm value in Step 6.

4. **Prepare ONOS network configuration**

   Network configuration defines properties such as switch pipeconf, subnet and VLAN.

5. **Prepare Stratum chassis configuration for each switch**

   Chassis config defines switch properties such as port speed and breakout.

6. **Install SD-Fabric** using Helm

   Finally, we are going to install SD-Fabric with the information we prepared in Step 1 to 5.

Step 1: Provision Switches
--------------------------

We follow Open Network Install Environment(ONIE) way to install Open Network Linux (ONL) image to switch.
To work with the SD-Fabric environment, we have customized the ONL image to support related packages and dependencies.

Image source file can be found on ONF repository `opennetworkinglab/OpenNetworkLinux <https://github.com/opennetworkinglab/OpenNetworkLinux>`_.
You can also download pre-compiled artifacts from `Github Release page <https://github.com/opennetworkinglab/OpenNetworkLinux/releases>`_


.. note::
    If you're not familiar with ONIE/ONL environment, please check `Getting Started <https://github.com/opencomputeproject/OpenNetworkLinux/blob/master/docs/GettingStarted.md>`_ to
    see how to install the ONL image to an ONIE supported switch.

Below is an example about how to install the ONL image.

1. Prepare a server which is accessible by the switch and then download the
pre-compiled installer from the release page.

.. code-block::

   wget https://github.com/opennetworkinglab/OpenNetworkLinux/releases/download/v1.4.3/ONL-onf-ONLPv2_ONL-OS_2021-07-16.2159-5195444_AMD64_INSTALLED_INSTALLER
   python -m http.server 8080

2. Reboot the switch to enter ONIE installation mode

.. note::
    Please access the switch via BMC or serial console to keep connection during the installation.


.. code-block::

   onl-onie-boot-mode rescue; reboot

3. Install ONL installer

.. code-block::

   onie-nos-install http://$SERVER_IP:8080/ONL-onf-ONLPv2_ONL-OS_2021-07-16.2159-5195444_AMD64_INSTALLED_INSTALLER

4. Setup switch IP and hostname after the installation.


Step 2: Configure switches as special Kubernetes nodes
------------------------------------------------------

Our `ONL <https://github.com/opennetworkinglab/OpenNetworkLinux>`_ version
includes all packages required by running the Kubernetes on top of it.
Once the Kubernetes is ready, the `Stratum <https://opennetworking.org/stratum/>`_ application will be deployed to the switch to manage it.

Unlike server, switch has less CPU and memory resources and we should avoid
deploying unnecessary workloads into switch.
Besides, the Stratum application should only be deployed to all switches.

To achieve the above goals, please apply the resources to your Kubernetes cluster.

1. Set up Label to all switch node, e.g ``node-role.kubernetes.io=switch``
2. Set up Taint with ``NoSchedule`` to all switch node, e.g ``node-role.kubernetes.io=switch:NoSchedule``
3. Properly configure the ``NodeSelector`` and ``Toleration`` when deploying Stratum via DaemonSet

Example of a five nodes Kubernetes cluster, two switches and three servers

.. code-block::

     ╰─$ kubectl get node -o custom-columns=NAME:.metadata.name,TAINT:.spec.taints
     NAME       TAINT
     compute1   <none>
     compute2   <none>
     compute3   <none>
     leaf1      [map[effect:NoSchedule key:node-role.kubernetes.io value:switch]]
     leaf2      [map[effect:NoSchedule key:node-role.kubernetes.io value:switch]]
     ╰─$ kubectl get nodes -lnode-role.kubernetes.io=switch
     NAME    STATUS   ROLES    AGE   VERSION
     leaf1   Ready    worker   27d   v1.18.8
     leaf2   Ready    worker   27d   v1.18.8


Step 3: Prepare access credential for SD-Fabric images
------------------------------------------------------

Container images can be download from ONF self-hosted container registry but you have to gain the access token first.

1. Login to `Aether Harbor Registry <https://registry.aetherproject.org/harbor/sign-in?redirect_url=%2Fharbor%2Fprojects>`_ using your ONF Crowd credential,
2. Select ``User Profile`` drop-down menu in the upper-right corner
3. Generate the CLI secret and it's the secret token you have to access the container registry via CLI tool.
4. Login to the container registry with your username and access token
   by ``docker login command`` to ensure you can access it.

.. code-block::

      ╰─$ docker login registry.aetherproject.org --username hwchiu
      Password:
      Login Succeeded

Step 4: Prepare ONOS network configuration
------------------------------------------
   See :ref:`onos_network_config` for instructions

Step 5: Prepare Stratum chassis configuration
---------------------------------------------
   See See :ref:`stratum_chassis_config` for instructions

.. _install_sd_fabric:

Step 6: Install SD-Fabric with Helm
-----------------------------------

To install SD-Fabric into your Kubernetes cluster, follow instructions
described on the `SD-Fabric Helm Chart README <https://gerrit.opencord.org/plugins/gitiles/sdfabric-helm-charts/+/HEAD/sdfabric/README.md>`_
