Terraform を使用して Amazon EKS に CockroachDB クラスターをデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Terraform を使用して Amazon EKS に CockroachDB クラスターをデプロイする

Sandip Gangapadhyay と Kalyan Senthilnathan、Amazon Web Services

概要

このパターンは、CockroachDB 演算子を使用して、Amazon Elastic Kubernetes Service (Amazon EKS) にマルチノード CockroachDB クラスターをデプロイするための HashiCorp Terraform モジュールを提供します。CockroachDB は、地理的に分散されたクラスター間で自動水平シャーディング、高可用性、一貫したパフォーマンスを提供する分散 SQL データベースです。このパターンでは、Amazon EKS をマネージド Kubernetes プラットフォームとして使用し、TLS で保護されたノード通信用の cert-manager を実装します。また、トラフィック分散に Network Load Balancer を使用し、耐障害性とパフォーマンスのためにデータを自動的にレプリケートするポッドを持つ CockroachDB StatefulSets を作成します。

対象者

このパターンを実装するには、以下について理解しておくことをお勧めします。

  • HashiCorp Terraform の概念とコードとしてのインフラストラクチャ (IaC) プラクティス

  • AWS のサービス、特に Amazon EKS

  • StatefulSets、サービス設定などの Kubernetes の基本

  • 分散 SQL データベース

  • TLS 証明書管理などのセキュリティの概念。

  • DevOps プラクティス、CI/CD ワークフロー、インフラストラクチャの自動化

前提条件と制限

前提条件

制限事項

  • CockroachDB Kubernetes 演算子は、マルチリージョンデプロイ用の複数の Kubernetes クラスターをサポートしていません。その他の制限については、「Orchestrate CockroachDB Across Multiple Kubernetes Clusters (CockroachDB ドキュメント)」およびCockroachDB Kubernetes Operator (GitHub)」を参照してください。

  • 永続ボリュームクレーム (PVCs) の自動プルーニングは現在、デフォルトで無効になっています。つまり、ノードを廃止して削除した後、オペレーターはポッドにマウントされた永続ボリュームを削除しません。詳細については、CockroachDB ドキュメントの「自動 PVC プルーニング」を参照してください。

製品バージョン

  • CockroachDB バージョン 22.2.2

アーキテクチャ

ターゲットアーキテクチャ

次の図は、Virtual Private Cloud (VPC) 内の 3 つの AWS アベイラビリティーゾーンにまたがる高可用性 CockroachDB のデプロイを示しています。CockroachDB ポッドは Amazon EKS を通じて管理されます。このアーキテクチャは、ユーザーが Network Load Balancer を介してデータベースにアクセスする方法を示しています。これにより、トラフィックが CockroachDB ポッドに分散されます。ポッドは各アベイラビリティーゾーンの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで実行され、耐障害性と耐障害性を提供します。

VPC 内の 3 つの AWS アベイラビリティーゾーンにまたがる高可用性の CockroachDB デプロイ。

作成されたリソース

このパターンで使用される Terraform モジュールをデプロイすると、次のリソースが作成されます。

  1. Network Load Balancer – このリソースは、クライアントリクエストのエントリポイントとして機能し、CockroachDB インスタンス全体にトラフィックを均等に分散します。

  2. CockroachDB StatefulSet – StatefulSet は、Amazon EKS クラスター内の CockroachDB デプロイの目的の状態を定義します。CockroachDB ポッドの順序付けられたデプロイ、スケーリング、更新を管理します。

  3. CockroachDB ポッド – これらのポッドは、Kubernetes ポッド内のコンテナとして実行される CockroachDB のインスタンスです。これらのポッドは、分散クラスター全体のデータを保存および管理します。

  4. CockroachDB データベース – これは、複数のポッドにまたがる CockroachDB によって管理される分散データベースです。高可用性、耐障害性、パフォーマンスのためにデータをレプリケートします。

ツール

AWS のサービス

  • AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を使用して を操作するのに役立つオープンソースツールです。

  • Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。

その他のツール

  • HashiCorp Terraform は、コードを使用してクラウドインフラストラクチャとリソースを割り当てて管理するのに役立つ Infrastructure as Code (IaC) ツールです。

  • kubectlは、Kubernetes クラスターに対してコマンドを実行するためのコマンドラインインターフェイスです。

コードリポジトリ

このパターンのコードは、GitHub Deploy a CockroachDB cluster in Amazon EKS using Terraform repository で入手できます。コードリポジトリには、Terraform の次のファイルとフォルダが含まれています。

  • modules folder – このフォルダには、CockroachDB の Terraform モジュールが含まれています。

  • main folder – このフォルダには、CockroachDB 子モジュールを呼び出して CockroachDB データベースクラスターを作成するルートモジュールが含まれています。

ベストプラクティス

  • 3 つ未満のノードにスケールダウンしないでください。これは CockroachDB のアンチパターンと見なされ、エラーを引き起こす可能性があります。詳細については、CockroachDB ドキュメントの「クラスタースケーリング」を参照してください。

  • Karpernter または Cluster Autoscaler を使用して Amazon EKS Auto Scaling を実装します。これにより、CockroachDB クラスターは水平方向および新しいノードを自動的にスケーリングできます。詳細については、Amazon EKS ドキュメントの「Karpenter と Cluster Autoscaler を使用したクラスターコンピューティングのスケーリング」を参照してください。

    注記

    podAntiAffinity Kubernetes スケジューリングルールにより、1 つの Amazon EKS ノードでスケジュールできる CockroachDB ポッドは 1 つだけです。

  • Amazon EKS セキュリティのベストプラクティスについては、Amazon EKS ドキュメントの「セキュリティのベストプラクティス」を参照してください。

  • CockroachDB の SQL パフォーマンスのベストプラクティスについては、CockroachDB ドキュメントの「SQL パフォーマンスのベストプラクティス」を参照してください。

  • Terraform 状態ファイルの Amazon Simple Storage Service (Amazon S3) リモートバックエンドの設定の詳細については、Terraform ドキュメントのAmazon S3」を参照してください。

エピック

タスク説明必要なスキル

コードリポジトリを複製します。

リポジトリのクローンを作成するには、次のコマンドを入力します。

git clone https://github.com/aws-samples/crdb-cluster-eks-terraform.git
DevOps エンジニア、Git

Terraform 変数を更新します。

  1. 次のコマンドを入力して、クローンされたリポジトリのメインフォルダに移動します。

    cd crdb-cluster-eks-terraform/main
  2. variable.tf ファイルを開きます。

  3. 次の変数のデフォルト値を設定します。

    • region – ターゲットを入力します。 AWS リージョン

    • eks_cluster_name – ターゲット Amazon EKS クラスターの名前を入力します。

    • number_of_nodes – デプロイするノードの数を入力します。

  4. variable.tf ファイルを保存して閉じます。

DevOps エンジニア、Terraform
タスク説明必要なスキル

インフラストラクチャを準備します。

  1. Terraform デプロイを初期化するには、次のコマンドを入力します。

    terraform init
  2. 実行プランを生成するには、次のコマンドを入力します。

    terraform plan
  3. 計画を確認し、作成されるリソースとインフラストラクチャコンポーネントを検証します。

  4. 次のコマンドを入力してインフラストラクチャをデプロイします。

    terraform apply
  5. プロンプトが表示されたら、yes と入力してデプロイを確認します。

  6. デプロイが完了するまで待ちます。

DevOps エンジニア、Terraform
タスク説明必要なスキル

リソースの作成を確認します。

  1. 次のコマンドを入力して、 を使用して Amazon EKS コンテキストを設定します AWS CLI。

    aws eks update-kubeconfig —name <eks_cluster_name>
  2. 次のコマンドを入力して、CockroachDB を使用しているポッドの数を確認します。

    kubectl get pods -n <namespace>

    以下は出力例です。

    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. ポッドの数が variable.tf ファイルで定義した値と一致することを確認します。

DevOps エンジニア

(オプション) スケールアップまたはスケールダウン。

  1. variable.tf ファイルで、ノードの数を増減し、ファイルを保存します。

  2. ステップを繰り返して、Terraform を介してインフラストラクチャをデプロイします。Terraform はポッドを追加または削除します。

  3. ステップを繰り返して、Cockroach DB を使用しているポッドの数を確認します。たとえば、ノード数を 3 から 4 に増やした場合、4 つのポッドが実行されているはずです。

DevOps エンジニア、Terraform
タスク説明必要なスキル

インフラストラクチャを削除します。

ノードを にスケーリングすると0、コンピューティングコストを削減できます。ただし、このモジュールによって作成された永続的な Amazon EBS ボリュームには引き続き料金が発生します。ストレージコストを排除するには、以下の手順に従ってすべてのボリュームを削除します。

  1. 次のコマンドを入力してインフラストラクチャを削除します。

    terraform destroy
  2. プロンプトが表示されたら、「はい」と入力して確認します。

Terraform

トラブルシューティング

問題ソリューション

プロバイダー認証情報の検証中にエラーが発生しました。

Terraform applyまたは destroy コマンドを実行すると、次のエラーが発生することがあります。

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.

このエラーは、ローカルマシンの設定で使用されている認証情報のセキュリティトークンの有効期限が切れていることが原因です。エラーを解決する方法については、 AWS CLI ドキュメントの「設定の設定と表示」を参照してください。

保留中状態の CockroachDB ポッド

  1. podAntiAffinity Kubernetes スケジューリングルールにより、1 つの Amazon EKS ノードでスケジュールできる CockroachDB ポッドは 1 つだけです。CockroachDB ポッドの数が使用可能な Amazon EKS ノードの数を超える場合、CockroachDB ポッドは保留中状態になる可能性があります。この場合、theAmazon EKS ノードが自動的にスケーリングされるように、Cluster Autoscaler または Karpenter を実装する必要があります。詳細については、「Karpenter と Cluster Autoscaler を使用してクラスターコンピューティングをスケールする」を参照してください。

  2. 次のコマンドを入力して、Kubernetes ワーカーノードにnode=cockroachdbラベルがあるかどうかを確認します。

    kubectl get nodes --show-labels

    そうでない場合は、すべてのワーカーノードに正しいラベルが付けられていることを確認する必要があります。詳細については、Amazon EKS ドキュメントの「ノードグループ設定の編集」を参照してください。

関連リソース

アタッチメント

このドキュメントに関連する追加コンテンツにアクセスするには、次のファイルを解凍してください。「attachment.zip