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.