[ovs-dev] [PATCH v4 ovn] Containerize components

Numan Siddique nusiddiq at redhat.com
Sat Aug 24 07:34:26 UTC 2019


On Thu, Aug 22, 2019 at 1:54 AM Numan Siddique <nusiddiq at redhat.com> wrote:

>
>
> On Thu, Aug 22, 2019 at 1:35 AM <amginwal at gmail.com> wrote:
>
>> From: Aliasgar Ginwala <aginwala at ebay.com>
>>
>> 1. Containerize ovn central components
>> 2. Containerize ovn host
>> 3. Update documentation about building/running ovn in containers.
>>
>> Signed-off-by: Aliasgar Ginwala <aginwala at ebay.com>
>>
>
> Thanks.
>
> Acked-by: Numan Siddique <nusiddiq at redhat.com>
>

I applied this to master.

Thanks
Numan


>
> Numan
>
>
>> ---
>>  Documentation/intro/install/general.rst  | 83 ++++++++++++++++++++++++
>>  utilities/automake.mk                    | 10 ++-
>>  utilities/docker/Makefile                | 22 +++++++
>>  utilities/docker/create_ovn_dbs.sh       | 18 +++++
>>  utilities/docker/debian/Dockerfile       | 22 +++++++
>>  utilities/docker/debian/build.sh         | 44 +++++++++++++
>>  utilities/docker/ovn_default_nb_port     |  1 +
>>  utilities/docker/ovn_default_northd_host |  1 +
>>  utilities/docker/ovn_default_sb_port     |  1 +
>>  utilities/docker/start-ovn               | 40 ++++++++++++
>>  10 files changed, 241 insertions(+), 1 deletion(-)
>>  create mode 100644 utilities/docker/Makefile
>>  create mode 100755 utilities/docker/create_ovn_dbs.sh
>>  create mode 100644 utilities/docker/debian/Dockerfile
>>  create mode 100755 utilities/docker/debian/build.sh
>>  create mode 100644 utilities/docker/ovn_default_nb_port
>>  create mode 100644 utilities/docker/ovn_default_northd_host
>>  create mode 100644 utilities/docker/ovn_default_sb_port
>>  create mode 100755 utilities/docker/start-ovn
>>
>> diff --git a/Documentation/intro/install/general.rst
>> b/Documentation/intro/install/general.rst
>> index 99d8fec04..1d5323f76 100644
>> --- a/Documentation/intro/install/general.rst
>> +++ b/Documentation/intro/install/general.rst
>> @@ -380,6 +380,60 @@ domain socket::
>>
>>      $ ovn-northd --pidfile --detach --log-file
>>
>> +
>> +Starting OVN Central services in containers
>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> +
>> +For OVN central node, we dont need to load ovs kernel modules on host.
>> +Hence, OVN central containers OS need not depend on host OS.
>> +
>> +Also we can leverage deploying entire OVN control plane in a pod spec
>> for use
>> +cases like OVN-kubernetes
>> +
>> +Export following variables in .env  and place it under
>> +project root::
>> +
>> +    $ OVN_BRANCH=<BRANCH>
>> +    $ OVN_VERSION=<VERSION>
>> +    $ DISTRO=<LINUX_DISTRO>
>> +    $ KERNEL_VERSION=<LINUX_KERNEL_VERSION>
>> +    $ GITHUB_SRC=<GITHUB_URL>
>> +    $ DOCKER_REPO=<REPO_TO_PUSH_IMAGE>
>> +
>> +To build ovn modules::
>> +
>> +    $ cd utilities/docker
>> +    $ make build
>> +
>> +Compiled Modules will be tagged with docker image
>> +
>> +To Push ovn modules::
>> +
>> +    $ make push
>> +
>> +OVN docker image will be pushed to specified docker repo.
>> +
>> +Start OVN containers using below command::
>> +
>> +    $ docker run -itd --net=host --name=ovn-nb \
>> +      <docker_repo>:<tag> ovn-nb-tcp
>> +
>> +    $ docker run -itd --net=host --name=ovn-sb \
>> +      <docker_repo>:<tag> ovn-sb-tcp
>> +
>> +    $ docker run -itd --net=host --name=ovn-northd \
>> +      <docker_repo>:<tag> ovn-northd-tcp
>> +
>> +.. note::
>> +    Current ovn central components comes up in docker image in a
>> standalone
>> +    mode with protocol tcp.
>> +
>> +    The debian docker file use ubuntu 16.04 as a base image for
>> reference.
>> +
>> +    User can use any other base image for debian, e.g. u14.04, etc.
>> +
>> +    RHEL based docker build support needs to be added.
>> +
>>  Starting OVN host service
>>  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> @@ -406,6 +460,32 @@ domain socket::
>>
>>      $ ovn-controller --pidfile --detach --log-file
>>
>> +Starting OVN host service in containers
>> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> +
>> +For OVN host too, we dont need to load ovs kernel modules on host.
>> +Hence, OVN host container OS need not depend on host OS.
>> +
>> +Also we can leverage deploying OVN host in a pod spec for use cases like
>> +OVN-kubernetes to manage OVS which can be running as a service on host
>> or in
>> +container.
>> +
>> +Start ovsdb-server and ovs-vswitchd components as per
>> +http://docs.openvswitch.org/en/latest/intro/install/general/
>> +
>> +start local ovn-controller with below command if ovs is also running in
>> +container::
>> +
>> +    $ docker run -itd --net=host --name=ovn-controller \
>> +      --volumes-from=ovsdb-server \
>> +      <docker_repo>:<tag> ovn-controller
>> +
>> +start local ovn-controller with below command if ovs is running as a
>> service::
>> +
>> +    $ docker run -itd --net=host --name=ovn-controller \
>> +      -v /var/run/openvswitch/:/var/run/openvswitch/ \
>> +      <docker_repo>:<tag> ovn-controller
>> +
>>  Validating
>>  ----------
>>
>> @@ -419,6 +499,9 @@ logical switch ``sw0`` and add logical port
>> ``sw0-p1`` ::
>>
>>  Refer to ovn-nbctl(8) and ovn-sbctl (8) for more details.
>>
>> +When using ovn in container, exec to container to run above commands::
>> +
>> +    $ docker exec -it <ovn-nb/ovn-sb/ovn-northd/ovn-controller> /bin/bash
>>
>>  Reporting Bugs
>>  --------------
>> diff --git a/utilities/automake.mk b/utilities/automake.mk
>> index b2b026f57..9b46940ae 100644
>> --- a/utilities/automake.mk
>> +++ b/utilities/automake.mk
>> @@ -28,7 +28,15 @@ EXTRA_DIST += \
>>      utilities/ovn-trace.8.xml \
>>      utilities/ovn-detrace.in \
>>      utilities/ovndb-servers.ocf \
>> -    utilities/checkpatch.py
>> +    utilities/checkpatch.py \
>> +    utilities/docker/Makefile \
>> +    utilities/docker/start-ovn \
>> +    utilities/docker/create_ovn_dbs.sh \
>> +    utilities/docker/ovn_default_nb_port \
>> +    utilities/docker/ovn_default_sb_port \
>> +    utilities/docker/ovn_default_northd_host \
>> +    utilities/docker/debian/Dockerfile \
>> +    utilities/docker/debian/build.sh
>>
>>  CLEANFILES += \
>>      utilities/ovn-ctl.8 \
>> diff --git a/utilities/docker/Makefile b/utilities/docker/Makefile
>> new file mode 100644
>> index 000000000..e2b2c2a17
>> --- /dev/null
>> +++ b/utilities/docker/Makefile
>> @@ -0,0 +1,22 @@
>> +#export OVN_BRANCH=master
>> +#export OVN_VERSION=2.12
>> +#export KERNEL_VERSION=4.15.0-54-generic
>> +#export DISTRO=debian
>> +#export GITHUB_SRC=https://github.com/ovn-org/ovn.git
>> +#export DOCKER_REPO=ovn-org/ovn
>> +
>> +# Example:
>> +#   make build
>> +#   make push
>> +
>> +REPO = ${DOCKER_REPO}
>> +tag = ${OVN_VERSION}_${KERNEL_VERSION}
>> +
>> +build: ;docker build -t ${REPO}:${tag} --build-arg DISTRO=${DISTRO} \
>> +--build-arg OVN_BRANCH=${OVN_BRANCH} \
>> +--build-arg KERNEL_VERSION=${KERNEL_VERSION} \
>> +--build-arg GITHUB_SRC=${GITHUB_SRC} -f ${DISTRO}/Dockerfile .
>> +
>> +.PHONY: build
>> +
>> +push: ;docker push ${REPO}:${tag}
>> diff --git a/utilities/docker/create_ovn_dbs.sh
>> b/utilities/docker/create_ovn_dbs.sh
>> new file mode 100755
>> index 000000000..43ab367d6
>> --- /dev/null
>> +++ b/utilities/docker/create_ovn_dbs.sh
>> @@ -0,0 +1,18 @@
>> +#!/bin/sh
>> +#
>> +# Licensed under the Apache License, Version 2.0 (the "License");
>> +# you may not use this file except in compliance with the License.
>> +# You may obtain a copy of the License at:
>> +#
>> +#     http://www.apache.org/licenses/LICENSE-2.0
>> +#
>> +# Unless required by applicable law or agreed to in writing, software
>> +# distributed under the License is distributed on an "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> +# See the License for the specific language governing permissions and
>> +# limitations under the License.
>> +
>> +ovsdb-tool create /etc/openvswitch/ovnnb_db.db \
>> +/usr/share/openvswitch/ovn-nb.ovsschema
>> +ovsdb-tool create /etc/openvswitch/ovnsb_db.db \
>> +/usr/share/openvswitch/ovn-sb.ovsschema
>> diff --git a/utilities/docker/debian/Dockerfile
>> b/utilities/docker/debian/Dockerfile
>> new file mode 100644
>> index 000000000..fe72c3a33
>> --- /dev/null
>> +++ b/utilities/docker/debian/Dockerfile
>> @@ -0,0 +1,22 @@
>> +FROM ubuntu:16.04
>> +MAINTAINER "Aliasgar Ginwala" <aginwala at ebay.com>
>> +
>> +ARG OVN_BRANCH
>> +ARG KERNEL_VERSION
>> +ARG GITHUB_SRC
>> +ARG DISTRO
>> +
>> +copy $DISTRO/build.sh /build.sh
>> +RUN /build.sh $KERNEL_VERSION $OVN_BRANCH $GITHUB_SRC
>> +
>> +COPY create_ovn_dbs.sh /etc/openvswitch/create_ovn_dbs.sh
>> +RUN /etc/openvswitch/create_ovn_dbs.sh
>> +
>> +COPY ovn_default_nb_port /etc/openvswitch/ovn_default_nb_port
>> +COPY ovn_default_sb_port /etc/openvswitch/ovn_default_sb_port
>> +COPY ovn_default_northd_host /etc/openvswitch/ovn_default_northd_host
>> +
>> +COPY start-ovn /bin/start-ovn
>> +VOLUME ["/var/log/openvswitch", \
>> +"/var/lib/openvswitch", "/var/run/openvswitch", "/etc/openvswitch"]
>> +ENTRYPOINT ["start-ovn"]
>> diff --git a/utilities/docker/debian/build.sh
>> b/utilities/docker/debian/build.sh
>> new file mode 100755
>> index 000000000..fd26a8aa8
>> --- /dev/null
>> +++ b/utilities/docker/debian/build.sh
>> @@ -0,0 +1,44 @@
>> +#!/bin/sh
>> +#
>> +# Licensed under the Apache License, Version 2.0 (the "License");
>> +# you may not use this file except in compliance with the License.
>> +# You may obtain a copy of the License at:
>> +#
>> +#     http://www.apache.org/licenses/LICENSE-2.0
>> +#
>> +# Unless required by applicable law or agreed to in writing, software
>> +# distributed under the License is distributed on an "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> +# See the License for the specific language governing permissions and
>> +# limitations under the License.
>> +
>> +KERNEL_VERSION=$1
>> +OVN_BRANCH=$2
>> +GITHUB_SRC=$3
>> +
>> +# Install deps
>> +linux="linux-image-$KERNEL_VERSION linux-headers-$KERNEL_VERSION"
>> +build_deps="apt-utils libelf-dev build-essential libssl-dev python \
>> +python-six wget gdb autoconf libtool git automake bzip2 debhelper \
>> +dh-autoreconf openssl"
>> +
>> +apt-get update
>> +apt-get install -y ${linux} ${build_deps}
>> +
>> +# get the source
>> +mkdir /build; cd /build
>> +git clone --depth 1 -b $OVN_BRANCH $GITHUB_SRC
>> +cd ovn
>> +
>> +# build and install
>> +./boot.sh
>> +./configure --localstatedir="/var" --sysconfdir="/etc" --prefix="/usr" \
>> +--with-linux=/lib/modules/$KERNEL_VERSION/build --enable-ssl
>> +make -j8; make install
>> +
>> +# remove deps to make the container light weight.
>> +apt-get remove --purge -y ${build_deps}
>> +apt-get autoremove -y --purge
>> +cd ..; rm -rf ovn
>> +basic_utils="vim kmod net-tools uuid-runtime iproute2"
>> +apt-get install -y ${basic_utils}
>> diff --git a/utilities/docker/ovn_default_nb_port
>> b/utilities/docker/ovn_default_nb_port
>> new file mode 100644
>> index 000000000..d83211678
>> --- /dev/null
>> +++ b/utilities/docker/ovn_default_nb_port
>> @@ -0,0 +1 @@
>> +nb_db_port=6641
>> diff --git a/utilities/docker/ovn_default_northd_host
>> b/utilities/docker/ovn_default_northd_host
>> new file mode 100644
>> index 000000000..55d4ab7aa
>> --- /dev/null
>> +++ b/utilities/docker/ovn_default_northd_host
>> @@ -0,0 +1 @@
>> +northd_host=127.0.0.1
>> diff --git a/utilities/docker/ovn_default_sb_port
>> b/utilities/docker/ovn_default_sb_port
>> new file mode 100644
>> index 000000000..4c9e3f585
>> --- /dev/null
>> +++ b/utilities/docker/ovn_default_sb_port
>> @@ -0,0 +1 @@
>> +sb_db_port=6642
>> diff --git a/utilities/docker/start-ovn b/utilities/docker/start-ovn
>> new file mode 100755
>> index 000000000..7f87e65a3
>> --- /dev/null
>> +++ b/utilities/docker/start-ovn
>> @@ -0,0 +1,40 @@
>> +#!/bin/bash
>> +#
>> +# Licensed under the Apache License, Version 2.0 (the "License");
>> +# you may not use this file except in compliance with the License.
>> +# You may obtain a copy of the License at:
>> +#
>> +#     http://www.apache.org/licenses/LICENSE-2.0
>> +#
>> +# Unless required by applicable law or agreed to in writing, software
>> +# distributed under the License is distributed on an "AS IS" BASIS,
>> +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>> +# See the License for the specific language governing permissions and
>> +# limitations under the License.
>> +
>> +case $1 in
>> +        "ovn-nb-tcp") source /etc/openvswitch/ovn_default_nb_port
>> +                      /usr/share/openvswitch/scripts/ovn-ctl start_ovsdb
>> +                      ovn-nbctl set-connection ptcp:$nb_db_port
>> +                      /usr/share/openvswitch/scripts/ovn-ctl stop_ovsdb
>> +                      /usr/share/openvswitch/scripts/ovn-ctl run_nb_ovsdb
>> +        ;;
>> +        "ovn-sb-tcp") source /etc/openvswitch/ovn_default_sb_port
>> +                      /usr/share/openvswitch/scripts/ovn-ctl start_ovsdb
>> +                      ovn-sbctl set-connection ptcp:$sb_db_port
>> +                      /usr/share/openvswitch/scripts/ovn-ctl stop_ovsdb
>> +                      /usr/share/openvswitch/scripts/ovn-ctl run_sb_ovsdb
>> +        ;;
>> +        "ovn-northd-tcp") source /etc/openvswitch/ovn_default_northd_host
>> +                          source /etc/openvswitch/ovn_default_nb_port
>> +                          source /etc/openvswitch/ovn_default_sb_port
>> +                          ovn-northd --pidfile \
>> +                          --ovnnb-db="tcp:$northd_host:$nb_db_port" \
>> +                          --ovnsb-db="tcp:$northd_host:$sb_db_port" \
>> +                          --log-file=/var/log/openvswitch/ovn-northd.log
>> +        ;;
>> +        "ovn-controller") ovn-controller --pidfile \
>> +
>> --log-file=/var/log/openvswitch/ovn-controller.log
>> +        ;;
>> +        *) echo "$0
>> [ovn-nb-tcp|ovn-sb-tcp|ovn-northd-tcp|ovn-controller]"
>> +esac
>> --
>> 2.20.1 (Apple Git-117)
>>
>> _______________________________________________
>> dev mailing list
>> dev at openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>>
>


More information about the dev mailing list