On Thu, Aug 22, 2019 at 1:54 AM Numan Siddique <[email protected]> wrote:
> > > On Thu, Aug 22, 2019 at 1:35 AM <[email protected]> wrote: > >> From: Aliasgar Ginwala <[email protected]> >> >> 1. Containerize ovn central components >> 2. Containerize ovn host >> 3. Update documentation about building/running ovn in containers. >> >> Signed-off-by: Aliasgar Ginwala <[email protected]> >> > > Thanks. > > Acked-by: Numan Siddique <[email protected]> > 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" <[email protected]> >> + >> +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 >> [email protected] >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev >> > _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
