Maison >base de données >tutoriel mysql >Premiers pas avec MOCO, l'opérateur MySQL pour Kubernetes, partie 1

Premiers pas avec MOCO, l'opérateur MySQL pour Kubernetes, partie 1

DDD
DDDoriginal
2025-01-14 14:02:44537parcourir

Getting started on MOCO, the MySQL Operator for Kubernetes Part 1

MOCO (MySQL Operator for Kubernetes) est un puissant outil cloud natif conçu pour rationaliser la gestion des clusters MySQL au sein de Kubernetes. Il automatise les tâches clés telles que le provisionnement, la mise à l'échelle, les sauvegardes et la maintenance, garantissant ainsi une haute disponibilité et fiabilité. MOCO exploite les ressources Kubernetes pour créer, surveiller et gérer efficacement vos déploiements MySQL.

MOCO prend en charge des versions spécifiques de MySQL et Kubernetes. Actuellement, il est compatible avec MySQL 8.0.28, 8.0.37, 8.0.39, 8.0.40 et 8.4.3, ainsi qu'avec Kubernetes 1.29, 1.30 et 1.31.

Comment fonctionne MOCO

Approvisionnement du cluster

MOCO provisionne les clusters MySQL à l'aide de Kubernetes StatefulSets. Cela implique :

  1. Définition d'une ressource personnalisée (CR) MySQLCluster spécifiant les configurations souhaitées.
  2. Le contrôleur MOCO créant des StatefulSets et des réclamations de volumes persistants (PVC) pour les nœuds de cluster.
  3. Configuration d'instances MySQL avec réplication semi-synchrone pour une haute disponibilité.

Services de déploiement

MOCO déploie les services suivants :

  • Service principal : Dirige le trafic vers le nœud principal.
  • Service de réplique : Achemine les requêtes de lecture vers les nœuds de réplique.
  • Service de sauvegarde : Gère les sauvegardes via des side-cars intégrés au StatefulSet.

Types de déploiement

  • Primaire unique avec répliques : La valeur par défaut ; une réplique principale et plusieurs répliques.
  • Clusters multi-régions : Pour une réplication géographiquement distribuée.

Sauvegarde et restauration

MOCO facilite les sauvegardes complètes et incrémentielles régulières stockées dans le stockage d'objets compatible Amazon S3. Les fonctionnalités incluent :

  • Sauvegardes planifiées vers le stockage objet.
  • Sauvegardes à la demande via l'API Kubernetes.
  • Mises à jour CR simples pour les restaurations.
  • Récupération ponctuelle (PITR) pour une reprise après sinistre robuste.

Seau de stockage d'objets

Le bucket est l'unité de gestion S3 des objets. MOCO stocke les sauvegardes dans un compartiment désigné. Notez que MOCO ne supprime pas automatiquement les anciennes sauvegardes ; vous devrez configurer la gestion du cycle de vie du bucket pour cela.

De plus amples détails sont disponibles dans le lien fourni.

Gestion des pods problématiques

MOCO détecte et isole automatiquement les nœuds MySQL avec des données incohérentes (pods errants), évitant ainsi les problèmes de réplication. La suppression manuelle est également possible si nécessaire.

Gestion de la réplication

MOCO utilise la réplication semi-synchrone pour la cohérence des données, garantissant que le nœud principal écrit les modifications dans les répliques avant de valider les transactions. Les basculements sont automatisés en promouvant une réplique au rang de réplique principale, minimisant ainsi les interruptions. MOCO surveille également le décalage de réplication pour maintenir la synchronisation et les performances.

Avec état ou apatride

Les déploiements MOCO sont intrinsèquement dynamiques en raison des exigences de stockage persistantes de MySQL. Kubernetes StatefulSets garantit :

  • Stockage persistant via PVC.
  • Identités réseau stables pour les nœuds MySQL.
  • Mise à l'échelle et mise à jour progressives ordonnées.

Démarrage rapide

Deux méthodes d'installation sont disponibles :

Utilisation de manifestes bruts :

<code class="language-bash">curl -fsLO https://github.com/cybozu-go/moco/releases/latest/download/moco.yaml
kubectl apply -f moco.yaml</code>

Utilisation du graphique Helm :

<code class="language-bash">helm repo add moco https://cybozu-go.github.io/moco/
helm repo update
helm install --create-namespace --namespace moco-system moco moco/moco</code>

La personnalisation du manifeste est prise en charge via le répertoire config/ (kustomize).

Création de cluster

Un nouveau cluster désigne une instance inscriptible comme principale ; tous les autres sont des répliques en lecture seule. Le YAML suivant crée un cluster à trois nœuds avec une anti-affinité de pod et des limites de ressources :

<code class="language-yaml">apiVersion: moco.cybozu.com/v1beta2
kind: MySQLCluster
metadata:
  namespace: default
  name: test
spec:
  replicas: 3
  podTemplate:
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app.kubernetes.io/name
                operator: In
                values:
                - mysql
              - key: app.kubernetes.io/instance
                operator: In
                values:
                - test
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: mysqld
        image: ghcr.io/cybozu-go/moco/mysql:8.4.3
        resources:
          limits:
            cpu: "10"
            memory: "10Gi"
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi</code>

Des exemples de manifestes supplémentaires se trouvent dans le répertoire des exemples.

Utilisation du cluster

Le plugin kubectl moco (disponible sur les versions GitHub) fournit un accès externe aux instances MOCO MySQL. Les services (moco-test-primary.foo.svc et moco-test-replica.foo.svc pour un cluster test dans l'espace de noms foo) autorisent l'accès au réseau.

Surveillance de l'état du cluster

Utilisez kubectl get mysqlcluster et kubectl describe mysqlcluster pour surveiller l'état, la disponibilité et les événements récents du cluster.

Accès au journal

Accédez aux journaux d'erreurs mysqld et de requêtes lentes à l'aide de kubectl logs.

Basculement et basculement

MOCO gère le basculement et le basculement automatiques pour garantir une haute disponibilité. Le basculement manuel est possible via kubectl moco switchover CLUSTER_NAME.

Récupération des répliques errantes

Supprimez le PVC et le Pod d'une réplique errante à l'aide de kubectl delete.

Référence : https://www.php.cn/link/2bbc1cc8fd0e5f9e0b91f01828c87814

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn