pygeoapi implementation kubernetes - étape 1 - déploiement manuel

Table of Contents

Introduction

pygeoapi kubernetes series introduction

Déploiement manuel de pygeoapi

Connection à WSL et démarrage de minikube

wsl -d ubuntu
minikube status                 # Vérifier que minikube est stoppé
minikube start --driver=docker  # Démarrage de minikube

Lancement du dashboard (optionnel)

Le dashboard ouvre une interface web permettant de visualisé et interagir avec minikube.

minikube dashboard

Cette commande lancer un processus au premier plan (serveur proxy). Vous devez donc laisser cette commande active et ouvrir une nouvelle ligne de commande pour continuer :

wsl -d ubuntu

Déploiement d’une instance de pygeoapi

Créer un déploiement kubernetes, appelé ‘pygeoapi’ basé sur l’image docker officiel de pygeoapi.

kubectl create deployment pygeoapi --image=geopython/pygeoapi

Cette commande créé automatiquement un replicaset associant 1 pod par defaut. Les objects créés peuvent être listé par la commande suivante :

kubectl describe deployment pygeoapi

# Example :
Name:                   pygeoapi
Namespace:              default
CreationTimestamp:      Mon, 19 May 2025 12:20:25 +0200
Labels:                 app=pygeoapi
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=pygeoapi
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  app=pygeoapi
  Containers:
   pygeoapi:
    Image:         geopython/pygeoapi
    Port:          <none>
    Host Port:     <none>
    Environment:   <none>
    Mounts:        <none>
  Volumes:         <none>
  Node-Selectors:  <none>
  Tolerations:     <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   pygeoapi-78795f78b5 (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  14m   deployment-controller  Scaled up replica set pygeoapi-78795f78b5 from 0 to 1

Ou depuis le dashboard :

minikube dashboard deployment

Pygeoapi est déployé mais il n’est pas encore accessible depuis un navigateur. Il faut maintenant exposer le service sur le port cible 80. Le port 80 est le port sur lequel le serveur wsgi de pygeoapi (gunicorn par defaut) reçoit les requêtes.

Exposer le déploiement pygeoapi:

Executer la commande:

kubectl expose deployment pygeoapi --type=NodePort --port=80

Le service est visible depuis le dashboard:

minikube dashboard service

Le cluster kubernetes expose le service et le rend accessible sur un port automatiquement attribué sur la plage 30000-32767. La commande suivante permet de connaître l’url du service :

minikube service pygeoapi

# Example:
|-----------|----------|-------------|---------------------------|
| NAMESPACE |   NAME   | TARGET PORT |            URL            |
|-----------|----------|-------------|---------------------------|
| default   | pygeoapi |          80 | http://192.168.49.2:30614 |
|-----------|----------|-------------|---------------------------|
🏃  Starting tunnel for service pygeoapi.
|-----------|----------|-------------|------------------------|
| NAMESPACE |   NAME   | TARGET PORT |          URL           |
|-----------|----------|-------------|------------------------|
| default   | pygeoapi |             | http://127.0.0.1:40051 |
|-----------|----------|-------------|------------------------|
🎉  Opening service default/pygeoapi in default browser...
👉  http://127.0.0.1:40051
❗  Because you are using a Docker driver on linux, the terminal needs to be open to run it.

Pygeoapi est accessible mais quelque chose ne fonctionne pas correctement:

minikube dashboard service

Le problème vient du fait que pygeoapi permet d’être exposé via un proxy mais qu’il doit pour cela connaître l’url externe à partir de laquelle il est appelé. Cette url est défini par defaut comme étant 0.0.0.0:5000. Cette url est configurable au travers du fichier de configuration de pygeoapi. Pour le moment nous utilisons la configuration par défaut pour lequel l’url externe attendue est définie sur le port 5000.

Redirection du port

Cette commande permet de rediriger le trafic du port 5000 de votre machine locale vers le port 80 des pods gérés par le déploiement pygeoapi:

kubectl port-forward deployment/pygeoapi 5000:80

La documentation swagger de pygeoapi s’affiche désormais correctement depuis le port 5000.

minikube dashboard service

Conclusion

Ce premier article illustre un déploiement manuel de pygeoapi sur kubernetes et permet d’apréhender les paramètres attendus par pygeoapi pour afficher l’application correctement. La prochaine étape est de créer les fichiers manifest permettant l’automatisation du déploiement et
d’externaliser le fichier de configuration de pygeoapi pour pouvoir commencer à modifier ses paramètres, étape nécessaire pour exposer vos services.

Vous pouvez maintenant supprimer le déploiement:

kubectl delete service pygeoapi
kubectl delete deployment pygeoapi