GNU/Linux >> Linux Esercitazione >  >> Linux

Distribuire MySQL su Kubernetes {Guida}

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 . In spec.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

  1. 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.

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


Linux
  1. Installa MariaDB o MySQL su Linux

  2. Riparazione di database MySQL InnoDB

  3. Come eliminare una distribuzione Kubernetes [Suggerimenti rapidi per K8s]

  4. Come eliminare un servizio in Kubernetes

  5. Utilità di pianificazione eventi MySQL

Come creare una distribuzione in Kubernetes

Creazione della tua prima distribuzione su un cluster Kubernetes

Guida completa per principianti alla distribuzione del cluster Kubernetes su CentOS (e altri Linux)

Perché Kubernetes si chiama K8s?

Che cos'è MySQL vs MariaDB vs Percona

OpenShift vs Kubernetes – Confronto della piattaforma di distribuzione dei container