Déployer iTop sur Kubernetes avec MySQL
Dans cet article, nous allons voir pas à pas comment déployer iTop au sein d’un cluster Kubernetes, tout en déployant une base de données MySQL dédiée. iTop est une solution ITSM (IT Service Management) open source qui vous permet de gérer et documenter votre infrastructure IT.
Nous allons donc :
- Déployer MySQL avec un stockage persistant et un ConfigMap pour ajuster la configuration.
- Déployer l’application iTop en utilisant l’image Docker officielle proposée par ITSMFactory.
- Exposer iTop via un Service de type LoadBalancer.
1. Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster Kubernetes fonctionnel
Vous devez avoir un cluster (on-premise, cloud ou managé) et pouvoir exécuter des commandes kubectl
.
kubectl
L’outil en ligne de commande kubectl
doit être installé et configuré pour pointer vers votre cluster Kubernetes.
Une classe de stockage (StorageClass)
Dans l’exemple ci-dessous, nous utilisons une StorageClass nommée nfs-client-storage-1
, qui permet l’accès en ReadWriteMany
ou ReadWriteOnce
via un serveur NFS. Adaptez ces noms à votre configuration.
Choisir la version d’iTop
Dans cet exemple, nous utilisons l’image Docker itsmfactory/itop:3.1.1-1
. Vous pouvez consulter les tags disponibles sur Docker Hub pour choisir la version qui vous convient le mieux.
2. Déployer la base de données MySQL
Pour stocker les données d’iTop, nous allons installer une instance MySQL avec un PVC pour la persistance et un ConfigMap pour modifier certains paramètres par défaut.
Note de sécurité : Dans un cluster de production, il est recommandé d’utiliser un Secret Kubernetes pour stocker le mot de passe MySQL. Ci-dessous, nous présentons un exemple statique (non sécurisé) uniquement à des fins de démonstration.
2.1. Le ConfigMap MySQL
Ce ConfigMap définit un fichier my.cnf
avec un max_allowed_packet
élevé (256M). Cela peut être utile si vous importez des bases volumineuses ou si iTop manipule de grosses données.
2.2. Le Deployment MySQL
Nous créons ensuite le Deployment MySQL. Notez que nous faisons pointer le fichier de configuration (my.cnf
) vers le répertoire /etc/mysql/conf.d/
, via le volume mysql-config
.
2.3. Le PersistentVolumeClaim pour MySQL
Nous allons créer un PVC (PersistentVolumeClaim) pour MySQL. Ici, nous demandons 20Go (à adapter selon vos besoins) et un accès en ReadWriteOnce
.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
2.4. Le Service MySQL
Enfin, nous créons un Service de type LoadBalancer
(ou ClusterIP
si vous préférez) pour accéder à MySQL. Dans certains environnements (Cloud), ce Service vous donnera une IP ou un DNS externe ; dans d’autres (Bare-metal), vous devrez peut-être configurer un LoadBalancer « metallb » ou un service NodePort.
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
type: LoadBalancer
loadBalancerIP: 192.168.9.200
Remarque :
- L’option
loadBalancerIP: 192.168.9.200
est un exemple pour un cluster On-Premise (où on force une IP). Vous pouvez la retirer ou l’adapter à votre configuration. - Si vous êtes dans un cloud public (GCP, AWS, Azure, etc.), vous n’avez pas besoin de définir manuellement cette IP.
3. Déployer iTop
Maintenant que la base de données MySQL est en place, nous pouvons déployer iTop. L’image Docker itsmfactory/itop:3.1.1-1
est utilisée ici à titre d’exemple. Pensez à parcourir les tags disponibles pour choisir la version qui vous convient.
3.1. Manifeste Kubernetes pour iTop
Voici un manifeste complet comprenant le Deployment et le Service iTop. Nous avons découpé l’application pour :
- Conf, Data, Env-Production, Logs, Extensions dans différents volumes persistants afin de conserver les données et configurations lors des redéploiements.
- Un Service de type LoadBalancer pour exposer l’application sur le port 80.
apiVersion: apps/v1
kind: Deployment
metadata:
name: itop-deployment
spec:
replicas: 1
selector:
matchLabels:
app: itop
template:
metadata:
labels:
app: itop
spec:
# Permet d'éviter des problèmes de permissions avec Apache/PHP
securityContext:
fsGroup: 33
containers:
- name: itop
image: itsmfactory/itop:3.1.1-1
imagePullPolicy: Always
ports:
- containerPort: 80
volumeMounts:
- name: conf-volume
mountPath: /var/www/html/itop/conf
- name: data-volume
mountPath: /var/www/html/itop/data
- name: env-production-volume
mountPath: /var/www/html/itop/env-production
- name: log-volume
mountPath: /var/www/html/itop/log
- name: extension-volume
mountPath: /var/www/html/itop/extensions
- name: apache2-logs
mountPath: /var/log/apache2
volumes:
- name: conf-volume
persistentVolumeClaim:
claimName: itop-conf-pvc
- name: data-volume
persistentVolumeClaim:
claimName: itop-data-pvc
- name: env-production-volume
persistentVolumeClaim:
claimName: itop-env-pvc
- name: log-volume
persistentVolumeClaim:
claimName: itop-log-pvc
- name: extension-volume
persistentVolumeClaim:
claimName: itop-extensions-pvc
- name: apache2-logs
persistentVolumeClaim:
claimName: itop-apache2-logs-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-conf-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-data-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-env-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-log-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-extensions-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: itop-apache2-logs-pvc
spec:
storageClassName: nfs-client-storage-1
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: itop-service
spec:
selector:
app: itop
ports:
- protocol: TCP
port: 80
targetPort: 80
name: http
type: LoadBalancer
3.2. Application du déploiement
Pour appliquer ce manifeste sur votre cluster Kubernetes, utilisez la commande :
kubectl apply -f itop-deployment.yaml
(Adaptez le nom du fichier YAML si besoin.)
Une fois le pod itop démarré, Kubernetes va exécuter le conteneur Docker d’iTop. Le Service de type LoadBalancer
vous fournira un point d’accès (IP ou DNS) pour accéder à l’interface Web d’iTop sur le port 80.
4. Connexion à iTop et configuration
- Récupérez l’adresse IP attribuée par le Service LoadBalancer (ou utilisez l’IP que vous avez définie).
- Ouvrez votre navigateur et rendez-vous sur l’URL
http://<adresse-ip>:80
. - Suivez l’assistant d’installation d’iTop : vous devrez renseigner les paramètres de connexion à la base de données MySQL (adresse du service
mysql
, port3306
, nom d’utilisateurroot
, mot de passe que vous avez défini, etc.). - Complétez la configuration d’iTop et testez ensuite les fonctionnalités.
5. Recommandations et bonnes pratiques
Sécurisation du mot de passe MySQL
Dans un environnement de production, évitez de stocker le mot de passe MySQL en clair dans la définition du Deployment. Utilisez plutôt un Secret Kubernetes.
Sauvegardes
Les données iTop et MySQL sont persistantes grâce aux PVC, mais pensez à mettre en place un mécanisme de sauvegarde (backup) sur vos volumes (snapshots, exports réguliers de BDD, etc.).
Accès HTTPS
Pour sécuriser l’accès web, vous pouvez déployer un Ingress Controller (Nginx, Traefik, etc.) et ajouter un certificat SSL (via Let’s Encrypt ou un certificat interne).
Mise à jour d’iTop
Pour mettre à jour iTop, vous pouvez changer le tag de l’image Docker (par exemple itsmfactory/itop:3.1.1-2
ou autre) puis relancer le kubectl apply -f ...
. Vérifiez cependant la compatibilité avec vos extensions iTop avant toute mise à jour.
Extensions iTop
Les extensions iTop (placées dans /var/www/html/itop/extensions
) sont persistées via le PVC itop-extensions-pvc
. Cela vous protège en cas de recréation de pod.
Utiliser une base de données externe
Vous pouvez pointer iTop vers une BDD déjà existante (chez un hébergeur ou autre). Dans ce cas, il suffit de modifier la configuration lors de l’installation iTop.
6. Conclusion
Ce tutoriel est conçu pour un environnement de développement et vous permet d’expérimenter l’installation d’iTop sur Kubernetes avec une base de données MySQL intégrée. Il s’agit d’une approche pédagogique qui vous offre une vue d’ensemble sur le déploiement et la configuration de cette solution ITSM open-source.
Cependant, pour un environnement de production fiable, performant et sécurisé, il est essentiel de prendre en compte des considérations avancées telles que :
- La haute disponibilité et la redondance des composants pour éviter tout point de défaillance.
- Une configuration sécurisée de MySQL avec gestion des accès et chiffrement des données.
- Le monitoring et l’observabilité via des outils comme Prometheus, Grafana ou ELK.
- L’intégration d’un Ingress Controller pour gérer le trafic HTTPS et améliorer la résilience.
- La mise en place de sauvegardes automatisées et d’un plan de récupération en cas d’incident.
Si vous souhaitez une mise en œuvre professionnelle et sur mesure d’iTop dans votre infrastructure Kubernetes, notre équipe peut vous accompagner dans la conception, le déploiement et l’optimisation de votre environnement ITSM. Nous offrons des solutions clé en main adaptées à vos besoins, intégrant les meilleures pratiques DevOps et cloud.
N’hésitez pas à nous contacter pour discuter de votre projet et voir comment nous pouvons vous aider à industrialiser votre déploiement iTop.
Bonne installation d’iTop sur Kubernetes !