GNU/Linux >> Tutoriels Linux >  >> Linux

Déployer MySQL sur Kubernetes {Guide}

Présentation

Le déploiement d'une base de données fonctionnelle dans un environnement conteneurisé peut être une tâche exigeante. La raison réside dans l'ensemble des défis spécifiques que les bases de données présentent pour maintenir leur disponibilité, leur état et leur redondance. Cependant, de nombreux développeurs préfèrent que leurs piles d'applications et leurs couches de données soient organisées selon les mêmes principes de déploiement rapide et d'automatisation que ceux proposés par des plates-formes telles que Kubernetes.

Cet article vous montrera comment déployer une instance de base de données MySQL sur Kubernetes à l'aide de volumes persistants. Cette fonctionnalité permet aux applications avec état de surmonter la fugacité inhérente aux pods K8s.

Prérequis

  • Un cluster Kubernetes avec kubectl installé
  • Accès administrateur à votre système

Déploiement MySQL sur Kubernetes

Pour déployer avec succès une instance MySQL sur Kubernetes, créez une série de fichiers YAML que vous utiliserez pour définir les objets Kubernetes suivants :

  • Un secret Kubernetes pour stocker le mot de passe de la base de données.
  • Un volume persistant (PV) pour allouer de l'espace de stockage à la base de données.
  • Une réclamation de volume persistant (PVC) qui réclamera le PV pour le déploiement.
  • Le déploiement lui-même.
  • Le service Kubernetes.

Étape 1 :Créer un secret Kubernetes

Utilisez un éditeur de texte tel que Nano pour créer le fichier Secret.

nano mysql-secret.yaml

Le fichier définit le secret. Entrez le mot de passe du compte MySQL root dans stringData section du YAML.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
  password: test1234

Enregistrez le fichier et quittez. Utilisez kubectl pour appliquer les modifications au cluster.

kubectl apply -f mysql-secret.yaml

Le système confirme la création réussie du secret :

Étape 2 :Créer un volume persistant et une revendication de volume

Créez le fichier de configuration de stockage :

nano mysql-storage.yaml

Ce fichier est composé de deux parties :

  • La première partie définit le volume persistant. Personnalisez la quantité de stockage alloué dans spec.capacity.storage . Dans spec.hostPath spécifiez le point de montage du volume.
  • La deuxième partie du fichier définit le PVC.
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi

Enregistrez le fichier et quittez.

Ensuite, appliquez la configuration de stockage avec kubectl .

kubectl apply -f mysql-storage.yaml

Le système confirme la création du PV et du PVC.

Étape 3 :Créer un déploiement MySQL

  1. Créez le fichier de déploiement. Le fichier de déploiement définit les ressources que le déploiement MySQL utilisera.
nano mysql-deployment.yaml

2. Dans le spec.template.spec.containers section, spécifiez l'image MySQL :

containers:
- image: mysql:5.6
  name: mysql

3. Attribuez la valeur du MYSQL_ROOT_PASSWORD variable d'environnement au mot de passe que vous avez spécifié dans le secret de l'étape 1 .

env:
- name: MYSQL_ROOT_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-secret
      key: password

4. Connectez le PVC de Étape 2 au déploiement.

volumes:
- name: mysql-persistent-storage
  persistentVolumeClaim:
    claimName: mysql-pv-claim

5. Dans la section séparée du fichier, définissez le nom et le port du service.

L'intégralité du YAML devrait ressembler à l'exemple ci-dessous :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

Enregistrez le fichier et quittez. Créez le déploiement en appliquant le fichier avec kubectl :

kubectl apply -f mysql-deployment.yaml

Le système confirme la création réussie du déploiement et du service.

Accéder à votre instance MySQL

Pour accéder à l'instance MySQL, accédez au pod créé par le déploiement.

  1. Répertorier les pods :
kubectl get pod

2. Trouvez le pod MySQL et copiez son nom en le sélectionnant et en appuyant sur Ctrl+Maj+C :

3. Obtenez un shell pour le pod en exécutant la commande suivante :

kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash

Le shell du pod remplace le shell principal :

4. Tapez la commande suivante pour accéder au shell MySQL :

mysql -p

5. Lorsque vous y êtes invité, saisissez le mot de passe que vous avez défini dans le secret Kubernetes.

Le shell MySQL apparaît.

Mettre à jour votre déploiement MySQL

Modifiez le fichier YAML approprié pour mettre à jour n'importe quelle partie du déploiement. Appliquez les modifications avec :

kubectl apply -f [filename]

Cependant, gardez à l'esprit les deux limitations suivantes :

  • Ce déploiement particulier est pour une instance unique Déploiement MySQL. Cela signifie que le déploiement ne peut pas être mis à l'échelle :il fonctionne sur un seul pod.
  • Ce déploiement ne prend pas en charge les mises à jour propagées. Par conséquent, le spec.strategy.type doit toujours être défini sur Recréer .

Supprimer votre instance MySQL

Si vous souhaitez supprimer l'intégralité du déploiement, utilisez kubectl pour supprimer chacun des objets Kubernetes qui lui sont liés :

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret

Cette série de commandes supprime le déploiement, le service, le PV, le PVC et le secret que vous avez créés. Le système confirme la suppression réussie :


Linux
  1. Installer MariaDB ou MySQL sur Linux

  2. FAQ sur le déploiement de MySQL

  3. Réparation des bases de données MySQL InnoDB

  4. Comment supprimer un déploiement Kubernetes [Quick K8s Tips]

  5. Comment supprimer un service dans Kubernetes

Comment créer un déploiement dans Kubernetes

Créer votre premier déploiement sur un cluster Kubernetes

Guide complet du débutant sur le déploiement du cluster Kubernetes sur CentOS (et autres Linux)

Pourquoi Kubernetes s'appelle-t-il K8s ?

Qu'est-ce que MySQL vs MariaDB vs Percona

OpenShift vs Kubernetes - Comparaison des plates-formes de déploiement de conteneurs