MySQL i Kubernetes
Denne guiden viser hvordan du setter opp MySQL på Kubernetes.
Først lager vi en disk. Du kan lese mer om vår diskløsning her. Legg følgende i «mysql-disk.yaml»:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-disk
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 1Gi
storageClassName: deploi-block-storage
Kjør deretter «kubectl apply -f mysql-disk.yaml». Da blir disken opprettet.
Så må vi opprette passord til administrator-brukeren til MySQL. Denne legges i en Kubernetes «secret».
Lag et nytt passord, og legg det i filen «mysql-secret.yaml» som vist under:
apiVersion: v1 kind: Secret metadata: name: mysql-secret stringData: password: "4tviw3gpomw2md3r"
Kjør deretter «kubectl apply -f mysql-secret.yaml».
Da har vi alt vi trenger for å legge inn MySQL. Legg følgende i «mysql.yaml»:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
labels:
app: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:8
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
resources:
limits:
cpu: 250m
memory: 1Gi
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-disk
Kjør deretter «kubectl apply -f mysql.yaml».
I filen vi akkurat laget, legg merke til 1) referansene til mysql-secret, 2) MySQL-versjonen: mysql:8, 3) referansen til hvilken disk vi skal bruke: mysql-disk og 4) hvor mye RAM og CPU databasen skal få: 1 GiB og 0.25 vCPU (angitt som 250m).
Du kan se at MySQL ble startet riktig ved å kjøre følgende kommando.
kubectl get deployments mysql
Da skal du se noe lignende dette.
NAME READY UP-TO-DATE AVAILABLE AGE mysql 1/1 1 1 28m
Hvis du ønsker å bruke denne i andre tjenester i Kubernetes bør du lage en service.
Du kan teste databases ved å logge inn på den. Kjør følgende kommando hvor du bytter ut pod-navnet med det du har.
kubectl exec --stdin --tty mysql-67b96cd6c6-pxvwl -- /bin/bash
Logg deretter inn med følgende kommando og oppgi passordet du laget tidligere.
mysql -u root -p
Du kan nå kjøre SQL mot databasen.
Backup
For å ta en backup av hele databasen til din lokale maskin, kjør følgende kommando:
kubectl exec --stdin --tty mysql-67b96cd6c6-pxvwl -- /bin/bash -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > dbdump.sql
Du får da en fil på din lokale maskin med navn «dbdump.sql» med en fullstendig backup av databasene på MySQL-installasjonen.