From c27f1f5c7b8100f470cd29b3d0b3a19961059512 Mon Sep 17 00:00:00 2001 From: Hui Kang Date: Tue, 14 Mar 2017 17:58:30 +0000 Subject: [PATCH] Add OVS 2.7.0 - instruction for loading compiled kernel module - ovn related command Signed-off-by: Hui Kang --- 2.7.0/Dockerfile | 32 ++++++++++++++ 2.7.0/configure-ovs.sh | 15 +++++++ 2.7.0/supervisord.conf | 96 ++++++++++++++++++++++++++++++++++++++++++ Dockerfile | 4 +- Makefile | 3 +- README.md | 39 ++++++++++++++++- configure-ovs.sh | 1 - latest | 2 +- 8 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 2.7.0/Dockerfile create mode 100755 2.7.0/configure-ovs.sh create mode 100644 2.7.0/supervisord.conf diff --git a/2.7.0/Dockerfile b/2.7.0/Dockerfile new file mode 100644 index 0000000..3099bb1 --- /dev/null +++ b/2.7.0/Dockerfile @@ -0,0 +1,32 @@ +FROM socketplane/busybox:latest +MAINTAINER The SocketPlane Team +ENV OVS_VERSION 2.7.0 +ENV SUPERVISOR_STDOUT_VERSION 0.1.1 +# Configure supervisord +RUN mkdir -p /var/log/supervisor/ +ADD supervisord.conf /etc/ +# Install supervisor_stdout +WORKDIR /opt +RUN mkdir -p /var/log/supervisor/ +RUN mkdir -p /etc/openvswitch +RUN wget https://pypi.python.org/packages/source/s/supervisor-stdout/supervisor-stdout-$SUPERVISOR_STDOUT_VERSION.tar.gz --no-check-certificate && \ + tar -xzvf supervisor-stdout-0.1.1.tar.gz && \ + mv supervisor-stdout-$SUPERVISOR_STDOUT_VERSION supervisor-stdout && \ + rm supervisor-stdout-0.1.1.tar.gz && \ + cd supervisor-stdout && \ + python setup.py install -q +# Get Open vSwitch +WORKDIR / +RUN wget https://s3-us-west-2.amazonaws.com/docker-ovs/openvswitch-$OVS_VERSION.tar.gz --no-check-certificate && \ + tar -xzvf openvswitch-$OVS_VERSION.tar.gz && \ + mv openvswitch-$OVS_VERSION openvswitch && \ + cp -r openvswitch/* / && \ + rm -r openvswitch && \ + rm openvswitch-$OVS_VERSION.tar.gz + +ADD configure-ovs.sh /usr/local/share/openvswitch/ +# Create the database +RUN ovsdb-tool create /etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema +# Put the OVS Python modules on the Python Path +RUN cp -r /usr/local/share/openvswitch/python/ovs /usr/lib/python2.7/site-packages/ovs +CMD ["/usr/bin/supervisord"] diff --git a/2.7.0/configure-ovs.sh b/2.7.0/configure-ovs.sh new file mode 100755 index 0000000..59a109f --- /dev/null +++ b/2.7.0/configure-ovs.sh @@ -0,0 +1,15 @@ +#!/bin/sh +ovs_version=$(ovs-vsctl -V | grep ovs-vsctl | awk '{print $4}') +ovs_db_version=$(ovsdb-tool schema-version /usr/local/share/openvswitch/vswitch.ovsschema) + +# give ovsdb-server and vswitchd some space... +sleep 3 +# begin configuring +ovs-vsctl --no-wait -- init +ovs-vsctl --no-wait -- set Open_vSwitch . db-version="${ovs_db_version}" +ovs-vsctl --no-wait -- set Open_vSwitch . ovs-version="${ovs_version}" +ovs-vsctl --no-wait -- set Open_vSwitch . system-type="docker-ovs" +ovs-vsctl --no-wait -- set Open_vSwitch . system-version="0.1" +ovs-vsctl --no-wait -- set Open_vSwitch . external-ids:system-id=`cat /proc/sys/kernel/random/uuid` +ovs-vsctl --no-wait -- set-manager ptcp:6640 +ovs-appctl -t ovsdb-server ovsdb-server/add-remote db:Open_vSwitch,Open_vSwitch,manager_options diff --git a/2.7.0/supervisord.conf b/2.7.0/supervisord.conf new file mode 100644 index 0000000..6686707 --- /dev/null +++ b/2.7.0/supervisord.conf @@ -0,0 +1,96 @@ +[unix_http_server] +file = /var/run/supervisor.sock + +[inet_http_server] +port = 9001 + +[supervisord] +nodaemon=true +logfile = /var/log/supervisor/supervisord.log +logfile_maxbytes = 200KB +logfile_backups = 1 +pidfile = /var/run/supervisord.pid +childlogdir = /var/log/supervisor + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl = unix:///var/run/supervisor.sock + +[program:ovsdb-server] +command=/usr/local/sbin/ovsdb-server /etc/openvswitch/conf.db -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=ptcp:6640 --pidfile=ovsdb-server.pid +priority=10 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovs-vswitchd] +command=/usr/local/sbin/ovs-vswitchd -v --pidfile +priority=20 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovsdb-server-vtep] +command=/usr/local/sbin/ovsdb-server /etc/openvswitch/conf.db /etc/openvswitch/vtep.db -v --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=ptcp:6640 --pidfile=ovsdb-server.pid --log-file +autostart=false +priority=10 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovsdb-server-nb] +command=/usr/local/sbin/ovsdb-server /etc/openvswitch/ovnnb_db.db -v --remote=punix:/usr/local/var/run/openvswitch/ovnnb_db.sock --remote=ptcp:6641 --pidfile=ovsdb-server-nb.pid --log-file +autostart=false +priority=30 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovsdb-server-sb] +command=/usr/local/sbin/ovsdb-server /etc/openvswitch/ovnsb_db.db -v --remote=punix:/usr/local/var/run/openvswitch/ovnsb_db.sock --remote=ptcp:6642 --pidfile=ovsdb-server-sb.pid --log-file +autostart=false +priority=30 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovn-northd] +command=/usr/local/bin/ovn-northd -v --ovnnb-db=unix:/usr/local/var/run/openvswitch/ovnnb_db.sock --ovnsb-db=unix:/usr/local/var/run/openvswitch/ovnsb_db.sock --pidfile=ovn-northd.pid --log-file +autostart=false +priority=30 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovn-controller] +command=/usr/local/bin/ovn-controller -v --pidfile --log-file unix:/usr/local/var/run/openvswitch/db.sock +autostart=false +priority=30 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:ovs-vtep] +command=/usr/local/share/openvswitch/scripts/ovs-vtep --pidfile=/usr/local/var/run/openvswitch/ovs-vtep.pid br-vtep +autostart=false +priority=30 +startsec=10 +stderr_events_enabled=true +stdout_events_enabled=true + +[program:configure-ovs] +command=/usr/local/share/openvswitch/configure-ovs.sh +priority=30 +startsecs=0 +exitcodes=0 +autorestart=false +stderr_events_enabled=true +stdout_events_enabled=true + +[eventlistener:stdout] +command = supervisor_stdout +buffer_size = 100 +events = PROCESS_LOG +result_handler = supervisor_stdout:event_handler diff --git a/Dockerfile b/Dockerfile index f8dc0d5..dd04b9c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM socketplane/busybox:latest MAINTAINER The SocketPlane Team -ENV OVS_VERSION 2.4.0 +ENV OVS_VERSION 2.7.0 ENV SUPERVISOR_STDOUT_VERSION 0.1.1 # Configure supervisord RUN mkdir -p /var/log/supervisor/ @@ -22,7 +22,7 @@ RUN wget https://s3-us-west-2.amazonaws.com/docker-ovs/openvswitch-$OVS_VERSION. mv openvswitch-$OVS_VERSION openvswitch &&\ cp -r openvswitch/* / &&\ rm -r openvswitch &&\ - rm openvswitch-$OVS_VERSION.tar.gz + rm openvswitch-$OVS_VERSION.tar.gz ADD configure-ovs.sh /usr/local/share/openvswitch/ # Create the database RUN ovsdb-tool create /etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema diff --git a/Makefile b/Makefile index 9578e26..cd4edeb 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,8 @@ OVS_VERSIONS = \ "2.3" \ "2.3.1" \ "2.3.2" \ - "2.4.0" + "2.4.0" \ + "2.7.0" all: reconfigure build diff --git a/README.md b/README.md index 4c828b2..3c0d443 100644 --- a/README.md +++ b/README.md @@ -27,17 +27,26 @@ To run the container with the kernel module (assuming you have Linux Kernel 3.7+ modprobe openvswitch docker run -itd --cap-add NET_ADMIN socketplane/openvswitch - + While it's recommended to load the kernel module outside of the container, it is possible to load the kernel module from within: cid=$(docker run -itd --cap-add NET_ADMIN --cap-add SYS_MODULE -v /lib/modules:/lib/modules socketplane/openvswitch) docker exec $cid modprobe openvswitch docker exec $cid supervisorctl restart ovs-vswitchd +To use openvswitch version 2.7.0+, you must load the kernel module compiled with +the source + + cid=$(docker run -itd --cap-add NET_ADMIN --cap-add SYS_MODULE -v /lib/modules:/lib/modules socketplane/openvswitch) + docker exec $cid modprobe nf_nat_ipv6 + docker exec $cid modprobe gre + docker exec $cid sh -c "insmod /usr/local/modules/*.ko" + docker exec $cid supervisorctl restart ovs-vswitchd + > Note 1: You need the "tun" kernel module loaded to run in userspace mode > Note 2: Change the tag for a specific OVS version e.g socketplane/openvswitch:2.3.0 -## Controlling The Processes +## Controlling The Processes The processes can be controlled using `supervisorctl` @@ -80,6 +89,9 @@ The follwing releases are supported: - 2.1.3 - 2.3 - 2.3.1 +- 2.3.2 +- 2.4.0 +- 2.7.0 ### Creating bridges in Userspace Mode @@ -109,6 +121,29 @@ Example using `ovs-vsctl` and `vtep-ctl`: vtep-ctl add-port br-vtep eth0 vtep-ctl set Physical_Switch br-vtep tunnel_ips=192.168.0.3 +### OVN Support + +OVN support is enabled on OVS verisons greater than 2.6.0 + + docker exec $cid ovsdb-tool create /etc/openvswitch/ovnnb_db.db /usr/local/share/openvswitch/ovn-nb.ovsschema + docker exec $cid ovsdb-tool create /etc/openvswitch/ovnsb_db.db /usr/local/share/openvswitch/ovn-sb.ovsschema + docker exec $cid ovsdb-tool create /etc/openvswitch/vtep.db /usr/local/share/openvswitch/vtep.ovsschema + docker exec $cid supervisorctl start ovsdb-server-nb + docker exec $cid supervisorctl start ovsdb-server-sb + docker exec $cid supervisorctl start ovn-northd + + docker exec $cid supervisorctl stop ovsdb-server + docker exec $cid supervisorctl start ovsdb-server-vtep + modprobe geneve + ovs-vsctl set Open_vSwitch . external_ids:ovn-remote="tcp:127.0.0.1:6642" \ + external_ids:ovn-nb="tcp:127.0.0.1:6641" \ + external_ids:ovn-encap-ip=127.0.0.1 \ + external_ids:ovn-encap-type="geneve" + + docker exec $cid supervisorctl start ovn-controller + + ovn-sbctl show + ## Building Containers To build a container diff --git a/configure-ovs.sh b/configure-ovs.sh index db20c74..59a109f 100755 --- a/configure-ovs.sh +++ b/configure-ovs.sh @@ -13,4 +13,3 @@ ovs-vsctl --no-wait -- set Open_vSwitch . system-version="0.1" ovs-vsctl --no-wait -- set Open_vSwitch . external-ids:system-id=`cat /proc/sys/kernel/random/uuid` ovs-vsctl --no-wait -- set-manager ptcp:6640 ovs-appctl -t ovsdb-server ovsdb-server/add-remote db:Open_vSwitch,Open_vSwitch,manager_options - diff --git a/latest b/latest index 197c4d5..24ba9a3 100644 --- a/latest +++ b/latest @@ -1 +1 @@ -2.4.0 +2.7.0