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 manually or by ArgoCD.
- Post Installation configurations
The following requirements must be satisfied 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 a default storage class.
- 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 Kubespray for creation a single node K8s test cluster.
- Optional [Metallb] installed on the Kubernetes cluster. This was tested on a multi nodes cluster. BGP advertisement was used with Calico.
- Optional [ArgoCD] installed on the Kubernetes cluster.
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
- A multi node cluster deployed using Kubespray
- A single node cluster deployed on a Azure VM using Kubespay
Minikube has been used to provide a Kubernetes cluster for local development environment.
minikube start --cpus=6 --memory=16g --disk-size=200gAfter successfully sarting minikube, install the ingress-nginx addons as follow:
minikube addons enable ingressWhen 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 8 vCPU 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 production can be done using any:
The following requirements must be met to deploy in production:
- A K8s cluster configured for production.
- A FQDN for the Cloud and MEC Platforms.
- TLS certificates for MEC and Cloud services. These can be obtained by using cert-manager.
- A SMTP server.
- A Ingress-Nginx 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 Cloud Platform can be installed using an ArgoCD application. The application's description can be found here: cloud-platform
For deploying in production, the Helm values must be changed using ArgoCD UI.
Before installing the Cloud Platform, Ingress-Nginx controller must be installed. If the controller is not installed on the Kubernetes cluster, install it as follows:
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespaceBefore installing the Cloud Platform, cert-manager must be installed. If cert-manager is not installed on the Kubernetes cluster, install it as follows:
helm install \
cert-manager oci://quay.io/jetstack/charts/cert-manager \
--version v1.18.2 \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=trueThe deplopyment of the Cloud Platform is done using one Helm chart which will install the following:
- the Prometheus Operator
- MariaDB and create the databases
- A modified version of the 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 other components
helm dependency update deploy/helm/cloud-platform-chart
helm install cloud-platform deploy/helm/cloud-platform-chart -n cloud-platform --create-namespaceAfter a successful installation:
- The Apisix Pod will crash. Please edit the apisix deployment and change the command in the Pod form command: ["sh", "-c","ln -s /apisix-config/apisix.yaml /usr/local/apisix/conf/apisix.yaml && /docker-entrypoint.sh docker-start"] to command: ["sh", "-c","/docker-entrypoint.sh docker-start"]
After editing the Apisix deployment, type the following command to get the Keyclaok temporary admin username and passwords:
kubectl -n cloud-platform get secrets keycloak-initial-admin -o jsonpath='{.data.username}' | base64 -d
kubectl -n cloud-platform get secrets keycloak-initial-admin -o jsonpath='{.data.password}' | base64 -d
Log in to Keycloak's admin console to create:
- A permanent admin user
- Add users to the 5GMETA realm.
- Make any necessary configuration to Keycloak.
Ensure that the databases have been automatically created and initialised.
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.
To uninstall th Cloud Platform, type the following command:
helm -n cloud-platform uninstall cloud-platform
kubectl -n cloud-platform delete all --all
kubectl delete ns cloud-platform- Djibrilla Amadou Kountche
- Ensure that this README contains the relevant information from the follwoing project:
- Re-draw the diagrams
This document presented the 5GMETA Cloud Platfrom and its deployment approach.
