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 :

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:

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:

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.

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