Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace host ZK with container #2019

Merged
merged 3 commits into from
Dec 5, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .buildkite/clean_env.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/bash

cntrs="$(docker ps -aq)"
[ -n "$cntrs" ] && { echo "Remove leftover containers: $cntrs"; docker rm -f $cntrs; }
[ -n "$cntrs" ] && { echo "Remove leftover containers..."; docker rm -f $cntrs; }

echo "Remove leftover networks"
docker network prune -f
Expand Down
6 changes: 0 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,6 @@ Necessary steps in order to run SCION:
```
This requires a go version >= 1.9.4 to be available on the system. If no sufficiently up-to-date version is available in the system repositories refer to [golang.org/dl](https://golang.org/dl) for installation instructions.

1. Configure the host Zookeeper instance. At a minimum, add `maxClientCnxns=0`
to `/etc/zookeeper/conf/zoo.cfg`, but replacing it with `docker/zoo.cfg` is
recommended. This has the standard parameters set, as well as using a ram
disk for the data log, which greatly improves ZK performance (at the cost of
reliability, so it should only be done in a testing environment).

1. Create the topology and configuration files (according to
`topology/Default.topo`):

Expand Down
2 changes: 0 additions & 2 deletions docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,6 @@ common_args() {
args+=" -v $SCION_MOUNT/gen-certs:/home/scion/go/src/github.com/scionproto/scion/gen-certs"
args+=" -v $SCION_MOUNT/gen-cache:/home/scion/go/src/github.com/scionproto/scion/gen-cache"
args+=" -v $SCION_MOUNT/htmlcov:/home/scion/go/src/github.com/scionproto/scion/python/htmlcov"
args+=" -v /run/shm/dispatcher:/run/shm/dispatcher"
args+=" -v /run/shm/sciond:/run/shm/sciond"
args+=" -e SCION_OUTPUT_BASE=$SCION_MOUNT"
args+=" -e SCION_UID=$(id -u)"
args+=" -e SCION_GID=$(id -g)"
Expand Down
3 changes: 0 additions & 3 deletions docker/Dockerfile.base
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,6 @@ RUN set -e; mkdir su-exec; \
COPY docker/profile $HOME/.profile
# Install basic screen config
COPY docker/screenrc $HOME/.screenrc
# Install ZK config
COPY docker/zoo.cfg /etc/zookeeper/conf/
RUN sudo sh -c "echo 'JAVA_OPTS=-Xmx150m # Added by Dockerfile.base' >> /etc/zookeeper/conf/environment"

# Fix ownership one last time:
RUN sudo chown -R scion: $HOME
Expand Down
8 changes: 0 additions & 8 deletions docker/zoo-container.cfg

This file was deleted.

8 changes: 0 additions & 8 deletions docker/zoo.cfg

This file was deleted.

1 change: 0 additions & 1 deletion env/debian/pkgs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,3 @@ sqlite3
sudo
uthash-dev
vim-common
zookeeperd
27 changes: 23 additions & 4 deletions python/topology/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@

# Stdlib
import os

import subprocess
import sys
# SCION
from lib.packet.scion_addr import ISD_AS

Expand Down Expand Up @@ -82,17 +83,17 @@ def __repr__(self):

def prom_addr_br(br_id, br_ele, port_gen):
"""Get the prometheus address for a border router"""
pub = _get_pub(br_ele['InternalAddrs'])
pub = get_pub(br_ele['InternalAddrs'])
return "[%s]:%s" % (pub['PublicOverlay']['Addr'].ip, port_gen.register(br_id + "prom"))


def prom_addr_infra(infra_id, infra_ele, port_gen):
"""Get the prometheus address for an infrastructure element."""
pub = _get_pub(infra_ele['Addrs'])
pub = get_pub(infra_ele['Addrs'])
return "[%s]:%s" % (pub['Public']['Addr'].ip, port_gen.register(infra_id + "prom"))


def _get_pub(topo_addr):
def get_pub(topo_addr):
pub = topo_addr.get('IPv6')
if pub is not None:
return pub
Expand All @@ -117,3 +118,21 @@ def docker_image(args, image):
if args.image_tag:
image = '%s:%s' % (image, args.image_tag)
return image


def docker_host(in_docker, docker, addr=None):
if in_docker:
# If in-docker we need to know the DOCKER0 IP
addr = os.getenv('DOCKER0', None)
if not addr:
print('DOCKER0 env variable required! Exiting!')
sys.exit(1)
elif docker or not addr:
# Using docker topology or there is no default addr,
# we directly get the DOCKER0 IP
addr = docker_ip()
return addr


def docker_ip():
return subprocess.check_output(['tools/docker-ip']).decode("utf-8").strip()
17 changes: 12 additions & 5 deletions python/topology/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@
from topology.prometheus import PrometheusGenArgs, PrometheusGenerator
from topology.supervisor import SupervisorGenArgs, SupervisorGenerator
from topology.topo import TopoGenArgs, TopoGenerator
from topology.zk import ZKGenArgs, ZKGenerator

DEFAULT_TOPOLOGY_FILE = "topology/Default.topo"
DEFAULT_PATH_POLICY_FILE = "topology/PathPolicy.yml"
DEFAULT_ZK_CONFIG = "topology/Zookeeper.yml"

DEFAULT_CERTIFICATE_SERVER = "go"
DEFAULT_SCIOND = "go"
Expand All @@ -93,7 +93,6 @@ def __init__(self, args):
"""
self.args = args
self.topo_config = load_yaml_file(self.args.topo_config)
self.zk_config = load_yaml_file(self.args.zk_config)
self.default_mtu = None
self._read_defaults(self.args.network)
self.port_gen = PortGenerator()
Expand All @@ -115,8 +114,11 @@ def _read_defaults(self, network):
priv_net = DEFAULT6_PRIV_NETWORK
else:
priv_net = DEFAULT_PRIV_NETWORK
self.subnet_gen = SubnetGenerator(def_network, self.args.docker)
self.prvnet_gen = SubnetGenerator(priv_net, self.args.docker)
self.subnet_gen = SubnetGenerator(def_network, self.args.docker, self.args.in_docker)
self.prvnet_gen = SubnetGenerator(priv_net, self.args.docker, self.args.in_docker)
if "zookeepers" not in defaults:
logging.critical("No zookeeper configured in the topology!")
sys.exit(1)
self.default_mtu = defaults.get("mtu", DEFAULT_MTU)

def generate_all(self):
Expand Down Expand Up @@ -154,6 +156,7 @@ def _generate_with_topo(self, topo_dicts):
self._generate_docker(topo_dicts)
else:
self._generate_supervisor(topo_dicts)
self._generate_zk(topo_dicts)
self._generate_prom_conf(topo_dicts)

def _generate_cas(self):
Expand Down Expand Up @@ -188,7 +191,7 @@ def _generate_topology(self):
return topo_gen.generate()

def _topo_args(self):
return TopoGenArgs(self.args, self.topo_config, self.zk_config, self.subnet_gen,
return TopoGenArgs(self.args, self.topo_config, self.subnet_gen,
self.prvnet_gen, self.default_mtu, self.port_gen)

def _generate_supervisor(self, topo_dicts):
Expand All @@ -207,6 +210,10 @@ def _generate_docker(self, topo_dicts):
def _docker_args(self, topo_dicts):
return DockerGenArgs(self.args, topo_dicts, self.networks, self.port_gen)

def _generate_zk(self, topo_dicts):
zk_gen = ZKGenerator(ZKGenArgs(self.args, topo_dicts))
zk_gen.generate()

def _generate_prom_conf(self, topo_dicts):
args = self._prometheus_args(topo_dicts)
prom_gen = PrometheusGenerator(args)
Expand Down
34 changes: 0 additions & 34 deletions python/topology/docker.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
# Stdlib
import copy
import os
from shutil import copyfile
from string import Template
# External packages
import yaml
Expand All @@ -31,7 +30,6 @@
from topology.docker_utils import DockerUtilsGenArgs, DockerUtilsGenerator

DOCKER_CONF = 'scion-dc.yml'
DEFAULT_DOCKER_NETWORK = "172.18.0.0/24"


class DockerGenArgs(ArgsTopoDicts):
Expand Down Expand Up @@ -61,7 +59,6 @@ def __init__(self, args):

def generate(self):
self._create_networks()
self._zookeeper_conf()
for topo_id, topo in self.args.topo_dicts.items():
base = os.path.join(self.output_base, topo_id.base_dir(self.args.output_dir))
self._gen_topo(topo_id, topo, base)
Expand Down Expand Up @@ -90,8 +87,6 @@ def _vol_conf(self, topo_id):
self.dc_conf['volumes']['vol_%ssciond_%s' % (self.prefix, topo_id.file_fmt())] = None

def _create_networks(self):
default_net = {'ipam': {'config': [{'subnet': DEFAULT_DOCKER_NETWORK}]}}
self.dc_conf['networks']['default'] = default_net
for network in self.args.networks:
for elem in self.args.networks[network]:
if elem not in self.elem_networks:
Expand Down Expand Up @@ -149,7 +144,6 @@ def _cs_conf(self, topo_id, topo, base):
'depends_on': [
self._sciond_name(topo_id),
'scion_disp_%s' % topo_id.file_fmt(),
'zookeeper'
],
'environment': {
'SU_EXEC_USERSPEC': self.user_spec,
Expand All @@ -176,7 +170,6 @@ def _bs_conf(self, topo_id, topo, base):
'depends_on': [
self._sciond_name(topo_id),
'scion_disp_%s' % topo_id.file_fmt(),
'zookeeper'
],
'environment': {
'SU_EXEC_USERSPEC': self.user_spec,
Expand Down Expand Up @@ -205,7 +198,6 @@ def _ps_conf(self, topo_id, topo, base):
'depends_on': [
self._sciond_name(topo_id),
'scion_disp_%s' % topo_id.file_fmt(),
'zookeeper'
],
'environment': {
'SU_EXEC_USERSPEC': self.user_spec,
Expand All @@ -227,32 +219,6 @@ def _ps_conf(self, topo_id, topo, base):
entry['command'].append('conf')
self.dc_conf['services']['scion_%s' % k] = entry

def _zookeeper_conf(self):
cfg_file = 'docker/zoo-container.cfg'
entry = {
'image': 'zookeeper:latest',
'container_name': 'zookeeper',
'environment': {
'ZOO_USER': self.user_spec,
'ZOO_DATA_DIR': '/var/lib/zookeeper',
'ZOO_DATA_LOG_DIR': '/dev/shm/zookeeper'
},
'volumes': [
*self._usr_vol(),
os.path.join(
self.output_base, self.args.output_dir, cfg_file) + ':/conf/zoo.cfg:rw',
'/var/lib/docker-zk:/var/lib/zookeeper:rw',
'/run/shm/docker-zk:/dev/shm/zookeeper:rw'
],
'ports': [
'2181:2181'
]
}
self.dc_conf['services']['zookeeper'] = entry
cfg_path = os.path.join(self.args.output_dir, cfg_file)
os.makedirs(os.path.dirname(cfg_path))
copyfile(os.path.join(os.environ['PWD'], cfg_file), cfg_path)

def _dispatcher_conf(self, topo_id, topo, base):
# Create dispatcher config
entry = {
Expand Down
3 changes: 0 additions & 3 deletions python/topology/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
DEFAULT_PATH_SERVER,
DEFAULT_SCIOND,
DEFAULT_TOPOLOGY_FILE,
DEFAULT_ZK_CONFIG,
GENERATE_BIND_ADDRESS,
)

Expand All @@ -51,8 +50,6 @@ def add_arguments(parser):
help='Network to create subnets in (E.g. "127.0.0.0/8"')
parser.add_argument('-o', '--output-dir', default=GEN_PATH,
help='Output directory')
parser.add_argument('-z', '--zk-config', default=DEFAULT_ZK_CONFIG,
help='Zookeeper configuration file')
parser.add_argument('-b', '--bind-addr', default=GENERATE_BIND_ADDRESS,
help='Generate bind addresses (E.g. "192.168.0.0/16"')
parser.add_argument('-t', '--trace', action='store_true',
Expand Down
11 changes: 8 additions & 3 deletions python/topology/net.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,19 @@

DEFAULT_NETWORK = "127.0.0.0/8"
DEFAULT_PRIV_NETWORK = "192.168.0.0/16"
DEFAULT_SCN_DC_NETWORK = "172.20.0.0/16"
DEFAULT_MININET_NETWORK = "100.64.0.0/10"
DEFAULT_SCN_DC_NETWORK = "172.20.0.0/20"
DEFAULT_SCN_IN_D_NETWORK = "172.20.16.0/20"


class SubnetGenerator(object):
def __init__(self, network, docker):
def __init__(self, network, docker, in_docker):
self.docker = docker
if self.docker and network == DEFAULT_NETWORK:
network = DEFAULT_SCN_DC_NETWORK
if in_docker:
network = DEFAULT_SCN_IN_D_NETWORK
else:
network = DEFAULT_SCN_DC_NETWORK
if "/" not in network:
logging.critical("No prefix length specified for network '%s'",
network)
Expand Down
Loading