Sure thanks. V3 is @ https://patchwork.ozlabs.org/patch/1150989/
On Wed, Aug 21, 2019 at 6:15 AM Numan Siddique <nusid...@redhat.com> wrote: > On Sat, Aug 17, 2019 at 12:53 PM Aliasgar Ginwala <amgin...@gmail.com> > wrote: > > > 1. Containerize ovn central components > > 2. Containerize ovn host > > 3. Update documentation about building/running ovn in containers. > > > > Signed-off-by: aginwala <aginw...@ebay.com> > > > > This patch has conflicts. Would you mind submit v3 rebasing the patch ? > > Thanks > 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 d666b9661..4d86f082b 100644 > > --- a/utilities/automake.mk > > +++ b/utilities/automake.mk > > @@ -27,7 +27,15 @@ EXTRA_DIST += \ > > utilities/ovn-nbctl.8.xml \ > > utilities/ovn-trace.8.xml \ > > utilities/ovn-detrace.in \ > > - utilities/ovndb-servers.ocf > > + utilities/ovndb-servers.ocf \ > > + 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" <aginw...@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 > > d...@openvswitch.org > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > _______________________________________________ > dev mailing list > d...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev