Il supporto di Kubernetes per le applicazioni stateful è notevolmente maturato negli ultimi anni. Ora è possibile individuare il database all'interno del cluster, consentendogli di beneficiare della stessa scalabilità degli altri carichi di lavoro.
MySQL è uno dei motori di database relazionali più popolari ed è ora potenziato da un operatore Kubernetes ufficiale. Il progetto open source guidato da Oracle fornisce un modo semplice per creare cluster MySQL gestiti all'interno di Kubernetes.
In questo articolo imparerai come installare l'operatore e inizierai a eseguire il provisioning di un database. L'operatore crea automaticamente i servizi in modo che le applicazioni negli altri contenitori possano connettersi a MySQL.
Che cos'è l'operatore MySQL?
L'operatore MySQL di Oracle è un componente che viene eseguito all'interno del cluster per automatizzare l'inizializzazione del database. Non è necessario che l'operatore utilizzi MySQL in Kubernetes – potresti distribuire tu stesso l'immagine del contenitore ufficiale usando un StatefulSet. Questo approccio è tuttavia ingombrante, poiché richiede la creazione e la gestione di file manifest lunghi per creare un ambiente affidabile.
L'operatore fornisce una serie di risorse personalizzate che è possibile utilizzare per creare i database. L'aggiunta di un oggetto InnoDBCluster al cluster Kubernetes richiede all'operatore di configurare StatefulSet, archiviazione e rete per te. Automatizza inoltre aggiornamenti e backup, riducendo notevolmente il carico per gli amministratori.
Installazione dell'operatore MySQL
Il grafico Helm incluso è il più semplice modo per installare l'operatore nel tuo cluster. I file manifest sono disponibili in alternativa se non hai Helm nel tuo ambiente.
Per prima cosa aggiungi l'operatore al tuo elenco di repository Helm:
$ helm repo add mysql-operator https: //mysql.github.io/mysql-operator/
Prossimo aggiornamento del database del repository di Helm in modo che scopra i grafici disponibili:
$ helm repo update
Ora usa il seguente comando per installare l'operatore in un nuovo spazio dei nomi chiamato mysql-operator:
$ helm install mysql-operator mysql-operator/mysql-operator –namespace mysql-operator –create-namespace NOME: mysql-operator ULTIMO DISTRIBUITO: Sat Oct 29 15:00:26 2022 NAMESPACE: mysql-operator STATO: distribuito REVISIONE: 1 SUITE DI PROVA: Nessuna
Il completamento del processo potrebbe richiedere alcuni secondi.
Creazione di un segreto delle credenziali utente root
Ogni cluster di database che crei deve essere accompagnato da un segreto Kubernetes che contiene le credenziali per MySQL utente root. L'operatore creerà l'account con privilegi di root con il nome utente e la password forniti nel segreto.
Copia il seguente manifest YAML e modifica il valore del campo rootPassword in qualcosa di sicuro. Modifica anche il nome utente e le impostazioni dell'host utente, se applicabile alla tua situazione. Ricorda che l'account qui nominato avrà il controllo totale su MySQL; in seguito dovresti configurare utenti separati per le tue applicazioni, utilizzando la normale shell MySQL.
apiVersion: v1< strong class="co3"> tipo: Segreti metadati: nome< /strong>: mysql-root-user stringData: rootHost: "%" rootUser: "root" rootPassword< strong class="sy2">: "P@$$w0rd"
Salva il file come secret.yaml. Ora usa Kubectl per aggiungere il segreto al tuo cluster:
$ kubectl apply -f secret.yaml secret/mysql-root-user creato
Creazione di un cluster di base
Quindi crea un nuovo file YAML chiamato mysql. yaml e copia il seguente contenuto:
apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster metadati: nome: mysql-cluster spec: secretName: mysql-root-user istanze: 3 tlsUseSelfSigned: true router: istanze< strong class="sy2">: 1
Questo definisce un oggetto utilizzando la risorsa personalizzata InnoDBCluster offerta dall'operatore MySQL. L'applicazione del manifest al tuo cluster creerà un nuovo database MySQL con la replica configurata automaticamente. Esamina e modifica le seguenti proprietà nel manifest prima di continuare:
- spec.secretName – Deve corrispondere al metadata.name del segreto creato in precedenza. Il segreto di riferimento verrà letto per configurare l'account utente root MySQL.
- spec.instances – Definisce quante repliche MySQL (Pod) eseguire. Attualmente sono supportate fino a 10 repliche.
- spec.tlsUseSelfSigned– Il campo è impostato su true in questo esempio per utilizzare il certificato TLS autofirmato incluso. Puoi facoltativamente fornire il tuo certificato tramite un segreto Kubernetes impostando i campi spec.tlsSecretName/spec.tlsCASecretName.
- spec.router.instances– Il componente MySQL Router è responsabile dell'indirizzamento del traffico di servizio tra le repliche MySQL disponibili. Questo campo definisce quante istanze del router eseguire. Più istanze miglioreranno le prestazioni e la resilienza in situazioni ad alto traffico.
Utilizza Kubectl per applicare il manifest e creare il tuo cluster di database:
$ kubectl apply -f mysql.yaml innodbcluster. mysql.oracle.com/mysql-cluster create
Il completamento del processo di inizializzazione di MySQL può richiedere un paio di minuti. L'operatore utilizza diversi contenitori init per configurare gli account utente e configurare la directory dei dati di MySQL. Attendi qualche istante prima di eseguire kubectl get pods per verificare cosa è in esecuzione:
$ kubectl get pods NOME PRONTO STATO RIAVVIA ETÀ mysql-cluster-0 2/2 In esecuzione 0 2m mysql-cluster-1 2/2 In esecuzione 0 2m mysql-cluster-2 2/2 In esecuzione 0 2m mysql-cluster-router-6b68f9b5cb- wbqm5 1/1 In esecuzione 0 2m
Le tre repliche MySQL e la singola istanza del router sono tutte nello stato In esecuzione. Il database è ora pronto per l'uso.
Connessione al tuo cluster
L'operatore MySQL crea un servizio Kubernetes che instrada il traffico dai Pod dell'applicazione al database. Al servizio viene assegnato un nome host con il seguente formato:
<cluster-name>.<namespace-name>.svc.cluster.local
Il nome host corretto per il cluster di esempio mostrato sopra è mysql-cluster .default.svc.cluster.local. Configura le tue applicazioni per la connessione a MySQL a questo indirizzo utilizzando la porta 3306 e le credenziali utente che hai definito nel tuo segreto.
Accesso esterno al tuo database
< p>Puoi accedere a MySQL dall'esterno del tuo cluster utilizzando le funzionalità di port forwarding di Kubectl. Esegui il comando seguente per aprire una nuova sessione di port forwarding:
$ kubectl port-forward service/mysql-cluster 3306
Sostituisci mysql-cluster con il nome dell'InnoDBCluster a cui desideri connetterti. Ora puoi usare i tuoi strumenti locali per interagire con il tuo database:
$ mysql -h127.0.0.1 -u root -p
Premendo Ctrl+C nella finestra del terminale eseguendo il comando kubectl port-forward si chiuderà la connessione.
Personalizzazione delle impostazioni del server MySQL
Puoi fornire qualsiasi opzione del file di configurazione MySQL richiesta dalla tua applicazione impostando il campo spec.mycnf nel manifest del tuo oggetto InnoDBCluster:
apiVersion: mysql.oracle.com/v2 gentile: < /strong>InnoDBCluster specifica: # … mycnf: | [mysqld] max_connections=500 innodb_ft_min_token_size=5
L'operatore utilizzerà il valore di questo campo per scrivere il file my.cnf nel filesystem del tuo database Pods.
Impostazione della capacità di archiviazione
L'operatore crea automaticamente un volume persistente (PV) e un'attestazione di volume persistente (PVC) da archiviare i dati del tuo database. Per impostazione predefinita, fornisce 2Gi di spazio di archiviazione.
Questo può essere modificato utilizzando il campo manifest datadirVolumeClaimTemplate che consente di sovrascrivere le proprietà della risorsa PVC prodotta dall'operatore. Imposta la proprietà resources.requests.storage sulla capacità richiesta.
apiVersion: mysql.oracle.com/v2 tipo: InnoDBCluster spec: # … datadirVolumeClaimTemplate: risorse: richieste: spazio di archiviazione: 10Gi
Dovresti impostare un valore sufficientemente alto da consentire ai tuoi dati di crescere in futuro. L'operatore non supporta il ridimensionamento del volume sul posto, quindi verrà visualizzato un errore se si tenta di aumentare la capacità in futuro. Il passaggio a un volume maggiore richiederebbe passaggi di migrazione manuali.
Bloccare la versione di MySQL
Puoi aggiungere una versione specifica di MySQL con il spec.version e spec.router.version. Ciò impedirà aggiornamenti automatici non intenzionali. Seleziona la stessa versione per i tuoi pod MySQL e le istanze router per garantire la compatibilità.
apiVersion: mysql.oracle.com /v2 gentile: InnoDBCluster specifica: # … versione: 8.0.31 router: istanze< strong class="sy2">: 1 versione: 8.0.31
Riepilogo
MySQL Operator di Oracle fornisce un comodo meccanismo per eseguire database MySQL all'interno di un cluster Kubernetes. È possibile eseguire il provisioning di nuovi database replicati creando oggetti InnoDBCluster. Questo è molto più semplice della creazione manuale di StatefulSet e servizi che espongono normali contenitori MySQL.
L'utilizzo dell'operatore non impedisce la tua capacità di controllare MySQL o il tuo ambiente Kubernetes. Puoi personalizzare i tuoi Pod fornendo le tue proprietà manifest nel campo spec.podSpec e utilizzare il tuo file di configurazione MySQL con i passaggi mostrati sopra. L'operatore offre anche un supporto integrato per il backup, che consente di copiare il database su una memoria esterna in base a una pianificazione ricorrente.
LEGGI SUCCESSIVO
- › Anker ha appena realizzato un AirTag migliore di Apple
- › AMC e Zoom porteranno le riunioni di lavoro sul grande schermo
- › Come utilizzare la funzione SUBTOTALE in Microsoft Excel
- › Zoom sta diventando una suite di produttività completa
- › Non puoi più tornare al vecchio Gmail
- › Come svuotare la cache di Instagram