GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bereitstellen von MySQL auf Kubernetes {Leitfaden}

Einführung

Die Bereitstellung einer funktionalen Datenbank in einer containerisierten Umgebung kann eine anspruchsvolle Aufgabe sein. Der Grund liegt in den spezifischen Herausforderungen von Datenbanken bei der Aufrechterhaltung ihrer Verfügbarkeit, ihres Zustands und ihrer Redundanz. Viele Entwickler ziehen es jedoch vor, ihre Anwendungs-Stacks und Datenschichten nach den gleichen schnellen Bereitstellungs- und Automatisierungsprinzipien zu organisieren, die Plattformen wie Kubernetes bieten.

Dieser Artikel zeigt Ihnen, wie Sie eine MySQL-Datenbankinstanz auf Kubernetes mit persistenten Volumes bereitstellen. Diese Funktion ermöglicht zustandsbehafteten Apps, die inhärente Vergänglichkeit der K8s-Pods zu überwinden.

Voraussetzungen

  • Ein Kubernetes-Cluster mit installiertem kubectl
  • Administrativer Zugriff auf Ihr System

MySQL-Bereitstellung auf Kubernetes

Um eine MySQL-Instanz erfolgreich auf Kubernetes bereitzustellen, erstellen Sie eine Reihe von YAML-Dateien, mit denen Sie die folgenden Kubernetes-Objekte definieren:

  • Ein Kubernetes-Secret zum Speichern des Datenbankpassworts.
  • Ein persistentes Volume (PV), um Speicherplatz für die Datenbank zuzuweisen.
  • Ein Persistent Volume Claim (PVC), der den PV für die Bereitstellung beansprucht .
  • Die Bereitstellung selbst.
  • Der Kubernetes-Dienst.

Schritt 1:Kubernetes-Secret erstellen

Verwenden Sie einen Texteditor wie Nano, um die Secret-Datei zu erstellen.

nano mysql-secret.yaml

Die Datei definiert das Geheimnis. Geben Sie das Passwort für das Root-MySQL-Konto in stringData ein Abschnitt der YAML.

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

Speichern Sie die Datei und beenden Sie sie. Verwenden Sie kubectl, um die Änderungen auf den Cluster anzuwenden.

kubectl apply -f mysql-secret.yaml

Das System bestätigt die erfolgreiche Erstellung des Geheimnisses:

Schritt 2:Persistentes Volume und Volume-Anspruch erstellen

Erstellen Sie die Speicherkonfigurationsdatei:

nano mysql-storage.yaml

Diese Datei besteht aus zwei Teilen:

  • Der erste Teil definiert das Persistent Volume. Passen Sie die Menge des zugewiesenen Speicherplatzes in spec.capacity.storage an . In spec.hostPath Geben Sie den Mount-Punkt des Volumes an.
  • Der zweite Teil der Datei definiert den 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

Speichern Sie die Datei und beenden Sie sie.

Wenden Sie dann die Speicherkonfiguration mit kubectl an .

kubectl apply -f mysql-storage.yaml

Das System bestätigt die Erstellung des PV und des PVC.

Schritt 3:MySQL-Bereitstellung erstellen

  1. Erstellen Sie die Bereitstellungsdatei. Die Bereitstellungsdatei definiert die Ressourcen, die die MySQL-Bereitstellung verwenden wird.
nano mysql-deployment.yaml

2. In den spec.template.spec.containers Geben Sie im Abschnitt das MySQL-Image an:

containers:
- image: mysql:5.6
  name: mysql

3. Weisen Sie den Wert von MYSQL_ROOT_PASSWORD zu Umgebungsvariable auf das Passwort, das Sie im Secret von Schritt 1 angegeben haben .

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

4. Schließen Sie das PVC aus Schritt 2 an zum Einsatz.

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

5. Definieren Sie im separaten Abschnitt der Datei den Dienstnamen und den Port.

Das gesamte YAML sollte wie im folgenden Beispiel aussehen:

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

Speichern Sie die Datei und beenden Sie sie. Erstellen Sie die Bereitstellung, indem Sie die Datei mit kubectl anwenden :

kubectl apply -f mysql-deployment.yaml

Das System bestätigt die erfolgreiche Erstellung sowohl der Bereitstellung als auch des Dienstes.

Greifen Sie auf Ihre MySQL-Instanz zu

Um auf die MySQL-Instanz zuzugreifen, greifen Sie auf den von der Bereitstellung erstellten Pod zu.

  1. Listen Sie die Pods auf:
kubectl get pod

2. Suchen Sie den MySQL-Pod und kopieren Sie seinen Namen, indem Sie ihn auswählen und Strg+Umschalt+C drücken :

3. Rufen Sie eine Shell für den Pod ab, indem Sie den folgenden Befehl ausführen:

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

Die Pod-Shell ersetzt die Haupt-Shell:

4. Geben Sie den folgenden Befehl ein, um auf die MySQL-Shell zuzugreifen:

mysql -p

5. Wenn Sie dazu aufgefordert werden, geben Sie das Passwort ein, das Sie im geheimen Kubernetes-Schlüssel definiert haben.

Die MySQL-Shell erscheint.

Aktualisieren Sie Ihre MySQL-Bereitstellung

Bearbeiten Sie die relevante YAML-Datei, um einen beliebigen Teil der Bereitstellung zu aktualisieren. Übernehmen Sie die Änderungen mit:

kubectl apply -f [filename]

Beachten Sie jedoch die folgenden zwei Einschränkungen:

  • Diese spezielle Bereitstellung ist für Einzelinstanz MySQL-Bereitstellung. Das bedeutet, dass die Bereitstellung nicht skaliert werden kann – sie funktioniert auf genau einem Pod.
  • Diese Bereitstellung unterstützt keine fortlaufenden Updates. Daher der spec.strategy.type muss immer auf Neu erstellen stehen .

Löschen Sie Ihre MySQL-Instanz

Wenn Sie die gesamte Bereitstellung entfernen möchten, verwenden Sie kubectl um alle damit verbundenen Kubernetes-Objekte zu löschen:

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

Diese Befehlsreihe löscht die Bereitstellung, den Dienst, PV, PVC und das von Ihnen erstellte Geheimnis. Das System bestätigt das erfolgreiche Löschen:


Linux
  1. Häufig gestellte Fragen zur MySQL-Bereitstellung

  2. Reparieren von MySQL InnoDB-Datenbanken

  3. So löschen Sie eine Kubernetes-Bereitstellung [Schnelle K8s-Tipps]

  4. So löschen Sie einen Dienst in Kubernetes

  5. MySQL-Ereignisplaner

So erstellen Sie eine Bereitstellung in Kubernetes

Erstellen Sie Ihre erste Bereitstellung in einem Kubernetes-Cluster

Vollständiger Leitfaden für Anfänger zur Kubernetes-Cluster-Bereitstellung auf CentOS (und anderen Linux)

Warum heißt Kubernetes K8s?

Was ist MySQL vs. MariaDB vs. Percona?

OpenShift vs. Kubernetes – Vergleich der Container-Bereitstellungsplattform