Dans la continuité du déploiement d’un environnement de développement sur votre cluster Kubernetes, nous allons installer un serveur MySQL. Lors des pages précédentes vous avez installé un serveur Postgres. Ces pages étaient fournies en détails explicatifs que nous n’avons pas besoin de répéter ici. Cet article survolera donc rapidement chacune des étapes et commandes, pour plus de détails vous pourrez vous référer au guide Postgres.
Configuration du partage NFS
Connectez-vous au serveur en SSH :
ssh homelabsrv
Créez le dossier à partager pour le serveur MySQL :
sudo mkdir -p /srv/nfs/mysql-dev
sudo chown 998:998 /srv/nfs/mysql-dev
Nous donnons le droit d’accès au groupe et à l’utilisateur avec l’ID 998. Cet ID est complètement arbitraire, et vous pouvez choisir celui qui vous convient, à partir du moment où vous utilisez le même ID dans le fichier de déploiement.
Configurez le serveur NFS pour partager ce répertoire en éditant le fichier exports avec la commande sudo nano /etc/exports
. Ajoutez-y la ligne suivante :
/srv/nfs/mysql-dev 192.168.56.0/24(rw,sync,no_subtree_check) 192.168.1.101(rw,sync,no_subtree_check)
Appliquer les changements :
sudo exportfs -ra
Configuration de MySQL dans le cluster Kubernetes
Connectez-vous au master Kubernetes :
cd ~/kub
vagrant ssh kubmaster
Créez un fichier de configuration pour configurer le stockage persistant pour notre base de données MySQL avec la commande nano mysql-dev-pv.yml
. Voici le contenu :
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-dev-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 10Gi
nfs:
path: /srv/nfs/mysql-dev
server: 192.168.56.1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-dev-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
Injectez la configuration dans Kubernetes :
kubectl apply -f mysql-dev-pv.yml -n dev-env
Définissez les spécifications pour le déploiement de MySQL ainsi que le service pour avec la commande nano mysql-dev-deploy.yml
. Voici le contenu :
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-dev
spec:
replicas: 1
selector:
matchLabels:
app: mysql-dev
template:
metadata:
labels:
app: mysql-dev
spec:
containers:
- name: mysql-dev
env:
- name: MYSQL_ROOT_PASSWORD
value: "Votre mot de passe super sécure"
ports:
- containerPort: 3306
image: mysql:8.1
securityContext:
runAsUser: 998
allowPrivilegeEscalation: false
volumeMounts:
- mountPath: /var/lib/mysql
name: mysql-dev-storage
volumes:
- name: mysql-dev-storage
persistentVolumeClaim:
claimName: mysql-dev-pvc
---
apiVersion: v1
kind: Service
metadata:
name: mysql-dev-service
spec:
ports:
- nodePort: 30712
port: 30012
targetPort: 3306
protocol: TCP
selector:
app: mysql-dev
type: NodePort
Notez l’utilisation de « runAsUser: 998 » pour indiquer le même ID d’utilisateur que nous avons utilisé pour définir les droits d’accès au répertoire NFS.
Injectez la configuration dans Kubernetes :
kubectl apply -f mysql-dev-deploy.yml -n dev-env
Configuration du pare-feu
Pour que MySQL soit accessible, nous devons configurer les règles iptables à partir du serveur hôte :
ssh homelabsrv
sudo iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 192.168.56.101:30712
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Ces règles permettent le routage du trafic entrant sur le port 3306 vers le service Kubernetes. Il ne vous reste qu’à tester l’accès depuis une autre machine du réseau.
Conclusion
Vous avez maintenant un service MySQL fonctionnel sur Kubernetes avec un stockage persistant fourni par NFS, adapté pour votre environnement de développement.
Navigation
Sommaire du dossier : Mise en place de PostgreSQL sur un cluster Kubernetes: Guide étape par étape
Chapitres:
- Configuration d’un Espace de Stockage Persistant pour PostgreSQL sur Kubernetes
- Déploiement et Débogage de PostgreSQL dans un Cluster Kubernetes
- Précédent : Exposer le service PostgreSQL sur votre réseau
- Création d’un service MySQL sur Kuberneter pour votre environnement de développement