翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PGO を使用して Amazon EKS での PostgreSQL デプロイを合理化する
Shalaka Dengale (Amazon Web Services)
概要
このパターンは、Crunchy Data の Postgres オペレーター (PGO) を Amazon Elastic Kubernetes Service (Amazon EKS) と統合して、クラウドネイティブ環境での PostgreSQL デプロイを合理化します。PGO は、Kubernetes で PostgreSQL データベースを管理するための自動化とスケーラビリティを提供します。PGO を Amazon EKS と組み合わせると、PostgreSQL データベースを効率的にデプロイ、管理、スケーリングするための堅牢なプラットフォームが形成されます。
この統合には、次のような主な利点があります。
自動デプロイ: PostgreSQL クラスターのデプロイと管理を簡素化します。
カスタムリソース定義 (CRD): PostgreSQL 管理に Kubernetes プリミティブを使用します。
高可用性: 自動フェイルオーバーと同期レプリケーションをサポートします。
自動バックアップと復元: バックアップと復元プロセスを合理化します。
水平スケーリング: PostgreSQL クラスターの動的スケーリングを有効にします。
バージョンアップグレード: 最小限のダウンタイムでローリングアップグレードできるようにします。
セキュリティ: 暗号化、アクセスコントロール、認証メカニズムを適用します。
前提条件と制限
前提条件
アクティブ AWS アカウント。
Linux、macOS または Windows にインストールして設定されている「AWS Command Line Interface (AWS CLI) バージョン 2」。
コマンドラインから AWS リソースを接続する AWS CLI Config。
Linux、macOS、または Windows にインストールして設定されている eksctl
。 kubectl、Amazon EKS クラスターのリソースにアクセスするようにインストールおよび設定されています。詳細については、Amazon EKS ドキュメントの「kubectl と eksctl のセットアップ」を参照してください。Amazon EKS クラスターにアクセスするように設定されたコンピュータのターミナル。詳細については、「Amazon EKS ドキュメント」の「クラスターと通信するようにコンピュータを設定する」を参照してください。
製品バージョン
Kubernetes バージョン 1.21~1.24 以降 (PGO のドキュメント
を参照してください)。 PostgreSQL バージョン 10 以降。このパターンでは、PostgreSQL バージョン 16 を使用します。
制限事項
一部の AWS のサービス は、すべてで利用できるわけではありません AWS リージョン。利用可能なリージョンについては、「AWS のサービス (リージョン別)
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」ページを参照して、サービスのリンクを選択します。
アーキテクチャ
ターゲットテクノロジースタック
Amazon EKS
Amazon Virtual Private Cloud (Amazon VPC)
Amazon Elastic Compute Cloud (Amazon EC2)
ターゲット アーキテクチャ

このパターンでは、3 つのノードがある Amazon EKS クラスターを含むアーキテクチャを構築します。各ノードは、バックエンドの一連の EC2 インスタンス上で実行されます。この PostgreSQL セットアップはプライマリレプリカアーキテクチャに準拠しており、読み取り負荷の高いユースケースに特に効果的です。アーキテクチャには、以下のコンポーネントが含まれます。
プライマリデータベースコンテナ (pg-primary): すべての書き込み操作を指示するメインの PostgreSQL インスタンスをホストします。
セカンダリレプリカコンテナ (pg-replica): プライマリデータベースからデータをレプリケートし、読み取り操作を処理する PostgreSQL インスタンスをホストします。
PgBouncer: PGO に含まれている PostgreSQL データベース用の軽量接続プーラーです。これはクライアントと PostgreSQL サーバーの間に位置し、データベース接続の中継役として機能します。
PGO: この Kubernetes 環境で PostgreSQL クラスターのデプロイと管理を自動化します。
Patroni: PostgreSQL の高可用性設定を管理および自動化するオープンソースツールです。PGO に含まれています。Kubernetes で PGO とともに Patroni を使用すると、PostgreSQL クラスターのレジリエンスと耐障害性を確保する上で重要な役割を果たします。詳細については、Patroni のドキュメント
を参照してください。
ワークフローのステップは次のとおりです。
PGO オペレーターのデプロイ: Amazon EKS で実行される Kubernetes クラスターに PGO オペレーターをデプロイします。これは、Kubernetes マニフェストまたは Helm チャートを使用して実行できます。このパターンでは、Kubernetes マニフェストを使用します。
PostgreSQL インスタンスの定義: オペレーターが実行されたら、カスタムリソース (CR) を作成して、PostgreSQL インスタンスの目的の状態を指定します。これには、ストレージ、レプリケーション、高可用性設定などの設定が含まれます。
オペレーター管理: CR などの Kubernetes API オブジェクトを通じてオペレーターをやり取りし、PostgreSQL インスタンスを作成、更新、または削除します。
モニタリングとメンテナンス: Amazon EKS で実行されている PostgreSQL インスタンスの状態とパフォーマンスをモニタリングできます。多くの場合、オペレーターはモニタリングのためにメトリクスとログ記録を提供します。必要に応じて、アップグレードやパッチ適用などの定期的なメンテナンスタスクを実行できます。詳細については、Amazon EKS ドキュメントの「クラスターのパフォーマンスをモニタリングし、ログを表示する」を参照してください。
スケーリングとバックアップ: オペレーターが提供する機能を使用して、PostgreSQL インスタンスをスケーリングし、バックアップを管理できます。
このパターンでは、モニタリング、メンテナンス、およびバックアップ操作については説明しません。
自動化とスケール
を使用して CloudFormation インフラストラクチャの作成を自動化できます。詳細については、Amazon EKS ドキュメントの「CloudFormationを使用して Amazon EKS リソースを作成する」を参照してください。
GitVersion または Jenkins のビルド番号を使用して、データベースインスタンスのデプロイを自動化できます。
ツール
AWS のサービス
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
AWS Command Line Interface (AWS CLI) は、コマンドラインシェルのコマンド AWS のサービス を通じて を操作するのに役立つオープンソースツールです。
その他のツール
ベストプラクティス
スムーズで効率的なデプロイを確実に行うには、次のベストプラクティスに従ってください。
EKS クラスターを保護します。サービスアカウント (IRSA)、ネットワークポリシー、VPC セキュリティグループの AWS Identity and Access Management (IAM) ロールの使用など、EKS クラスターのセキュリティのベストプラクティスを実装します。EKS クラスター API サーバーへのアクセスを制限し、TLS を使用してノードと API サーバー間の通信を暗号化します。
Amazon EKS で実行されている PGO と Kubernetes のバージョン互換性を確保します。一部の PGO 機能では、特定の Kubernetes バージョンが要求される場合や、互換性の制限が生じる場合があります。詳細については、PGO ドキュメントの「Components and Compatibility
」を参照してください。 CPU、メモリ、ストレージなど、PGO デプロイのリソース割り当てを計画します。PGO とそれが管理する PostgreSQL インスタンスの両方のリソース要件を考慮してください。リソースの使用状況をモニタリングし、必要に応じてリソースをスケーリングします。
高可用性を実現するように設計します。高可用性を実現するように PGO デプロイを設計し、ダウンタイムを最小限に抑え、信頼性を確保します。複数のアベイラビリティーゾーンに複数の PGO レプリカをデプロイして、耐障害性を確保します。
PGO が管理する PostgreSQL データベースのバックアップおよび復元手順を適用します。Kubernetes および Amazon EKS と互換性がある PGO またはサードパーティーのバックアップソリューションが提供する機能を使用します。
PGO デプロイのモニタリングとログ記録を設定し、パフォーマンス、状態、イベントを追跡します。メトリクスのモニタリングには Prometheus、視覚化には Grafana などのツールを使用します。トラブルシューティングと監査のために PGO ログを取得するようログ記録を設定します。
PGO、PostgreSQL インスタンス、Kubernetes クラスター内のその他のサービス間の通信を許可するようにネットワークを適切に設定します。ネットワークポリシーの適用とトラフィックの分離には、Amazon VPC ネットワーク機能と、Calico や Amazon VPC CNI
などの Kubernetes ネットワークプラグインを使用します。 パフォーマンス、耐久性、スケーラビリティなどの要素を考慮して、PostgreSQL データベースに適したストレージオプションを選択します。永続的ストレージには、Amazon Elastic Block Store (Amazon EBS) ボリュームまたは AWS マネージドストレージサービスを使用します。詳細については、Amazon EKS ドキュメントの「Amazon EBS で Kubernetes ボリュームを保存する」を参照してください。
などのInfrastructure as Code (IaC) ツールを使用して CloudFormation 、Amazon EKS での PGO のデプロイと設定を自動化します。EKS クラスター、ネットワーク、PGO リソースなどのインフラストラクチャコンポーネントを整合性、再現性、バージョン管理のためのコードとして定義します。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
IAM ロールを作成します。 |
| AWS 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Amazon EKS クラスターを作成します。 | 既にクラスターをデプロイしている場合は、このステップをスキップします。それ以外の場合は、 注記このパターンでは、Amazon EKS のノードグループとして Amazon EC2 を使用します。を使用する場合は AWS Fargate、eksctl ドキュメント
| AWS 管理者、Terraform または eksctl 管理者、Kubernetes 管理者 |
クラスターのステータスを検証します。 | 次のコマンドを実行して、クラスターのノードの現在のステータスを確認します。
エラーが発生した場合は、Amazon EKS ドキュメントのトラブルシューティングセクションを参照してください。 | AWS 管理者、Terraform または eksctl 管理者、Kubernetes 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
IAM OIDC プロバイダーを有効にします。 | Amazon EBS Container Storage Interface (CSI) ドライバーの前提条件として、クラスターに既存の IAM OpenID Connect (OIDC) プロバイダーが必要です。 次のコマンドを使用して、IAM OIDC プロバイダーを有効化します。
このステップの詳細については、Amazon EKS のドキュメントを参照してください。 | AWS 管理者 |
Amazon EBS CSI ドライバーの IAM ロールを作成します。 | 次の
暗号化された Amazon EBS ドライブを使用する場合は、ポリシーをさらに設定する必要があります。手順については、Amazon EBS SCI のドキュメント | AWS 管理者 |
Amazon EBS CSI ドライバーを追加します。 | 次の
| AWS 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
PGO リポジトリのクローンを作成します。 | PGO の GitHub リポジトリのクローンを作成します。
| AWS DevOps |
サービスアカウント作成のためにロールの詳細を指定します。 | Amazon EKS クラスターに必要な AWS リソースへのアクセスを許可するには、
| AWS 管理者、Kubernetes 管理者 |
名前空間と PGO の前提条件を作成します。 |
| Kunernetes 管理者 |
ポッドの作成を確認します。 | 名前空間とデフォルト設定が作成されていることを確認します。
| AWS 管理者、Kubernetes 管理者 |
PVC を確認します。 | 次のコマンドを使用して、永続ボリュームのクレーム (PVC) を確認します。
| AWS 管理者、Kubernetes 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
オペレーターを作成します。 |
これらの更新により、以下が実行されます。
| AWS 管理者、DBA、Kubernetes 管理者 |
オペレーターをデプロイします。 | PGO オペレーターをデプロイして、Kubernetes 環境での PostgreSQL データベースの効率的な管理とオペレーションを可能にします。
| AWS 管理者、DBA、Kubernetes 管理者 |
デプロイメントを確認する。 |
コマンド出力を確認し、プライマリレプリカ ( | AWS 管理者、DBA、Kubernetes 管理者 |
| タスク | 説明 | 必要なスキル |
|---|---|---|
プライマリレプリカにデータを書き込みます。 | 次のコマンドを使用して、PostgreSQL プライマリレプリカに接続し、データベースにデータを書き込みます。
| AWS 管理者、Kubernetes 管理者 |
リードレプリカに同じデータがあることを確認します。 | PostgreSQL リードレプリカに接続し、ストリーミングレプリケーションが正しく機能しているかどうかを確認します。
リードレプリカには、前のステップでプライマリレプリカで作成したテーブルが必要です。 | AWS 管理者、Kubernetes 管理者 |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
ポッドが起動しません。 |
|
レプリカがプライマリデータベースに対して大幅に遅延しています。 |
|
PostgreSQL クラスターのパフォーマンスと状態を可視化できません。 |
|
レプリケーションが機能しません。 |
|
関連リソース
Amazon Elastic Kubernetes Service (「AWS デプロイオプションの概要」ホワイトペーパー)
CloudFormation (「AWS デプロイオプションの概要」ホワイトペーパー)
Amazon EKS – eksctl の使用を開始する (Amazon EKS ユーザーガイド)
kubectl および eksctl のセットアップ (Amazon EKS ユーザーガイド)
OpenID Connect フェデレーション用のロールを作成する (IAM ユーザーガイド)
の設定 ( AWS CLIAWS CLI ユーザーガイド)