Ú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
. Vspec.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
- 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.
- 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í: