This Repository contains the deployment files of the 5GMETA Cloud Platform.
The deployment of the current version of the Cloud Platform can be done as follows:
- Provisioning of a Kubernetes Cluster
- Deploymnent of the Cloud Plaform
- Post Installation configurations
The following requirements are needed to be able to deploy the platform:
- A Kubernetes cluster with a configured PersistentVolume and Dynamic Provisionner e.g. Minikube.
- When installing the cloud modules, it is necessary to configure the "storageClassName" to the class name of the Kubernetes Cluster. This must be done for MongoDB and PostgreSQL.
- Kubectl
- Helm v3
- Optional Docker as provider for Minikube. Other providers can be selected e.g Podman, VirutualBox, etc.
- Optional Terraform used to deploy on Amazon EKS
- Optional NVIDIA GPU Operator automatically setups and manages the NVIDIA software components on the worker nodes. For installing the operator the official documentation has been followed: Setup Nnvidia software
- Optional Kubespray for creation a single node K8s test cluster.
- Virtualbox to provide a local virtualisation environment and as provider for Minikube
- Vagrant
The deplopyment of the cloud platfrom requires a running Kubernetes cluster. The Cloud Platform has been tested on:
- A Minikube cluster of (CPUs=6, Memory=16g, Disk-Size=200g) for local development and test
In this documentation, Minikube is used to provide a Kubernetes cluster for local development environment.
- For Minikube this "storageClassName" should be standard for MongoDB and PostgreSQL.
minikube start --cpus=6 --memory=16g --disk-size=200g
After successfully sarting minikube, install the ingress-nginx addons as follow:
minikube addons enable ingress
When using Minikube, it is possible to configure a local DNS server. If such a server is used, 5gmeta-platform.eu can be used a the DNS name for the Minikube IP. It will be necessary to change the configuration of the Helm chart.
A single node K8s cluster using Kubespray on a Microsoft Azure VM with 8vCPU and 32GB is used to provide a development and test environment. Since the cluster has a single node, the type of the Nginx Ingress controller service was set to NodeType. However, a Loadbalancer can be used.
The deplopyment of the 5GMETA platform in prodction can be done using any:
The following requirements must be met to deploy in production:
- A K8s cluster configured for production
- A DNS host name for the Cloud and MEC Platforms
- TLS certificates for MEC and CLOUD services
- A SMTP server
- A Nginx Ingress controller and Load Balancer. Services such Apache Kafka can be configure behind a Load Balancer. This step is dependant on each Cloud Provider and requires the adaptation of the Helm Charts.
- Configuration on the Cloud Service Provider of the Network Security Group to open the ports mentionned in the document.
The 5GMETA Cloud Platform has been tested during the project on an Amazon Elastic Kubernetes Service (EKS) cluster as illustrated by the the architecure diagram below. The figure also displays the diferent services exposed by the Cloud platform:
Cloud Platform Architecture
For more details on using EKS refers at this document: Deployment details on EKS.
The deplopyment of the Cloud Platform is done using one Helm chart which will install the following:
- Install Cert Manager's CRDs to ensure that Helm is able to create the TLS Certificates
- Install Cert Manager and create the TLS certificates
- Install the Prometheus Operator
- Install MySQL Database and create the databases
- Install Confluentic Apache Kafka
- Install the 5GMETA Cloud Platform modules.
To install the 5GMETA Cloud Platform follow the instructions below:
- Clone the Cloud Platform
git clone git@github.com:Akkodis/Cloud-Platform.git
-
Edit the Cloud Platform chart's values to set a hostname, usernames and passwords. The values' file can be found in ./cloud-platform/deploy/helm/cloud-platform-chart.
-
Then type the following commands:
cd cloud-platform
# Install Apache Superet
helm repo add superset https://apache.github.io/superset
helm upgrade --install --values deploy/helm/superset/values.yaml superset superset/superset -n superset --create-namespace
# Install other components
kubectl create namespace cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.crds.yaml
helm dependency build deploy/helm/cloud-platform-chart
helm install cloud-platform deploy/helm/cloud-platform-chart -n cloud-platform --create-namespace
After a successful installation:
- The 5GMTA realm must be imported in Keycloak. This realm can be found in cloud-platform/security.
- The Grafana Dashboard must be imported in Grafana
-
After the deployment of the Cloud Platform, the Apisx container may crash because of the mismatch between the Oauth2.0 client secret and the client secret in the 5GMETA realm. Make sure to:
- Import the 5GMETA realm in Keycloak
- Change the apisix client secret if necessary
- Update the apisix-routes configmap with the new client secret
- Delete the crashing apisix pod
- Djibrilla Amadou Kountche
This document presented the 5GMETA Cloud Platfrom and its deployment approach.
TODO: Update the conclusion.
TODO: Add references