Apache Superset dans K8s

modifié le : 31 mai 2024,
par Ian Bellay
 

Prérequis

Cluster k8s

Il faut évidémment un cluster, qu'il soit en local ou sur le cloud cette installation devrait marcher.

Helm

Afin d'installer apache superset sur kubernetes, il nous faut d'abord installer la chart Helm. La chart Helm est un gestionnaire de paquets pour k8s, c'est donc un ensemble de fichiers qui permettent d'installer des applications sur k8s.
Pour installer Helm, vous pouvez vous rendre sur la page Installer Helm.

Installation

Une fois que Helm est installé, il ne reste qu'à installer la Chart superset, pour cela :

helm repo add superset https://apache.github.io/superset

Pour vérifier que l'installation s'est effectuée correctement, taper :

helm search repo superset

Après avoir installé le repo, il reste à installer l'application, pour cela plusieurs façons :

  • Installation de base sans modifications
  • Installation avec un fichier .yaml modifié
  • Installation dans un namespace


    Ici, la première option n'est pas conseillée car il faut rajouter une clé open ssl pour que l'application marche.
    Il faudra donc télécharger un fichier yaml et modifié des paramètres.

Fichier my-values

Pour superset, le fichier yaml à modifier est disponible sur la page github de superset.

Le plus simple est de télécharger le fichier et de l'ouvrir dans un éditeur tel que Visual Studio Code.

Ce fichier .yaml est très long et certaines parties nécessites d'être modifiées ou même ont besoin d'un rajout de lignes.
Ci-dessous, les lignes les plus importantes a rajouté/modifié.

Premièrement, rajouter une clé ssl, pour cela, allez à la ligne configOverride et mettre une clé ssl :

configOverrides:  
  secret: |
    SECRET_KEY = 'uQ2wbOU1/YV0E7QRf1mXrdxByD3dLZvPAbTpXjJSZzpHPGbBelATbItP'



Pour créer votre propre clé :

openssl rand -base64 42



Pour ajouter un ingress controller (traefik) et l'exposition de l'application sur internet en https :
Traefik sur k8s

Après ces modifications, exporter ce fichier dans le master de votre cluster sous le nom de "my-values.yaml" puis faire la commande :

helm upgrade --install --values my-values.yaml superset superset/superset

Si vous voulez faire l'installation dans un namesapce :

kubectl create namespace mynamespace
helm upgrade --install --values my-values.yaml superset superset/superset -n mynamespace

Après quelques temps, la console devrait vous retourner une réponse finissant par un port forwarding qui sert à tester si l'application marche bien, ci-dessous un exemple en local.

kubectl port-forward service/superset 8088:8088 --namespace default

Si votre installation est faite avec un cluster sur le cloud, il faudra faire un ingress.

Si l'application marche bien, il possible ensuite d'arreter le port-forwarding de plutôt mettre en place un service atteignable depuis une ip externe, ou un ingress-controler ou bien un loadBalancer.

Supprimer superset

Dans un namespace

kubect delete namespace mynamespace

Attention, cette commande supprimera le namespace et donc tout ce qu'il contient, ne pas faire ceci si vous voulez conserver des donneés.

Dans le namespace par default

Dans notre cas on a les pods suivant :

On s'intéressera uniquement aux pods qui sont dans l'état "running".

Pour supprimer le pod qui s'appelle "superset-X":

kubectl delete deployment superset

Pour supprimer le pod qui s'appelle "superset-worker-X":

kubectl delete deployment superset-worker

Pour supprimer le pod qui s'appelle "superset-redis-master-0":

kubectl delete statefulset.apps superset-redis-master

Suppression avancée

Il est très probable que ces supressions ne suppriment pas tout, pour avoir une vue globale de tout ce qui est installé il suffit de taper la commande suivante:

kubectl get all

dans notre exemple il reste encore ceci dans les services:

pour les supprimer voici le "pattern" de la commande :

kubectl delete [1] [2]

[1] correspond à ce qui est avant le / et le [2] à ce qui est après

exemple :

kubectl delete service superset

Cette commande supprimera le service superset. Ce pattern fonctionne avec les services mais aussi les pods les deployments etc etc


Article réalisé par Ian BELLAY