Skip to content
Snippets Groups Projects
Commit 85e04470 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Further instructions for deploying the TeraFlow OS and an automation script.

parent d6d55efb
No related branches found
No related tags found
1 merge request!54Release 2.0.0
......@@ -146,3 +146,5 @@ dmypy.json
# Cython debug symbols
cython_debug/
# Other
/tmp
# TeraFlow OS SDN Controller Installation Instructions
Assuming you have a running Kubernetes deployment installed following the instructions provided in [Wiki: Installing Kubernetes on your Linux machine](../../wikis/Installing-Kubernetes-on-your-Linux-machine), the following instructions will let you deploy TeraFlow OS SDN Controller in your local Kubernetes environment.
Among others, it is assumed that you can run the command <code> kubectl cluster-info</code> in the machine you use for running the deployment script below.
## 1. Clone the repository
Create a folder (e.g., ~/deploy-test/teraflow/controller) to place the source code, move to that folder, clone the repository, and checkout the target branch you want to deploy (e.g., master or develop):
<code>mkdir -p ~/deploy-test/teraflow/controller; cd ~/deploy-test/teraflow/controller</code>
<code>git clone https://gitlab.com/teraflow-h2020/controller.git .</code>
<code>git checkout develop</code>
## 2. Adapt deployment script
Find the script <code>deploy_to_kubernetes.sh</code> and modify the configuration settings at the top of the script according to your local Kubernetes environment.
## 3. Run the deployment script
Execute the script <code>deploy_to_kubernetes.sh</code> to build and deploy the components at your local Kubernetes environment.
# Teraflow SDN controller
# TeraFlow OS SDN Controller
[Teraflow H2020 project](https://teraflow-h2020.eu/) - Secured autonomic traffic management for a Tera of SDN Flows
Branch "master" : [![pipeline status](https://gitlab.com/teraflow-h2020/controller/badges/master/pipeline.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/master) [![coverage report](https://gitlab.com/teraflow-h2020/controller/badges/master/coverage.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/master)
Branch "develop" : [![pipeline status](https://gitlab.com/teraflow-h2020/controller/badges/develop/pipeline.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop) [![coverage report](https://gitlab.com/teraflow-h2020/controller/badges/develop/coverage.svg)](https://gitlab.com/teraflow-h2020/controller/-/commits/develop)
# Installation Instructions
To install TeraFlow OS SDN Controller in your local Kubernetes deployment, we assume you deployed Kubernetes following the instructions provided in [Wiki: Installing Kubernetes on your Linux machine](../../wikis/Installing-Kubernetes-on-your-Linux-machine). Then, follow instructions in [INSTALL.md](./INSTALL.md).
#!/bin/bash
########################################################################################################################
# Define your deployment settings here
########################################################################################################################
# Set the URL of your local Docker registry where the images will be uploaded to. Leave it blank if you do not want to
# use any Docker registry.
REGISTRY_IMAGE=""
#REGISTRY_IMAGE="http://my-container-registry.local/"
# Set the list of components you want to build images for, and deploy.
COMPONENTS="context device service compute monitoring centralizedattackdetector"
# Set the tag you want to use for your images.
IMAGE_TAG="tf-dev"
# Set the name of the Kubernetes namespace to deploy to.
K8S_NAMESPACE="tf-dev"
########################################################################################################################
# Automated steps start here
########################################################################################################################
# Constants
CLONE_URL="https://gitlab.com/teraflow-h2020/controller.git"
GITLAB_REPO_URL="registry.gitlab.com/teraflow-h2020/controller"
TMP_FOLDER="./tmp"
# Create a tmp folder for files modified during the deployment
TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
mkdir -p $TMP_MANIFESTS_FOLDER
TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
mkdir -p $TMP_LOGS_FOLDER
# Re-create the namespace to prevent being affected by garbage on it
kubectl delete namespace $K8S_NAMESPACE
kubectl create namespace $K8S_NAMESPACE
for COMPONENT in $COMPONENTS; do
echo "Processing '$COMPONENT' component..."
IMAGE_NAME="$COMPONENT:$IMAGE_TAG"
IMAGE_URL="$REGISTRY_IMAGE/$IMAGE_NAME"
echo " Building Docker image..."
BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log"
docker build -t "$IMAGE_NAME" -f ./src/$COMPONENT/Dockerfile ./src/ > $BUILD_LOG
if [ -n "$REGISTRY_IMAGE" ]; then
echo "Pushing Docker image to '$REGISTRY_IMAGE'..."
TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log"
docker tag "$IMAGE_NAME" "$IMAGE_URL" > $TAG_LOG
PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
docker push "$IMAGE_URL" > "$PUSH_LOG"
fi
echo " Adapting manifest file..."
MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml"
cp ./manifests/${COMPONENT}service.yaml $MANIFEST
if [ -n "$REGISTRY_IMAGE" ]; then
sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_URL#g" $MANIFEST
sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" $MANIFEST
else
sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_NAME#g" $MANIFEST
sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" $MANIFEST
fi
echo " Deploying to Kubernetes..."
DEPLOY_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log"
kubectl --namespace $K8S_NAMESPACE apply -f $MANIFEST > $DEPLOY_LOG
done
kubectl --namespace $K8S_NAMESPACE get all
echo "Done!"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment