GNU/Linux >> Znalost Linux >  >> Linux

Nasazení MySQL na Kubernetes {Guide}

Úvod

Nasazení funkční databáze v kontejnerovém prostředí může být náročný úkol. Důvod spočívá v souboru specifických problémů, které databáze představují při udržování jejich dostupnosti, stavu a redundance. Mnoho vývojářů však dává přednost uspořádání zásobníků aplikací a datových vrstev na stejných principech rychlého nasazení a automatizace, které nabízejí platformy, jako je Kubernetes.

Tento článek vám ukáže, jak nasadit instanci databáze MySQL na Kubernetes pomocí trvalých svazků. Tato funkce umožňuje stavovým aplikacím překonat vrozenou pomíjivost modulů K8s.

Předpoklady

  • Cluster Kubernetes s nainstalovaným kubectl
  • Administrativní přístup k vašemu systému

Nasazení MySQL na Kubernetes

Chcete-li úspěšně nasadit instanci MySQL na Kubernetes, vytvořte řadu souborů YAML, které použijete k definování následujících objektů Kubernetes:

  • Tajný klíč Kubernetes pro uložení hesla databáze.
  • Trvalý svazek (PV) pro přidělení úložného prostoru pro databázi.
  • Persistent Volume Claim (PVC), který bude požadovat PV pro nasazení.
  • Samotné nasazení.
  • Služba Kubernetes.

Krok 1:Vytvořte tajemství Kubernetes

K vytvoření tajného souboru použijte textový editor, jako je Nano.

nano mysql-secret.yaml

Soubor definuje tajný klíč. Zadejte heslo pro kořenový účet MySQL do stringData sekce YAML.

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: kubernetes.io/basic-auth
stringData:
  password: test1234

Uložte soubor a ukončete. Pomocí kubectl aplikujte změny na cluster.

kubectl apply -f mysql-secret.yaml

Systém potvrdí úspěšné vytvoření tajenky:

Krok 2:Vytvořte trvalý svazek a nárok na svazek

Vytvořte konfigurační soubor úložiště:

nano mysql-storage.yaml

Tento soubor se skládá ze dvou částí:

  • První část definuje trvalý svazek. Upravte velikost přiděleného úložiště v spec.capacity.storage . V spec.hostPath zadejte bod připojení svazku.
  • Druhá část souboru definuje 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

Uložte soubor a ukončete.

Poté použijte konfiguraci úložiště pomocí kubectl .

kubectl apply -f mysql-storage.yaml

Systém potvrdí vytvoření PV a PVC.

Krok 3:Vytvořte nasazení MySQL

  1. Vytvořte soubor nasazení. Soubor nasazení definuje prostředky, které bude nasazení MySQL používat.
nano mysql-deployment.yaml

2. V spec.template.spec.containers sekce, zadejte obrázek MySQL:

containers:
- image: mysql:5.6
  name: mysql

3. Přiřaďte hodnotu MYSQL_ROOT_PASSWORD proměnnou prostředí na heslo, které jste zadali v tajném klíči z kroku 1 .

env:
- name: MYSQL_ROOT_PASSWORD
  valueFrom:
    secretKeyRef:
      name: mysql-secret
      key: password

4. Připojte PVC z Kroku 2 k nasazení.

volumes:
- name: mysql-persistent-storage
  persistentVolumeClaim:
    claimName: mysql-pv-claim

5. V samostatné části souboru definujte název služby a port.

Celý YAML by měl vypadat jako v příkladu níže:

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

Uložte soubor a ukončete. Vytvořte nasazení použitím souboru s kubectl :

kubectl apply -f mysql-deployment.yaml

Systém potvrdí úspěšné vytvoření nasazení i služby.

Přístup k instanci MySQL

Chcete-li získat přístup k instanci MySQL, přejděte na pod vytvořený nasazením.

  1. Seznam modulů:
kubectl get pod

2. Najděte modul MySQL a zkopírujte jeho název tak, že jej vyberete a stisknete Ctrl+Shift+C :

3. Získejte shell pro modul provedením následujícího příkazu:

kubectl exec --stdin --tty mysql-694d95668d-w7lv5 -- /bin/bash

Pouzdro modulu nahrazuje hlavní pouzdro:

4. Pro přístup k prostředí MySQL zadejte následující příkaz:

mysql -p

5. Po zobrazení výzvy zadejte heslo, které jste definovali v tajném klíči Kubernetes.

Objeví se shell MySQL.

Aktualizujte své nasazení MySQL

Upravte příslušný soubor YAML a aktualizujte libovolnou část nasazení. Aplikujte změny pomocí:

kubectl apply -f [filename]

Mějte však na paměti následující dvě omezení:

  • Toto konkrétní nasazení je pro jedinou instanci Nasazení MySQL. Znamená to, že nasazení nelze škálovat – funguje přesně na jednom modulu.
  • Toto nasazení nepodporuje průběžné aktualizace. Proto spec.strategy.type musí být vždy nastaveno na Znovu vytvořit .

Smažte svou instanci MySQL

Pokud chcete odstranit celé nasazení, použijte kubectl Chcete-li odstranit každý z objektů Kubernetes, které s ním souvisí:

kubectl delete deployment,svc mysql
kubectl delete pvc mysql-pv-claim
kubectl delete pv mysql-pv-volume
kubectl delete secret mysql-secret

Tato řada příkazů odstraní rozmístění, službu, PV, PVC a tajemství, které jste vytvořili. Systém potvrdí úspěšné smazání:


Linux
  1. Oprava databází MySQL InnoDB

  2. Jak odstranit nasazení Kubernetes [Rychlé tipy K8s]

  3. Zálohování MySQL 1.1

  1. Nainstalujte MariaDB nebo MySQL na Linux

  2. Nejčastější dotazy k nasazení MySQL

  3. Plánovač událostí MySQL

  1. Jak provést nasazení Canary na Kubernetes

  2. Jak odstranit službu v Kubernetes

  3. Obnovit databázi mysql - mysql/mysqldump poskytuje tabulku <database>.<tablename> neexistuje (1146)