This repository contains the installation and configuration scripts for deploying a complete EUCAIM node infrastructure on Kubernetes.
The installation script (install.py) automates the deployment of:
- Keycloak (authentication/authorization)
- Dataset Service (core data management)
- Dataset Explorer (web frontend)
- Guacamole (remote desktop gateway)
- Harbor (container registry)
- Kubeapps (application management)
- Kubernetes Dashboard
- DSWS Operator (workspace management)
- Traefik (ingress controller)
- cert-manager (SSL certificate management)
- Operating System: Linux (Ubuntu/Debian recommended)
- Kubernetes: Minikube or production Kubernetes cluster
The following tools must be installed before running the installation:
-
Python 3 with dependencies
sudo apt-get install python3 python3-pip python3-yaml
-
Git (version control)
sudo apt-get install git
-
Docker (container runtime)
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
-
Minikube (only for development/single-node setup — skip if using a production Kubernetes cluster)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
-
For production Kubernetes, ensure
kubectlis installed and your kubeconfig is configured to point to the target cluster:# Example: install kubectl curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo install kubectl /usr/local/bin/kubectl # Verify cluster access kubectl cluster-info
-
Helm (Kubernetes package manager)
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Some repositories must be cloned manually before running the installation:
-
This one
git clone https://github.com/EUCAIM/mini-node.git cd mini-node -
k8s-deploy-node — all Helm charts and Kubernetes manifests
git clone --branch mininode https://github.com/EUCAIM/k8s-deploy-node.git
-
jobman — job manager service (cloned inside k8s-deploy-node)
cd k8s-deploy-node git clone --depth 1 --branch v2.2.5 https://github.com/EUCAIM/jobman.git -
dataset-explorer — web frontend (cloned inside k8s-deploy-node)
git clone https://github.com/EUCAIM/dataset-explorer.git cd ..
-
config.private.yaml - Main configuration file
- Template:
config.yaml - Contains: domain, passwords, database settings, OIDC configuration, etc.
The first time you must create your own private copy from the template
and adjust the values in your copy according to your deployment case using your favorite editor:cp config.yaml config.private.yaml nano config.private.yaml - Template:
-
eucaim-node-realm.private.json - Keycloak realm configuration
- Template:
eucaim-node-realm.json - Contains: client secrets, realm settings, identity providers
You don't need to create this one, it is automatically created by the script the first time with random client secrets and later, when upgrading, it will be read to keep the same secrets.
- Template:
The script supports two deployment targets, selected via the --release flag:
| Flag | Target | kubectl command used |
|---|---|---|
--release minikube (default) |
Minikube single-node VM | minikube kubectl -- |
--release kubernetes |
Production Kubernetes cluster | kubectl |
In --release kubernetes mode the following minikube-specific steps are skipped automatically:
- Minikube ingress addon management
- kube-apiserver OIDC patching (done via SSH into the minikube VM)
- iptables rules for NodePort exposure
- kube-apiserver crash detection and repair
-
Prepare the environment
- Ensure all required software has been installed (see Required Software above).
- Ensure all required repositories has been downloaded (see Required Repositories above).
- Prepare your private copy of the configuration file (see Required Configuration Files above).
-
Start Minikube with the host data folder mounted
minikube start --mount --mount-string="/home/ubuntu/<host-data-path>:/var/hostpath-provisioner" -
Run the installation
python3 install.py <flavor> # flavor: micro | mini | standard # or explicitly: python3 install.py <flavor> --release minikube
-
Prepare the environment
- Ensure all required software has been installed (see Required Software above).
Ensure
kubectlis configured for the target cluster:kubectl cluster-info - Ensure all required repositories has been downloaded (see Required Repositories above).
- Prepare your private copy of the configuration file (see Required Configuration Files above).
- Ensure all required software has been installed (see Required Software above).
Ensure
-
Run the installation
python3 install.py <flavor> --release kubernetes
Note: OIDC configuration for the Kubernetes API server and firewall rules must be set up manually when using a production cluster, as they depend on direct SSH access to the control-plane node (handled automatically only in Minikube mode).
Never commit these files to public repositories:
config.private.yamleucaim-node-realm.private.json- Any files ending in
.private.* - Password files like
guacamole-eucaim-user-creator-password.txt