【製品情報】CloudNativePG 1.28.0

音声ガイド

概要

1. CloudNativePGとは?
CloudNativePG (CNPG) は、サポートされているあらゆるKubernetesクラスター(プライベート、パブリック、ハイブリッド、マルチクラウド)上で、PostgreSQLワークロードのライフサイクル全体を管理するために設計されたオープンソースのKubernetesオペレーターです。

もともとはEDB社によって構築されましたが、現在はCloud Native Computing Foundation (CNCF) のサンドボックスプロジェクトとなっています。フェイルオーバー管理のために外部ツール(Patroniなど)や標準的なKubernetesのStatefulSetに依存する従来の手法とは異なり、CloudNativePGはカスタムリソース(Kind: Cluster)を定義し、カスタムコントローラーを使用してKubernetes内でネイティブにPostgreSQLインスタンスをオーケストレーション(統合管理)します。

2. CloudNativePGのメリット

  • 高可用性 (HA): 外部の管理ツールを必要とせず、自動フェイルオーバーおよびスイッチオーバー機能を提供します。
  • 自己修復 (Self-Healing): 障害が発生したレプリカを自動的に再作成し、プライマリに障害が発生した場合は最新のスタンバイを昇格させます。
  • クラウド中立性: 「分散トポロジー(Distributed Topology)」機能により、様々なKubernetes環境(EKS, AKS, GKE, OpenShift, ベアメタル)で動作します。
  • 宣言的設定: ユーザー、ロール、データベース、拡張機能などを含め、Infrastructure as Code (IaC) を通じてデータベースを管理できます。
  • データの信頼性: ポイントインタイムリカバリ (PITR) や、オブジェクトストレージへのWALアーカイブまたはボリュームスナップショットによる継続的なバックアップをサポートします。
  • スケーラビリティ: レプリカのスケールアップ/ダウンをサポートし、管理されたKubernetes Serviceを通じて、読み取り/書き込み(Read/Write)トラフィックと読み取り専用(Read-Only)トラフィックを分離します。
  • セキュリティ: ネイティブなTLSサポート(クライアント/サーバー)、cert-managerとの統合、パスワードおよび証明書のローテーション機能を備えています。

3. メリットを実現するための仕組み
CloudNativePGは、標準的なStatefulSetではなくカスタム Pod コントローラーを使用することで、データベースのライフサイクル対してよりきめ細かな制御を実現しています。

  • インスタンスマネージャー: オペレーターは、すべてのPostgreSQL PodにGo言語ベースの「インスタンスマネージャー」(PID 1) を注入します。このマネージャーは、データベースの起動、ライフサイクル、プローブ(監視)を処理し、Kubernetes APIサーバーと直接通信してアクション(フェイルオーバーなど)の調整やステータスの報告を行います。
  • APIへの直接統合: クラスターの状態管理と調整においてKubernetes APIサーバーのみに依存するため、データベース専用の外部コンセンサスストア(etcdやConsulなど)が不要です。
  • ネイティブ・レプリケーション: PostgreSQL本来の物理ストリーミングレプリケーション(非同期または同期)の上にHA(高可用性)を構築しています。レプリケーションスロットを自動的に管理し、フェイルオーバー時のデータ整合性を保証します。
  • シェアードナッシング・アーキテクチャ: Persistent Volume Claims (PVC) を直接管理することで、ストレージのサイズ変更を可能にし、インスタンス間でストレージを共有しない構成をとることで耐障害性を高めています。
  • 役割の分離: トラフィックの種類ごとに異なるKubernetes Serviceを作成します。
    • -rw: プライマリに接続(読み取り・書き込み)
    • -ro: ホットスタンバイレプリカに接続(読み取り専用)
    • -r: 任意のインスタンスに接続(読み取り)

4. バージョン 1.28.0 の新機能
リリース1.28.0(2025年12月9日)では、いくつかの新機能と安定性の向上が導入されています。

  • クォーラムベース・フェイルオーバー (安定版): クォーラム(定足数)ベースのフェイルオーバー機能が安定版(Stable)に昇格しました。.spec.postgresql.synchronous.failoverQuorum で設定され、レプリカの過半数がデータの整合性を確認した場合にのみフェイルオーバーを実行するデータ駆動型のメカニズムです。
  • 宣言的な外部データラッパー (FDW) 管理: Database カスタムリソース定義 (CRD) 内の .spec.fdws および .spec.servers フィールドを使用して、拡張機能や外部サーバーを宣言的に管理できるようになりました。
  • 同時更新: restart(再起動)更新方式を使用する場合、コンテナイメージの更新とPostgreSQL設定の変更を同一操作内で行えるようになりました。
  • ネットワーク耐性の向上: レプリカのデフォルトの tcp_user_timeout が5秒に設定されました(以前は約127秒)。これにより、レプリカはネットワーク障害を検知し、プライマリへの再接続をより迅速に行えるようになります。
  • セキュリティコンテキストの強化: コンテナレベルでのセキュリティコンテキストのきめ細かい制御 (containerSecurityContext) が導入され、postgres、init、サイドカーコンテナごとに個別の設定が可能になりました。
  • 回復不能 Pod アノテーション: alpha.cnpg.io/unrecoverable=true アノテーションが導入されました。これを付与すると、オペレーターは対象のPodとPVCを完全に削除し、レプリカをゼロから再作成します(ストレージ破損のシナリオなどで有用)。
  • バージョン更新: デフォルトのPostgreSQLバージョンが 18.1 に、デフォルトのPgBouncerバージョンが 1.25.1 に更新されました。

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