Skip to content

Akkodis/cloud-platform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

90 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

The 5GMETA Cloud Platform

Introduction

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:

  1. Provisioning of a Kubernetes cluster
  2. Deploymnent of the Cloud Plaform manually or by ArgoCD.
  3. Post Installation configurations

Prerequisities

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.

Kubernetes Clusters

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

Development environments

Option 1: Cloud Platform on Minikube

Minikube has been used to provide a Kubernetes cluster for local development environment.

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.

Options 2: Kubernetes cluster of MS Azure using Kubespay

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.

Production environments

The deplopyment of the 5GMETA platform in production can be done using any:

Pre-requisities

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.

GitOps using ArgoCD

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.

Manual deployment of the Cloud Platform

Install Ingress-Nginx Controller

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-namespace
Install Cert-manager

Before 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=true
Deploy the Cloud Platform

The deplopyment of the Cloud Platform is done using one Helm chart which will install the following:

  1. the Prometheus Operator
  2. MariaDB and create the databases
  3. A modified version of the Confluentic Apache Kafka
  4. 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-namespace

Cloud Platform Post-install configuration

Apisix

After 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"]

Keyclaok

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:

  1. A permanent admin user
  2. Add users to the 5GMETA realm.
  3. Make any necessary configuration to Keycloak.
MariaDB

Ensure that the databases have been automatically created and initialised.

Cloud Platform on EKS

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.

Uninstalling the Cloud Platform

Manuallly

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

Credits

  • Djibrilla Amadou Kountche

TODO

  1. Ensure that this README contains the relevant information from the follwoing project:
  1. Re-draw the diagrams

Conclusions and Perspectives

This document presented the 5GMETA Cloud Platfrom and its deployment approach.

About

5GMETA Cloud Platform

Topics

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published