Ottimizza le prestazioni dei workload MySQL su GKE

Questo documento descrive come migliorare le prestazioni dei tuoi carichi di lavoro MySQL su Google Kubernetes Engine (GKE) mediante la generazione di configurazioni ottimizzate a livello di applicazione e di nodo. Per maggiori dettagli, consulta Ottimizzare per i workload su GKE.

Le ottimizzazioni per MySQL sono state determinate per un'istanza MySQL 8 utilizzata come database di elaborazione delle transazioni online a un singolo nodo ("OLTP di lettura/scrittura") con SSL, con prestazioni misurate utilizzando Sysbench 1.1.0. Valuta in che modo il workload MySQL viene utilizzato nel tuo cluster rispetto a questo caso d'uso. Se il tuo caso d'uso è diverso, le ottimizzazioni consigliate potrebbero dover essere modificate in base al tuo contesto.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

  • Abilita l'API GKE Recommender e l'API Google Kubernetes Engine.
  • Abilita le API
  • Per utilizzare Google Cloud CLI per questa attività, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo il comando gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.

Requisiti

Utilizza GKE 1.31.1-gke.12000 o versioni successive.

Ottimizzare per i workload MySQL

Ti consigliamo di utilizzare un pool di nodi dedicato per il tuo workload MySQL. Per impostazione predefinita, viene creato un nuovo pool di nodi quando completi i seguenti passaggi.

Per ottimizzare le prestazioni di un carico di lavoro MySQL:

  1. Crea i manifest con le ottimizzazioni per il workload MySQL:

    1. Genera i manifest con le ottimizzazioni consigliate eseguendo il seguente comando:

      gcloud container workload profiles manifests create \
         --workload=mysql-8-oltp
         --cluster-version=CLUSTER_VERSION
         --options=machineType=MACHINE_TYPE \
         --output-path=/tmp/manifests.yaml
      

      Sostituisci quanto segue:

      • CLUSTER_VERSION: la versione di GKE. La versione consigliata è GKE 1.31.1-gke.12000 o successive.
      • MACHINE_TYPE: il tipo di macchina desiderato.

      Il flag --output-path=/tmp/manifests.yaml è facoltativo. Se non viene specificato, i manifest vengono stampati sul terminale, ma non vengono salvati in un file.

      Questo comando genera un singolo file YAML contenente due risorse Kubernetes:

      • Un ConfigMap che specifica una configurazione MySQL denominata default-auth.cnf.
      • Un oggetto ComputeClass. Specifica le macchine su cui eseguire MySQL, il che è facoltativo. Per informazioni dettagliate su come vengono specificati i tipi di macchine, vedi Informazioni su ComputeClass personalizzate
    2. Esamina i consigli e modifica i manifest in modo che includano le ottimizzazioni che preferisci. Per valutare i consigli, puoi procedere nel seguente modo:

      • Consulta la documentazione di MySQL per valutare la configurazione consigliata per il tuo contesto.
      • Considera come viene utilizzato il workload MySQL sul tuo cluster rispetto al seguente caso d'uso. Se il tuo caso d'uso è diverso, le ottimizzazioni consigliate potrebbero dover essere modificate in base al tuo contesto.

      Le ottimizzazioni per MySQL sono state determinate per un'istanza MySQL 8 utilizzata come database di elaborazione delle transazioni online a un singolo nodo ("OLTP di lettura/scrittura") con SSL, con prestazioni misurate utilizzando Sysbench 1.1.0.

    3. Modifica il file manifest se vuoi modificare la configurazione o aggiungerne una.

    4. Applica i manifest al cluster utilizzando questo comando:

      kubectl create -f /tmp/manifests.yaml
      
  2. Esegui il deployment di un pod che fa riferimento alle ottimizzazioni. Ad esempio:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8
          volumeMounts:
            - name: gke-optimized-workload-config
              subPath: default-auth.cnf
              mountPath: /etc/mysql/conf.d/gke-optimized.cnf
              readOnly: true
      volumes:
        - name: gke-optimized-workload-config
          configMap:
            name: mysql-config
      nodeSelector:
        cloud.google.com/compute-class: optimized-gke-mysql-8-oltp-abc123
    

    Modifica il nome di ComputeClass in modo che corrisponda a quello generato. Poi, applica il manifest del pod al cluster:

    kubectl apply -f pod.yaml
    
  3. Verifica che MySQL utilizzi la configurazione ottimizzata. Per farlo, puoi eseguire il seguente comando per assicurarti che MySQL utilizzi la configurazione ottimizzata:

    kubectl exec mysql -- mysql -e "SELECT DISTINCT VARIABLE_PATH FROM performance_schema.variables_info WHERE VARIABLE_PATH != '';"
    

    Dovresti vedere un output simile al seguente:

    VARIABLE_PATH
    /etc/mysql/conf.d/gke-optimized.cnf
    /etc/my.cnf
    

    Puoi anche utilizzare il comando mysql per eseguire query sulle singole direttive impostate nella configurazione ottimizzata, ad esempio max_connections.

Quando esegui il deployment del workload, il cluster crea un nuovo pool di nodi che rispetta la configurazione ottimizzata e assegna i pod a questi node pool.

I pod esistenti non vengono modificati. Vengono ottimizzati solo i pod che fanno riferimento alle configurazioni ottimizzate. Se hai già eseguito il deployment di workload MySQL nel tuo cluster, devi eseguire nuovamente il deployment di questi workload per eseguirli con le configurazioni ottimizzate.

Passaggi successivi