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 . Inspec.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
- 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.
- 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:
