OpenStack (Optional)

The openstack-helm project can be used to install a set of Kubernetes nodes as OpenStack compute nodes, with the OpenStack control services (nova, neutron, keystone, glance, etc.) running as containers on Kubernetes. This is necessary, for example, to run the M-CORD profile.

Instructions for installing openstack-helm on a single node or a multi-node cluster can be found at https://docs.openstack.org/openstack-helm/latest/index.html.

The following describes steps for installing openstack-helm, including how to customize the documented install procedure with specializations for CORD. Specifically, CORD uses the VTN ONOS app to control Open vSwitch on the compute nodes and configure virtual networks between VMs on the OpenStack cluster. Neutron must be configured to pass control to ONOS rather than using openvswitch-agent to manage OvS.

After the install process is complete, you won't yet have a fully-working OpenStack system; you will need to install the base-openstack chart first.

Single-Node Quick Start

For convenience, a script to install Kubernetes, Helm, and openstack-helm on a single Ubuntu 16.04 node is provided in the automation-tools repository. This script also customizes the install as described below.

git clone https://gerrit.opencord.org/automation-tools
automation-tools/openstack-helm/openstack-helm-dev-setup.sh

If you run this script you can skip the instructions on the rest of this page.

Customizing the openstack-helm Install for CORD

To enable the VTN app to control Open vSwitch on the compute nodes, it is necessary to customize the openstack-helm installation. The customization occurs through specifiying values.yaml files to use when installing the Helm charts.

The openstack-helm installation process designates one node as the master node; the Helm commands are run on this node. The following values files should be created on the master node prior to installing the openstack-helm charts.

cat <<EOF > /tmp/glance-cord.yaml
---
network:
  api:
    ingress:
      annotations:
        nginx.ingress.kubernetes.io/proxy-body-size: "0"
EOF
export OSH_EXTRA_HELM_ARGS_GLANCE="-f /tmp/glance-cord.yaml"
cat <<EOF > /tmp/libvirt-cord.yaml
---
network:
  backend: []
EOF
export OSH_EXTRA_HELM_ARGS_LIBVIRT="-f /tmp/libvirt-cord.yaml"
cat <<EOF > /tmp/nova-cord.yaml
---
labels:
  api_metadata:
    node_selector_key: openstack-helm-node-class
    node_selector_value: primary
network:
  backend: []
pod:
  replicas:
    api_metadata: 1
    placement: 1
    osapi: 1
    conductor: 1
    consoleauth: 1
    scheduler: 1
    novncproxy: 1
EOF
export OSH_EXTRA_HELM_ARGS_NOVA="-f /tmp/nova-cord.yaml"
cat <<EOF > /tmp/neutron-cord.yaml
---
images:
  tags:
    neutron_server: xosproject/neutron-onos:newton
manifests:
  daemonset_dhcp_agent: false
  daemonset_l3_agent: false
  daemonset_lb_agent: false
  daemonset_metadata_agent: false
  daemonset_ovs_agent: false
  daemonset_sriov_agent: false
network:
  backend: []
  interface:
    tunnel: "eth0"
pod:
  replicas:
    server: 1
conf:
  plugins:
    ml2_conf:
      ml2:
        type_drivers: vxlan
        tenant_network_types: vxlan
        mechanism_drivers: onos_ml2
      ml2_type_vxlan:
        vni_ranges: 1001:2000
      onos:
        url_path: http://onos-cord-ui.default.svc.cluster.local:8181/onos/cordvtn
        username: onos
        password: rocks
EOF
export OSH_EXTRA_HELM_ARGS_NEUTRON="-f /tmp/neutron-cord.yaml"

It is also necessary to make a small change to openstack-helm's openvswitch chart: the /usr/sbin/ovsdb-server must be executed with the --remote=ptcp:6641 option to listen for the connection from VTN. After the openstack-helm repository is checked out during the install process, run the following command:

cd openstack-helm/openvswitch/templates/bin
sed -i 's/--remote=db:Open_vSwitch,Open_vSwitch,manager_options/--remote=db:Open_vSwitch,Open_vSwitch,manager_options --remote=ptcp:6641/' _openvswitch-db-server.sh.tpl

Install Process for openstack-helm

Please see the openstack-helm documentation for instructions on how to install openstack-helm on a single node (for development and testing) or a multi-node cluster.

The install process is flexible and fairly modular; see the links above for more information. At a high level, it involves running scripts to:

  • Install software like Kubernetes and Helm
  • Build the Helm charts and install them in a local Helm repository
  • Install requried packages
  • Configure DNS on the nodes (NOTE: The openstack-helm install overwrites /etc/resolv.conf on the compute hosts and points the upstream nameservers to Google DNS. If a local upstream is required, see this note.)
  • Generate values.yaml files based on the environment and install Helm charts using these files
  • Run post-install tests on the OpenStack services