【製品情報】CloudNativePG 1.27.0

音声ガイド

1. CloudNativePG (CNPG) とは何か?
CloudNativePG (CNPG) は、あらゆるKubernetesクラスタ上でPostgreSQLワークロードのライフサイクル全体を管理するために設計された、オープンソースのKubernetesオペレーターです。これはCNCF(Cloud Native Computing Foundation)のサンドボックスプロジェクトです。

CNPGの中核は、Kubernetes APIをカスタムリソース(特にClusterリソース)で拡張することです。これにより、書き込み用の単一プライマリインスタンスと、高可用性および読み取りスケーリング用の複数のレプリカで構成される完全なPostgreSQLクラスタを、他のKubernetesオブジェクトと同様に宣言的なYAMLマニフェストを使用して定義・管理できます。CNPGは、宣言的な設定と不変(イミュータブル)なインフラストラクチャを重視するDevOpsの原則に基づいて構築されており、データベース管理の信頼性と自動化を実現します。

2. CNPGのメリット(特にKubernetes環境において)
CNPGは、PostgreSQLをKubernetesエコシステムのファーストクラスシチズン(主要な構成要素)とすることを目指しており、クラウドネイティブアプリケーションの動的でステートレスな性質と、本番データベースに求められるステートフルで回復力のある要件との間のギャップを埋めます。

Kubernetes環境における主なメリットは以下の通りです。

  • 自動化された高可用性と自己修復: CNPGは外部ツールに頼らず、Kubernetes APIと直接統合してデータベースのライフサイクルを管理します。プライマリインスタンスに障害が発生した場合、最新のレプリカを昇格させるフェイルオーバーを自動的に処理し、障害が発生したレプリカを再作成してクラスタの規模を維持します。
  • 宣言的な管理: ユーザーはデータベースを手動で設定する代わりに、YAMLファイルに望ましい状態(例:3インスタンス、特定のPostgreSQL設定、バックアップポリシーなど)を定義します。CNPGオペレーターは、実際の状態がこの宣言と一致するように継続的に動作します。この管理は、ロール、ユーザー、データベース、さらには拡張機能にまで及びます。
  • ライフサイクル運用の簡素化:
    • バックアップとリカバリ: オブジェクトストア(S3など)やボリュームスナップショットとの統合を通じて、災害復旧(DR)をネイティブにサポートします。完全リカバリおよびポイントインタイムリカバリ(PITR)が可能です。
    • アップグレード: PostgreSQLのマイナーバージョンアップを、最小限のダウンタイムでシームレスにローリングアップデートで管理します。また、オフラインでのインプレース・メジャーバージョンアップもサポートします。
  • Kubernetesとの緊密な統合:
    • ネイティブサービス: フェイルオーバー後でもアプリケーションが確実に接続できるよう、正しいPodを指すKubernetesサービス(-rw for read-write, -ro for read-only)を自動的に作成・管理します。
    • kubectlプラグイン: kubectl用のcnpgプラグインを提供し、ステータス確認、レプリカの昇格、証明書の発行、バックアップ要求などの一般的な管理タスクを簡素化します。
    • 柔軟なストレージ: カスタムコントローラーを使用して永続ボリューム要求(PVC)を直接管理します。これにより、標準的なStatefulSetの制限であるPVCのリサイズなどの高度な操作が可能になります。
  • 組み込みの可観測性(オブザーバビリティ): Prometheus互換のメトリクスエクスポーターが付属しており、標準的なクラウドネイティブの監視・アラートスタックへ容易に統合できます。また、即時可視化のための設定済みGrafanaダッシュボードも提供します。

3. 補足:現代のIT環境におけるKubernetesのメリット
CNPGドキュメントは、Kubernetesが持つ本質的な強みをどのように活用しているかを強調しています。現代のITにおけるKubernetesの基本的なメリットは以下の通りです。

  • インフラストラクチャの抽象化とポータビリティ: Kubernetesは、プライベートデータセンター、パブリッククラウド(AWS、GCP、Azure)、ハイブリッド/マルチクラウドなど、多様な環境でアプリケーションを実行するための一貫したプラットフォームを提供します。CNPGはこれを活用し、クラウドニュートラルなデータベース展開を可能にします。
  • 自動化とオーケストレーション: Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化します。Podのスケジューリングやネットワーキングといった低レベルのタスクを処理するため、CNPGのようなオペレーターはアプリケーション固有のロジックに集中できます。
  • 回復力と自己修復: Kubernetesは本質的に回復力があるように設計されています。障害が発生したPodを自動的に再起動し、健全なノードに再スケジュールすることができます。CNPGは、この堅牢な基盤の上に高度なデータベースフェイルオーバー機能を構築しています。
  • スケーラビリティ: Kubernetesでは、レプリカの数を増減させることでアプリケーションを簡単にスケールできます。CNPGはこの概念を賢く適用し、ユーザーがClusterマニフェストを少し変更するだけで読み取りレプリカをスケールアップ/ダウンできるようにします。
  • 宣言的な設定(Infrastructure as Code): CNPGを介してデータベースを含むアプリケーションスタック全体をバージョン管理されたマニフェストファイルで定義できるため、GitOpsの実践が可能になり、デプロイの再現性が高く、透明で、エラーが発生しにくくなります。

4. これらのメリットを実現するために、CNPGはどのように動作するのか?
CNPGは、Kubernetes内でオペレーターパターンを実装することで機能します。以下の主要コンポーネントを通じてPostgreSQLを管理する独自のロジックを導入しています。

  • オペレーター: クラスタ内で実行される中央コントローラーです。CNPGのカスタムリソース(Cluster、Backupなど)を監視します。Clusterリソースが作成または変更されると、オペレーターの**調整ループ(reconciliation loop)**がトリガーされます。YAML内の望ましい状態とクラスタの実際の状態を比較し、それらを一致させるためにKubernetesオブジェクト(Pod、Service、Secretなど)を作成、変更、または削除します。
  • カスタムリソース定義(CRDs): Cluster、Pooler、Backup、ScheduledBackupなど、独自のKubernetesオブジェクトを定義します。これにより、ユーザーが対話するための宣言的なAPIが提供されます。
  • インスタンスマネージャー: Patroniのような外部ツールに依存する代わりに、CNPGは各PostgreSQL Pod内に軽量なコントローラーであるインスタンスマネージャーを注入します。これはコンテナ内のPID 1として実行され、以下の役割を担います。
    • PostgreSQLサーバープロセスのライフサイクルを管理する。
    • Kubernetesプローブ(startup, liveness, readiness)に応答してインスタンスの健全性を報告する。
    • 中央オペレーターからのコマンド(例:「プライマリに昇格」、「新しいプライマリを追跡」)を実行する。
  • カスタムPodコントローラー: 多くのステートフルオペレーターとは異なり、CNPGはStatefulSetを使用しません。代わりに、Podとそれに関連するPVCを直接管理する独自のPodコントローラーを実装しています。これにより、以下のような柔軟性が得られます。
    • ストレージクラスが許せばPVCをリサイズする。
    • アップグレード戦略に合わせてプライマリPodとレプリカPodを区別する。
    • データ(PGDATA)とWALファイルに別々のボリュームを使用する場合のストレージの一貫性を賢く管理する。
  • サービス管理: フェイルオーバーが発生すると、オペレーターは即座にKubernetes Serviceオブジェクト(例:cluster-example-rw)を更新し、そのエンドポイントが新しく昇格したプライマリPodを指すようにします。これにより、常に安定したサービスエンドポイントに接続しているアプリケーションからは、この変更が透過的に見えます。

5. バージョン1.27.0の主な新機能
リリース1.27.0(2025年8月12日付け)では、拡張性、高可用性、セキュリティに焦点を当てたいくつかの重要な機能と機能強化が導入されています。

  • 重要な変更点 – Liveness Probeの挙動: デフォルトの挙動が更新されました。分離されたプライマリは、設定されたタイムアウト(デフォルト30秒)内に強制的にシャットダウンされるようになり、ネットワーク分断や「スプリットブレイン」シナリオの対処が改善されました。
  • 主な新機能:
    • PostgreSQL拡張機能の動的読み込み: 別々のコンテナイメージとしてパッケージ化されたPostgreSQL拡張機能を、インスタンスPod内に直接マウントできるようになりました。これにより、ベースのPostgreSQLイメージを再構築することなく拡張機能を追加でき、モジュール性とセキュリティが向上します。
    • 論理デコーディングスロットの同期: この機能を有効にすることで、高可用性クラスタ全体で論理レプリケーションスロットが自動的に同期され、パブリッシャーのフェイルオーバー後も論理レプリケーションのサブスクライバー(CDCツールなど)がシームレスに動作を継続できます。
    • プライマリ分離チェックの安定化: ネットワーク分断などのプライマリ接続問題を検出・処理するための実験的機能が安定版となり、デフォルトで有効になりました。
  • 主な機能強化:
    • 実験的なクォーラムベースのフェイルオーバー: フェイルオーバーを許可する前にレプリカのクォーラム(定足数)が利用可能であることを確認することで、データの耐久性を向上させるオプトイン機能です。
    • プラグインベースアーキテクチャ(CNPG-I)の改善: Postgresインターフェースのサポートやインスタンスウェブサーバーのメトリクス機能が追加され、プラグインベースへの移行が継続されています。
    • ユーザーシークレットの簡素化: ユーザーシークレットにfqdn-uriとfqdn-jdbc-uriフィールドが追加され、完全修飾ドメイン名ベースの接続文字列の生成が容易になりました。

日本語マニュアルを見る
※ 日本語マニュアルの閲覧には ユーザー登録(パスワード)が必要です。