CloudNativePG 1.30.0
日本語訳|CloudNativePG 1.30.0
※GoogleのAutoML Translationを使用して翻訳しております。
![]() |
![]() |
英語原文|CloudNativePG 1.30.0
![]() |
![]() |
概要
1. CNPGとは?
CloudNativePG(CNPG)は、サポートされているKubernetesクラスター上でPostgreSQLのワークロードを管理するために設計された、オープンソースのオペレーターです。分散トポロジー(Distributed Topology)機能により、プライベート、パブリック、ハイブリッド、マルチクラウド環境においてシームレスなデプロイを可能にし、クラウド中立性を実現します。DevOpsの原則に基づいて構築されており、宣言的な設定と不変(Immutable)インフラストラクチャに焦点を当て、データベース管理タスクを自動化します。
2. CNPGの仕組み
CNPGは、標準的なKubernetesの StatefulSet に依存するのではなく、データベースのオーケストレーション専用に設計されたカスタムコントローラーを実装することによって、PostgreSQLデータベースを管理します。
- Cluster リソース: CNPGは、ClusterというカスタムKubernetesリソースを導入しています。一般的なクラスター構成は、単一のプライマリインスタンス(書き込み処理を担当)と、オプションのレプリカインスタンス(高可用性と参照スケールのために使用)で構成されます。
- アプリケーションレベルのレプリケーション: ストレージレベルのレプリケーションを使用するのではなく、PostgreSQLネイティブの物理レプリケーションおよびストリーミングレプリケーション機能を利用して、インスタンス間で状態を同期します。
- 直接的なPVC管理: StatefulSetを使用せず、CNPGは PersistentVolumeClaim(PVC)を直接作成・管理します。このカスタム手法により、ローリングアップデートの実行、ボリュームのサイズ変更、あるいは異なるノード上でのインスタンス再作成などにおいて、より高い柔軟性が得られます。
- 自動化されたオーケストレーション: オペレーターは、フェイルオーバー、スイッチオーバー、Podの再作成、およびネイティブなKubernetesサービス(参照・更新用および参照専用のエンドポイントなど)を介したアプリケーションのルーティングを、透過的に処理します。
3. CNPGのメリット
- 自動化された高可用性と自己修復: PatroniやStolonといった外部のクラスター管理ツールを必要とせず、フェイルオーバーやスタンバイの再作成を自動化します。
- クラウド中立性: 「分散トポロジー」機能により、複数のKubernetesクラスターやリージョンにまたがるデータベースアーキテクチャの構築が可能です。
- Infrastructure as Code (IaC): ユーザーは、PostgreSQLの設定、データベース、ユーザー、拡張機能(Extension)、テーブル領域(Tablespace)などを、Kubernetesマニフェスト内で宣言的に定義できます。
- 柔軟なストレージ管理: ローカル永続ボリューム、Write-Ahead Log (WAL) 用の独立したボリューム、およびオンラインボリュームリサイズ(ストレージクラスがサポートしている場合)をネイティブにサポートしています。
- デフォルトでのセキュリティ確保: コンテナを非rootユーザーで実行し、読み取り専用のルートファイルシステム、ストリーミングレプリケーション用のTLS証明書認証、および組み込みのセキュリティコンテキストを適用します。
- ネイティブな接続プーリング: 初期状態で提供されるPgBouncerとの統合により、Webアプリケーションにおける接続プーリングとスケーリングを簡素化します。
4. バージョン1.30.0の新機能
バージョン1.30.0では、いくつかの新機能、セキュリティ強化、および改善が導入されています。
主な機能と機能強化
- 安全なプライマリ選出のためのプライマリ「Lease」(リース): プライマリの昇格時にミューテックスとして機能するKubernetes of Leaseオブジェクトが導入され、いかなる時点においても最大1つのインスタンスのみが自身をプライマリに昇格できるように制御します。
- DatabaseRole カスタムリソース定義(CRD): ユーザーは、PostgreSQLのデータベースロールを Cluster の仕様にインラインで定義する代わりに、独自のライフサイクルを持つ独立したKubernetesオブジェクトとして管理できるようになりました。
- 宣言的ロールのためのTLSクライアント証明書: DatabaseRoleにおいて、オペレーターが自動的にTLSクライアント証明書を生成・更新し、暗号化キーをSecretに保存できるようになりました。これにより、パスワードを介さない証明書認証(cert authentication)が可能になります。
- イメージカタログを介したPgBouncerイメージ管理: Poolerリソースが spec.pgbouncer.imageCatalogRef を介して ImageCatalog または ClusterImageCatalog を参照し、PgBouncerのイメージを中央管理できるようになりました。
- インプレース・メジャーアップグレードの強化: Image Volume拡張機能を使用するクラスターにおいて、PostgreSQL 19以降へのインプレース(in-place)での pg_upgrade メジャーアップグレードが有効になりました。
- プラットフォームとデータベースの更新: Kubernetes 1.36のサポートが追加され、デフォルトのPostgreSQLバージョンが18.4に更新されました。
セキュリティの強化
- オペレーター側でのパスワードエンコード(CVE-2026-55765): パスワードがログなどにクリアテキストのまま露出するのを防ぐため、オペレーターがPostgreSQLに送信する前に、クライアント側(オペレーター側)でSCRAM-SHA-256を用いてパスワードをハッシュ化するようになりました。
- search_pathの固定(CVE-2026-55769): 権限昇格のリスクを軽減するため、オペレーターがPostgreSQLに対して開くすべての接続において、GUC(設定パラメータ)の search_path を pg_catalog, public, pg_temp に明示的に固定するようになりました。
- オペレーターとインスタンス間の認証(GHSA-7qwx-x8ff-3px9): インスタンスマネージャーの機密性の高いエンドポイントへの呼び出しを認証するため、メモリ上にECDSA P-256クライアント証明書を生成し、ネットワーク分離のみに依存しないセキュアな設計に強化されました。





