From be9e41e11f83363f900103329a66316f33d8da0f Mon Sep 17 00:00:00 2001 From: Cong Phuoc Hoang Date: Sat, 30 Sep 2017 01:17:39 +0900 Subject: [PATCH] Add supporting Kubernetes to devstack This patch describes the way to install Kubernetes VIM via Devstack and register Kubernetes VIM in Tacker. Tacker reuses the efforts from Kuryr-Kubernetes project to create Kubernetes cluster. This patch also sets up native Neutron-based networking between Kubernetes and OpenStack VIMs to connect VM based and container based VNFs together, that bring hybrid deployment SFC in the future. Partially Implements: blueprint kubernetes-as-vim Change-Id: Idf04f012c6daf93a33ad89a5a7c737f3668eb405 --- devstack/lib/kubernetes_vim | 41 +++ devstack/local.conf.example | 21 +- devstack/plugin.sh | 7 + devstack/settings | 27 ++ doc/source/index.rst | 1 + .../install/kubernetes_vim_installation.rst | 253 ++++++++++++++++++ 6 files changed, 348 insertions(+), 2 deletions(-) create mode 100644 devstack/lib/kubernetes_vim create mode 100644 doc/source/install/kubernetes_vim_installation.rst diff --git a/devstack/lib/kubernetes_vim b/devstack/lib/kubernetes_vim new file mode 100644 index 000000000..d310bfb01 --- /dev/null +++ b/devstack/lib/kubernetes_vim @@ -0,0 +1,41 @@ +#!/bin/bash +# +# lib/kubernetes_vim +# functions - functions specific to kubernetes_vim + +function configure_k8s_vim { + iniset "/$Q_PLUGIN_CONF_FILE" ml2_type_flat flat_networks $PUBLIC_PHYSICAL_NETWORK,$MGMT_PHYS_NET,$K8S_PHYS_NET + iniset "/$Q_PLUGIN_CONF_FILE" ovs bridge_mappings $PUBLIC_PHYSICAL_NETWORK:$PUBLIC_BRIDGE,$MGMT_PHYS_NET:$BR_MGMT,$K8S_PHYS_NET:$BR_K8S + + echo "Creating Kubernetes bridge" + sudo ovs-vsctl --may-exist add-br ${BR_K8S} + iniset $TACKER_CONF k8s_vim use_barbican True +} + +function tacker_create_initial_k8s_network { + SUBNETPOOL_V4_ID=$(openstack subnet pool create ${SUBNETPOOL_NAME_V4} --default-prefix-length ${SUBNETPOOL_SIZE_V4} --pool-prefix ${FIXED_RANGE_K8S} --share --default -f value -c id) + NET_K8S_ID=$(openstack network create --provider-network-type flat --provider-physical-network ${K8S_PHYS_NET} --share ${NET_K8S} | awk '/ id /{print $4}') + SUBNET_K8S_ID=$(openstack subnet create ${SUBNET_K8S} --ip-version 4 --gateway ${NETWORK_GATEWAY_K8S} --network ${NET_K8S_ID} --subnet-pool ${SUBNETPOOL_V4_ID} | awk '/ id /{print $4}') + SUBNET_K8S_CIDR=$(openstack subnet show ${SUBNET_K8S_ID} -c cidr -f value) + + echo "Assign ip address to ${BR_K8S}" + sudo ip link set ${BR_K8S} up + sudo ip -4 address flush dev ${BR_K8S} + sudo ip address add ${NETWORK_GATEWAY_K8S_IP} dev ${BR_K8S} + + echo "Create router to connect VM, Pod and Service networks" + openstack router create ${Q_ROUTER_NAME} | grep ' id ' | get_field 2 + ROUTER_K8S_PORT_IP=$(_cidr_range "${SUBNET_K8S_CIDR}" | cut -f2) + ROUTER_K8S_PORT_ID=$(openstack port create --network ${NET_K8S_ID} --fixed-ip subnet=${SUBNET_K8S_ID},ip-address=${ROUTER_K8S_PORT_IP} port-router -f value -c id) + openstack router add port ${Q_ROUTER_NAME} ${ROUTER_K8S_PORT_ID} + openstack subnet set --host-route destination=${FIXED_RANGE_K8S},gateway=${ROUTER_K8S_PORT_IP} ${SUBNET_K8S_ID} +} + +function _cidr_range { + python - <