Introduzione
La distribuzione di un database funzionale in un ambiente containerizzato può essere un'attività impegnativa. Il motivo risiede nella serie di database di sfide specifiche presenti nel mantenimento della loro disponibilità, stato e ridondanza. Tuttavia, molti sviluppatori preferiscono che i loro stack di applicazioni e livelli di dati siano organizzati secondo gli stessi principi di automazione e distribuzione rapida offerti da piattaforme come Kubernetes.
Questo articolo ti mostrerà come distribuire un'istanza di database MySQL su Kubernetes utilizzando volumi persistenti. Questa funzione consente alle app stateful di superare la transitorietà intrinseca dei pod K8s.
Prerequisiti
- Un cluster Kubernetes con kubectl installato
- Accesso amministrativo al tuo sistema
Distribuzione MySQL su Kubernetes
Per distribuire correttamente un'istanza MySQL su Kubernetes, crea una serie di file YAML che utilizzerai per definire i seguenti oggetti Kubernetes:
- Un segreto Kubernetes per la memorizzazione della password del database.
- Un volume persistente (PV) per allocare spazio di archiviazione per il database.
- Un Persistent Volume Claim (PVC) che rivendicherà il PV per la distribuzione.
- La distribuzione stessa.
- Il servizio Kubernetes.
Passaggio 1:crea il segreto di Kubernetes
Usa un editor di testo come Nano per creare il file segreto.
nano mysql-secret.yaml
Il file definisce il segreto. Inserisci la password per l'account MySQL di root in stringData
sezione dello YAML.
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
password: test1234
Salva il file ed esci. Usa kubectl per applicare le modifiche al cluster.
kubectl apply -f mysql-secret.yaml
Il sistema conferma la corretta creazione del segreto:
Fase 2:crea volume persistente e richiesta di volume
Crea il file di configurazione dell'archiviazione:
nano mysql-storage.yaml
Questo file è composto da due parti:
- La prima parte definisce il volume persistente. Personalizza la quantità di spazio di archiviazione allocato in
spec.capacity.storage
. Inspec.hostPath
specifica il punto di montaggio del volume. - La seconda parte del file definisce la 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
Salva il file ed esci.
Quindi, applica la configurazione di archiviazione con kubectl
.
kubectl apply -f mysql-storage.yaml
Il sistema conferma la creazione del PV e del PVC.
Fase 3:crea una distribuzione MySQL
- Crea il file di distribuzione. Il file di distribuzione definisce le risorse che utilizzerà la distribuzione di MySQL.
nano mysql-deployment.yaml
2. Nel spec.template.spec.containers
sezione, specifica l'immagine MySQL:
containers:
- image: mysql:5.6
name: mysql
3. Assegna il valore del MYSQL_ROOT_PASSWORD
variabile di ambiente alla password che hai specificato nel segreto del passaggio 1 .
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
4. Collega la PVC dal Passaggio 2 alla distribuzione.
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pv-claim
5. Nella sezione separata del file, definire il nome del servizio e la porta.
L'intero YAML dovrebbe apparire come nell'esempio seguente:
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
Salva il file ed esci. Crea la distribuzione applicando il file con kubectl
:
kubectl apply -f mysql-deployment.yaml
Il sistema conferma la corretta creazione sia della distribuzione che del servizio.
Accedi alla tua istanza MySQL
Per accedere all'istanza MySQL, accedi al pod creato dalla distribuzione.
- Elenca i pod:
kubectl get pod
2. Trova il pod MySQL e copiane il nome selezionandolo e premendo Ctrl+Shift+C :
3. Ottieni una shell per il pod eseguendo il comando seguente:
kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash
La shell del pod sostituisce la shell principale:
4. Digita il seguente comando per accedere alla shell MySQL:
mysql -p
5. Quando richiesto, inserisci la password che hai definito nel segreto Kubernetes.
Viene visualizzata la shell MySQL.
Aggiorna la tua distribuzione MySQL
Modifica il file YAML pertinente per aggiornare qualsiasi parte della distribuzione. Applica le modifiche con:
kubectl apply -f [filename]
Tuttavia, tieni presente le due seguenti limitazioni:
- Questa particolare distribuzione è per istanza singola Distribuzione MySQL. Significa che la distribuzione non può essere ridimensionata:funziona esattamente su un Pod.
- Questa distribuzione non supporta gli aggiornamenti in sequenza. Pertanto, il
spec.strategy.type
deve essere sempre impostato su Ricrea .
Elimina la tua istanza MySQL
Se desideri rimuovere l'intera distribuzione, utilizza kubectl
per eliminare ciascuno degli oggetti Kubernetes ad esso correlati:
kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret
Questa serie di comandi elimina la distribuzione, il servizio, PV, PVC e il segreto che hai creato. Il sistema conferma l'avvenuta eliminazione: