Si të ekzekutoni MySQL në Kubernetes me Operatorin e Oracle
Mbështetja e Kubernetes për aplikacionet shtetërore është rritur ndjeshëm gjatë viteve të fundit. Tani është e mundur të lokalizoni bazën tuaj të të dhënave brenda grupit tuaj, duke e lejuar atë të përfitojë nga e njëjta shkallëzueshmëri si ngarkesat tuaja të tjera të punës.
MySQL është një nga motorët më të njohur të bazës së të dhënave relacionale dhe tani është shtuar nga një operator zyrtar Kubernetes. Projekti me burim të hapur të udhëhequr nga Oracle ofron një mënyrë të thjeshtë për të krijuar grupime të menaxhuara MySQL brenda Kubernetes.
Në këtë artikull, do të mësoni se si të instaloni operatorin dhe të filloni të siguroni një bazë të dhënash. Operatori krijon automatikisht shërbime në mënyrë që aplikacionet në kontejnerët tuaj të tjerë të mund të lidhen me MySQL.
Çfarë është Operatori MySQL?
Operatori MySQL i Oracle është një komponent që funksionon brenda grupit tuaj për të automatizuar inicializimin e bazës së të dhënave. Ju nuk keni nevojë që operatori të përdorë MySQL në Kubernetes – ju mund të vendosni vetë imazhin zyrtar të kontejnerit duke përdorur një StatefulSet. Megjithatë, kjo qasje është e rëndë, duke kërkuar që ju të autorizoni dhe mbani skedarë të gjatë manifest për të krijuar një mjedis të besueshëm.
Operatori ofron një grup burimesh të personalizuara që mund t'i përdorni për të krijuar bazat e të dhënave tuaja. Shtimi i një objekti InnoDBCluster
në grupin tuaj Kubernetes e kërkon operatorin të konfigurojë StatefulSets, hapësirën ruajtëse dhe rrjetëzimin për ju. Ai gjithashtu automatizon përmirësimet dhe kopjet rezervë, duke reduktuar në masë të madhe barrën mbi administratorët.
Instalimi i Operatorit MySQL
Grafiku i përfshirë në Helm është mënyra më e thjeshtë për të instaluar operatorin në grupin tuaj. Skedarët e Manifest janë të disponueshëm si alternativë nëse nuk keni Helm në mjedisin tuaj.
Së pari shtoni operatorin në listën tuaj të ruajtjes së Helm:
$ helm repo add mysql-operator https://mysql.github.io/mysql-operator/
Përditësoni më tej bazën e të dhënave të depove të Helm në mënyrë që të zbulojë grafikët e disponueshëm:
$ helm repo update
Tani përdorni komandën e mëposhtme për të instaluar operatorin në një hapësirë të re emri të quajtur mysql-operator
:
$ helm install mysql-operator mysql-operator/mysql-operator \
--namespace mysql-operator \
--create-namespace
NAME: mysql-operator
LAST DEPLOYED: Sat Oct 29 15:00:26 2022
NAMESPACE: mysql-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
Mund të duhen disa sekonda që procesi të përfundojë.
Krijimi i një sekreti të kredencialeve të përdoruesit rrënjë
Çdo grup i bazës së të dhënave që krijoni duhet të shoqërohet nga një sekret Kubernetes që përmban kredencialet për përdoruesin rrënjë të MySQL. Operatori do të krijojë llogarinë e privilegjuar me rrënjë me emrin e përdoruesit dhe fjalëkalimin e dhënë në sekret.
Kopjoni manifestin e mëposhtëm YAML dhe ndryshoni vlerën e fushës rootPassword
në diçka të sigurt. Ndryshoni gjithashtu cilësimet e emrit të përdoruesit dhe të hostit të përdoruesit nëse zbatohen për situatën tuaj. Mos harroni se llogaria e përmendur këtu do të ketë kontroll të plotë mbi MySQL; duhet të konfiguroni përdorues të veçantë për aplikacionet tuaja më vonë, duke përdorur guaskën e zakonshme MySQL.
apiVersion: v1
kind: Secret
metadata:
name: mysql-root-user
stringData:
rootHost: "%"
rootUser: "root"
rootPassword: "P@$$w0rd"
Ruaje skedarin si secret.yaml
. Tani përdorni Kubectl për të shtuar sekretin në grupin tuaj:
$ kubectl apply -f secret.yaml
secret/mysql-root-user created
Krijimi i një grupi bazë
Më pas krijoni një skedar të ri YAML të quajtur mysql.yaml
dhe kopjoni përmbajtjen e mëposhtme:
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: mysql-cluster
spec:
secretName: mysql-root-user
instances: 3
tlsUseSelfSigned: true
router:
instances: 1
Kjo përcakton një objekt duke përdorur burimin e personalizuar InnoDBCluster
të ofruar nga operatori MySQL. Aplikimi i manifestit në grupin tuaj do të krijojë një bazë të dhënash të re MySQL me replikimin e konfiguruar automatikisht. Rishiko dhe ndrysho vetitë e mëposhtme në manifest përpara se të vazhdosh:
spec.secretName
– Kjo duhet të përputhet memetadata.name
të sekretit që keni krijuar më parë. Sekreti i referuar do të lexohet për të konfiguruar llogarinë e përdoruesit rrënjë të MySQL.spec.instances
– Kjo përcakton se sa kopje të MySQL (Pods) do të ekzekutohen. Aktualisht mbështeten deri në 10 kopje.spec.tlsUseSelfSigned
– Fusha është caktuar nëtrue
në këtë shembull për të përdorur certifikatën TLS të vetë-nënshkruar të përfshirë. Mund të jepni në mënyrë opsionale certifikatën tuaj nëpërmjet një sekreti Kubernetes duke vendosur fushatspec.tlsSecretName
/spec.tlsCASecretName
.spec.router.instances
– Komponenti MySQL Router është përgjegjës për drejtimin e trafikut të shërbimit ndërmjet kopjeve të disponueshme MySQL. Kjo fushë përcakton se sa instanca të ruterit duhet të ekzekutohen. Raste të shumta do të përmirësojnë performancën dhe qëndrueshmërinë në situata me trafik të lartë.
Përdorni Kubectl për të aplikuar manifestin dhe për të krijuar grupin tuaj të bazës së të dhënave:
$ kubectl apply -f mysql.yaml
innodbcluster.mysql.oracle.com/mysql-cluster created
Procesi i inicializimit të MySQL mund të marrë disa minuta për të përfunduar. Operatori përdor disa kontejnerë fillestarë për të vendosur llogaritë e përdoruesve dhe për të konfiguruar drejtorinë e të dhënave të MySQL. Prisni disa momente përpara se të ekzekutoni kubectl get pods
për të kontrolluar se çfarë po ekzekutohet:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-cluster-0 2/2 Running 0 2m
mysql-cluster-1 2/2 Running 0 2m
mysql-cluster-2 2/2 Running 0 2m
mysql-cluster-router-6b68f9b5cb-wbqm5 1/1 Running 0 2m
Të tre kopjet e MySQL dhe shembulli i një ruteri të vetëm janë të gjitha në gjendjen Punon
. Baza e të dhënave tani është gati për t'u përdorur.
Duke u lidhur me grupin tuaj
Operatori MySQL krijon një shërbim Kubernetes që drejton trafikun nga Pods e aplikacionit tuaj në bazën e të dhënave tuaja. Shërbimit i caktohet një emër hosti me formatin e mëposhtëm:
<cluster-name>.<namespace-name>.svc.cluster.local
Emri i saktë i hostit për grupin shembullor të paraqitur më sipër është mysql-cluster.default.svc.cluster.local
. Konfiguro aplikacionet tuaja për t'u lidhur me MySQL në këtë adresë duke përdorur portin 3306 dhe kredencialet e përdoruesit që keni përcaktuar në sekretin tuaj.
Qasja në bazën tuaj të të dhënave nga jashtë
Ju mund të përdorni MySQL nga jashtë grupit tuaj duke përdorur aftësitë e përcjelljes së portit të Kubectl. Ekzekutoni komandën e mëposhtme për të hapur një seancë të re të përcjelljes së portit:
$ kubectl port-forward service/mysql-cluster 3306
Zëvendësoni mysql-cluster
me emrin e InnoDBCluster
me të cilin dëshironi të lidheni. Tani mund të përdorni mjetet tuaja lokale për të bashkëvepruar me bazën e të dhënave tuaja:
$ mysql -h127.0.0.1 -u root -p
Shtypja e Ctrl+C në dritaren e terminalit që ekzekuton komandën kubectl port-forward
do të mbyllë lidhjen.
Përshtatja e cilësimeve të serverit MySQL
Ju mund të ofroni çdo opsion të skedarit të konfigurimit MySQL që kërkon aplikacioni juaj duke vendosur fushën spec.mycnf
në manifestin e objektit tuaj InnoDBCluster
:
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
# ...
mycnf: |
[mysqld]
max_connections=500
innodb_ft_min_token_size=5
Operatori do të përdorë vlerën e kësaj fushe për të shkruar skedarin my.cnf
në sistemin e skedarëve të bazës së të dhënave tuaja Pods.
Vendosja e kapacitetit të ruajtjes
Operatori krijon automatikisht një vëllim të qëndrueshëm (PV) dhe një pretendim për vëllim të qëndrueshëm (PVC) për të ruajtur të dhënat e bazës së të dhënave tuaja. Ai paracakton të sigurojë 2Gi hapësirë ruajtëse.
Kjo mund të ndryshohet duke përdorur fushën e manifestit datadirVolumeClaimTemplate
e cila ju lejon të anashkaloni vetitë e burimit PVC të prodhuar nga operatori. Cakto veçorinë resources.requests.storage
në kapacitetin që kërkon.
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
# ...
datadirVolumeClaimTemplate:
resources:
requests:
storage: 10Gi
Duhet ta vendosni aq lart sa të ketë shumë hapësirë që të dhënat tuaja të rriten në të ardhmen. Operatori nuk mbështet ndryshimin e madhësisë së vëllimit në vend, kështu që do të shihni një gabim nëse përpiqeni të rrisni kapacitetin në të ardhmen. Kalimi në një vëllim më të madh do të kërkonte hapa të migrimit manual.
Mbyllja e versionit MySQL
Mund të lidhni një version specifik të MySQL me fushat spec.version
dhe spec.router.version
. Kjo do të parandalojë përmirësimet automatike të paqëllimshme. Zgjidhni të njëjtin version për MySQL Pods dhe rastet e ruterit tuaj për të garantuar përputhshmëri.
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
spec:
# ...
version: 8.0.31
router:
instances: 1
version: 8.0.31
Përmbledhje
Operatori MySQL i Oracle ofron një mekanizëm të përshtatshëm për ekzekutimin e bazave të të dhënave MySQL brenda një grupi Kubernetes. Ju mund të siguroni baza të reja të dhënash të përsëritura duke krijuar objekte InnoDBCluster
. Kjo është shumë më e thjeshtë sesa krijimi manual i StatefulSets dhe shërbimeve që ekspozojnë kontejnerët e rregullt MySQL.
Përdorimi i operatorit nuk pengon aftësinë tuaj për të kontrolluar MySQL ose mjedisin tuaj Kubernetes. Ju mund t'i personalizoni Pods-et tuaja duke ofruar vetitë tuaja të manifestit në fushën spec.podSpec
dhe të përdorni skedarin tuaj të konfigurimit MySQL me hapat e treguar më sipër. Operatori ofron gjithashtu mbështetje të integruar rezervë, duke ju lejuar të kopjoni bazën e të dhënave në ruajtjen e jashtme në një orar të përsëritur.