Déployez un cluster CockroachDB dans Amazon EKS à l'aide de Terraform - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Déployez un cluster CockroachDB dans Amazon EKS à l'aide de Terraform

Sandip Gangapadhyay et Kalyan Senthilnathan, Amazon Web Services

Résumé

Ce modèle fournit un module HashiCorp Terraform pour déployer un cluster CockroachDB à nœuds multiples sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'aide de l'opérateur CockroachDB. CockroachDB est une base de données SQL distribuée qui fournit un partitionnement horizontal automatique, une haute disponibilité et des performances cohérentes sur des clusters répartis géographiquement. Ce modèle utilise Amazon EKS comme plate-forme Kubernetes gérée et implémente le gestionnaire de certificats pour les communications entre nœuds sécurisées par TLS. Il utilise également un Network Load Balancer pour la distribution du trafic et crée CockroachDB StatefulSetsavec des modules qui répliquent automatiquement les données pour améliorer la tolérance aux pannes et les performances.

Public visé

Pour implémenter ce modèle, nous vous recommandons de vous familiariser avec les éléments suivants :

  • HashiCorp Concepts de Terraform et pratiques de l'infrastructure en tant que code (IaC)

  • Services AWS, en particulier Amazon EKS

  • Principes fondamentaux de Kubernetes, y compris les opérateurs StatefulSets et les configurations de service

  • Bases de données SQL distribuées

  • Concepts de sécurité, tels que la gestion des certificats TLS.

  • DevOps pratiques, CI/CD flux de travail et automatisation de l'infrastructure

Conditions préalables et limitations

Conditions préalables

Limites

Versions du produit

  • Version 22.2.2 de CockroachDB

Architecture

Architecture cible

Le schéma suivant montre un déploiement hautement disponible de CockroachDB sur trois zones de AWS disponibilité au sein d'un cloud privé virtuel (VPC). Les pods CockroachDB sont gérés via Amazon EKS. L'architecture illustre comment les utilisateurs accèdent à la base de données via un Network Load Balancer, qui distribue le trafic aux pods CockroachDB. Les pods s'exécutent sur des instances Amazon Elastic Compute Cloud (Amazon EC2) dans chaque zone de disponibilité, ce qui garantit résilience et tolérance aux pannes.

Un déploiement de CockroachDB à haute disponibilité sur trois zones de disponibilité AWS au sein d'un VPC.

Ressources créées

Le déploiement du module Terraform utilisé dans ce modèle crée les ressources suivantes :

  1. Network Load Balancer — Cette ressource sert de point d'entrée pour les demandes des clients et répartit uniformément le trafic entre les instances de CockroachDB.

  2. CockroachDB StatefulSet — StatefulSet Définit l'état souhaité pour le déploiement de CockroachDB au sein du cluster Amazon EKS. Il gère le déploiement ordonné, le dimensionnement et les mises à jour des pods CockroachDB.

  3. Pods CockroachDB — Ces pods sont des instances de CockroachDB exécutées sous forme de conteneurs dans des pods Kubernetes. Ces modules stockent et gèrent les données dans l'ensemble du cluster distribué.

  4. Base de données CockroachDB — Il s'agit de la base de données distribuée gérée par CockroachDB, couvrant plusieurs pods. Il réplique les données pour garantir une haute disponibilité, une tolérance aux pannes et des performances élevées.

Outils

Services AWS

Autres outils

  • HashiCorp Terraform est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.

  • kubectl est une interface de ligne de commande qui vous permet d'exécuter des commandes sur des clusters Kubernetes.

Référentiel de code

Le code de ce modèle est disponible dans le référentiel GitHub Deploy a CockroachDB in Amazon EKS using Terraform. Le référentiel de code contient les fichiers et dossiers suivants pour Terraform :

  • modulesdossier — Ce dossier contient le module Terraform pour CockroachDB

  • maindossier — Ce dossier contient le module racine qui appelle le module enfant CockroachDB pour créer le cluster de base de données CockroachDB.

Bonnes pratiques

  • Ne réduisez pas la taille à moins de trois nœuds. Ceci est considéré comme un anti-modèle sur CockroachDB et peut provoquer des erreurs. Pour plus d'informations, consultez Cluster Scaling dans la documentation de CockroachDB.

  • Implémentez le dimensionnement automatique d'Amazon EKS à l'aide de Karpernter ou Cluster Autoscaler. Cela permet au cluster CockroachDB de s'étendre horizontalement et de créer automatiquement de nouveaux nœuds. Pour plus d'informations, consultez la section Scale cluster computing with Karpenter et Cluster Autoscaler dans la documentation Amazon EKS.

    Note

    En raison de la règle de planification podAntiAffinity Kubernetes, un seul pod CockroachDB peut être planifié dans un nœud Amazon EKS.

  • Pour connaître les meilleures pratiques de sécurité d'Amazon EKS, consultez la section Meilleures pratiques en matière de sécurité dans la documentation Amazon EKS.

  • Pour connaître les meilleures pratiques en matière de performances SQL pour CockroachDB, consultez la section Meilleures pratiques en matière de performances SQL dans la documentation de CockroachDB.

  • Pour plus d'informations sur la configuration d'un backend distant Amazon Simple Storage Service (Amazon S3) pour le fichier d'état Terraform, consultez Amazon S3 dans la documentation Terraform.

Épopées

Sous-tâcheDescriptionCompétences requises

Clonez le référentiel de code.

Entrez la commande suivante pour cloner le référentiel :

git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git
DevOps ingénieur, Git

Mettez à jour les variables Terraform.

  1. Entrez la commande suivante pour accéder au dossier principal du référentiel cloné :

    cd crdb-cluster-eks-terraform/main
  2. Ouvrez le fichier variable .tf.

  3. Configurez la valeur par défaut pour les variables suivantes :

    • region— Entrez la cible Région AWS

    • eks_cluster_name— Entrez le nom du cluster Amazon EKS cible

    • number_of_nodes— Entrez le nombre de nœuds à déployer

  4. Enregistrez et fermez le fichier variable .tf.

DevOps ingénieur, Terraform
Sous-tâcheDescriptionCompétences requises

Déployez l'infrastructure.

  1. Entrez la commande suivante pour initialiser le déploiement de Terraform :

    terraform init
  2. Entrez la commande suivante pour générer un plan d'exécution :

    terraform plan
  3. Passez en revue le plan et validez les ressources et les composants d'infrastructure qui seront créés.

  4. Entrez la commande suivante pour déployer l'infrastructure :

    terraform apply
  5. Lorsque vous y êtes invité, entrez Oui pour confirmer le déploiement.

  6. Patientez jusqu'à ce que le déploiement soit terminé.

DevOps ingénieur, Terraform
Sous-tâcheDescriptionCompétences requises

Vérifiez la création des ressources.

  1. Entrez la commande suivante pour définir le contexte Amazon EKS à l'aide de AWS CLI :

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. Entrez la commande suivante pour vérifier le nombre de pods qui utilisent CockroachDB :

    kubectl get pods -n <namespace>

    Voici un exemple de sortie.

    NAME READY STATUS RESTARTS AGE cockroach-operator-655fbf7847-zn9v8 1/1 Running 0 30m cockroachdb-0 1/1 Running 0 24m cockroachdb-1 1/1 Running 0 24m cockroachdb-2 1/1 Running 0 24m
  3. Vérifiez que le nombre de pods correspond à la valeur que vous avez définie dans le fichier variable.tf.

DevOps ingénieur

(Facultatif) Augmentez ou diminuez.

  1. Dans le fichier variable.tf, augmentez ou diminuez le nombre de nœuds, puis enregistrez le fichier.

  2. Répétez les étapes pour déployer l'infrastructure via Terraform. Terraform ajoute ou supprime des pods.

  3. Répétez les étapes pour vérifier le nombre de pods qui utilisent Cockroach DB. Par exemple, si vous avez augmenté le nombre de nœuds de trois à quatre, vous devriez maintenant voir quatre pods fonctionner.

DevOps ingénieur, Terraform
Sous-tâcheDescriptionCompétences requises

Supprimez l'infrastructure.

La mise à l'échelle des nœuds 0 réduira les coûts de calcul. Cependant, vous devrez toujours payer des frais pour les volumes Amazon EBS persistants créés par ce module. Pour éliminer les coûts de stockage, procédez comme suit pour supprimer tous les volumes :

  1. Entrez la commande suivante pour supprimer l'infrastructure :

    terraform destroy
  2. Lorsque vous y êtes invité, entrez « Oui » pour confirmer.

Terraform

Résolution des problèmes

ProblèmeSolution

Erreur lors de la validation des informations d'identification du fournisseur

Lorsque vous exécutez la destroy commande Terraform apply ou, vous pouvez rencontrer l'erreur suivante :

Error: configuring Terraform AWS Provider: error validating provider  credentials: error calling sts:GetCallerIdentity: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 123456a9-fbc1-40ed-b8d8-513d0133ba7f, api error InvalidClientTokenId: The security token included in the request is invalid.

Cette erreur est due à l'expiration du jeton de sécurité pour les informations d'identification utilisées dans la configuration de votre machine locale. Pour obtenir des instructions sur la façon de résoudre l'erreur, consultez la section Définir et afficher les paramètres de configuration dans la AWS CLI documentation.

Les pods CockroachDB sont en attente

  1. En raison de la règle de planification podAntiAffinity Kubernetes, un seul pod CockroachDB peut être planifié dans un nœud Amazon EKS. Si le nombre de pods CockroachDB dépasse le nombre de nœuds Amazon EKS disponibles, il se peut que les pods CockroachDB soient en attente. Dans ce cas, vous devez implémenter Cluster Autoscaler ou Karpenter afin que le nœud Amazon EKS évolue automatiquement. Pour plus d'informations, consultez la section Mise à l'échelle du calcul en cluster avec Karpenter et Cluster Autoscaler.

  2. Vérifiez si les nœuds de travail Kubernetes possèdent des node=cockroachdb étiquettes en saisissant la commande suivante :

    kubectl get nodes --show-labels

    Si ce n'est pas le cas, vous devez vous assurer que tous les nœuds de travail sont correctement étiquetés. Pour plus d'informations, consultez Modifier la configuration d'un groupe de nœuds dans la documentation Amazon EKS.

Ressources connexes

Pièces jointes

Pour accéder au contenu supplémentaire associé à ce document, décompressez le fichier suivant : attachment.zip