Optimiser les performances des charges de travail MySQL sur GKE

Ce document explique comment améliorer les performances de vos charges de travail MySQL sur Google Kubernetes Engine (GKE) en générant des configurations optimisées au niveau de l'application et du nœud. Pour en savoir plus, consultez Optimiser les charges de travail sur GKE.

Les optimisations pour MySQL ont été déterminées pour une instance MySQL 8 utilisée comme base de données de traitement des transactions en ligne à nœud unique ("OLTP en lecture/écriture") avec SSL, avec des performances mesurées à l'aide de Sysbench 1.1.0. Comparez l'utilisation de la charge de travail MySQL sur votre cluster à celle de ce cas d'utilisation. Si votre cas d'utilisation est différent, il faudra peut-être ajuster les optimisations recommandées en fonction de votre contexte.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API GKE Recommender et l'API Google Kubernetes Engine.
  • Activer les API
  • Pour utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

Conditions requises

Utilisez GKE version 1.31.1-gke.12000 ou ultérieure.

Optimiser pour les charges de travail MySQL

Nous vous recommandons d'utiliser un pool de nœuds dédié pour votre charge de travail MySQL. Par défaut, un pool de nœuds est créé lorsque vous effectuez les étapes suivantes.

Pour optimiser les performances d'une charge de travail MySQL, procédez comme suit :

  1. Créez les fichiers manifestes avec des optimisations pour la charge de travail MySQL :

    1. Générez des fichiers manifestes avec les optimisations recommandées en exécutant la commande suivante :

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

      Remplacez les éléments suivants :

      • CLUSTER_VERSION : version de GKE. Nous recommandons la version 1.31.1-gke.12000 ou ultérieure de GKE.
      • MACHINE_TYPE : type de machine souhaité.

      L'option --output-path=/tmp/manifests.yaml est facultative. Si ce n'est pas le cas, les fichiers manifestes sont imprimés dans le terminal, mais ne sont pas enregistrés dans un fichier.

      Cette commande génère un fichier YAML unique contenant deux ressources Kubernetes :

      • Un ConfigMap spécifiant une configuration MySQL nommée default-auth.cnf.
      • Un objet ComputeClass. Cette option spécifie les machines sur lesquelles MySQL doit s'exécuter. Elle est facultative. Pour en savoir plus sur la façon de spécifier les types de machines, consultez À propos des classes de calcul personnalisées.
    2. Examinez les recommandations et modifiez les fichiers manifestes pour qu'ils incluent les optimisations de votre choix. Pour évaluer les recommandations, vous pouvez procéder comme suit :

      • Consultez la documentation MySQL pour évaluer la configuration recommandée dans votre contexte.
      • Comparez l'utilisation de la charge de travail MySQL sur votre cluster au cas d'utilisation suivant. Si votre cas d'utilisation est différent, il faudra peut-être ajuster les optimisations recommandées en fonction de votre contexte.

      Les optimisations pour MySQL ont été déterminées pour une instance MySQL 8 utilisée comme base de données de traitement des transactions en ligne à nœud unique ("OLTP en lecture/écriture") avec SSL, avec des performances mesurées à l'aide de Sysbench 1.1.0.

    3. Modifiez le fichier manifeste si vous souhaitez modifier la configuration ou l'enrichir.

    4. Appliquez les fichiers manifestes au cluster à l'aide de la commande suivante :

      kubectl create -f /tmp/manifests.yaml
      
  2. Déployez un pod faisant référence aux optimisations. Exemple :

    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
    

    Modifiez le nom ComputeClass pour qu'il corresponde à celui généré. Appliquez ensuite le fichier manifeste de votre pod au cluster :

    kubectl apply -f pod.yaml
    
  3. Vérifiez que MySQL utilise la configuration optimisée. Pour ce faire, vous pouvez exécuter la commande suivante afin de vous assurer que MySQL utilise la configuration optimisée :

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

    Un résultat semblable aux lignes suivantes doit s'afficher :

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

    Vous pouvez également utiliser la commande mysql pour interroger les directives individuelles définies dans la configuration optimisée, telles que max_connections.

Lorsque vous déployez la charge de travail, le cluster crée un pool de nœuds qui respecte la configuration optimisée et y attribue vos pods.

Les pods existants ne sont pas modifiés. Seuls les pods qui font référence aux configurations optimisées sont optimisés. Si vous avez déjà déployé des charges de travail MySQL dans votre cluster, vous devez les redéployer pour les exécuter avec les configurations optimisées.

Étapes suivantes