EDB Postgres AI for CloudNativePG™ Cluster(旧EDB Postgres for Kubernetes)1.30.0

日本語訳|EDB CloudNativePG Cluster 1.30.0

※GoogleのAutoML Translationを使用して翻訳しております。

英語原文|EDB CloudNativePG Cluster 1.30.0

概要

1. EDB CloudNativePG Cluster (cnpg-cluster) とは
EDB Postgres AI for CloudNativePG Cluster は、EnterpriseDB(EDB)社が開発およびサポートを提供するエンタープライズ向けのKubernetesオペレーターです。

  • オープンソースの CloudNativePG™ をベースにしたフォークであり、KubernetesおよびRed Hat OpenShift環境において高可用性PostgreSQLデータベースクラスタのライフサイクル全体をネイティブに管理します。
  • PostgreSQLネイティブのストリーミングレプリケーションを活用した「プライマリ/スタンバイ(Primary/Standby)」アーキテクチャを採用しています。
  • アップストリームのオープンソース版(postgresql.cnpg.io/v1)とは異なり、カスタムリソースのAPIグループとして postgresql.k8s.enterprisedb.io/v1 を使用します。

2. cnpg-cluster の仕組みとメリット

仕組み(アーキテクチャ):

  • カスタムPodコントローラー(StatefulSet不使用): 汎用的なKubernetesの StatefulSet に頼らず、PodおよびPVCを直接管理する独自のコントローラーを実装しています。これにより、ロール(プライマリ/レプリカ)を意識したフェイルオーバー、個別のPVCリサイズ、WALやテーブルスペース用の独立したPVCの適切な制御など、データベースに最適化された運用が可能です。
  • 内蔵型インスタンスマネージャー(Instance Manager): 各Pod内にオペレーター実行可能ファイル(PID 1として動作する /controller/manager)を注入します。PatroniやStolonなどの外部デーモンツールを使わずに、PostgreSQLのライフサイクル管理、シグナル処理、プローブ(/startupz, /healthz, /readyz)、TLS証明書認証、メトリクス監視を行います。
  • 宣言型アーキテクチャ: Kubernetesのカスタムリソース(Cluster, Database, DatabaseRole, Pooler, Publication, Subscription, ScheduledBackup, Backup)を用いてすべて宣言的に設定・管理されます。
  • 高可用性と合意形成:
    • ネイティブの物理ストリーミングレプリケーション(同期/非同期)を使用。
    • Kubernetesの Lease オブジェクトをミューテックスとして使用した安全なプライマリ昇格制御、およびオプションのクォーラムベース・フェイルオーバー($R + W > N$)による高可用性を実現。
    • プライマリ分離チェックと pg_rewind により、スプリットブレインを防止。
  • 専用のKubernetesサービス連携: 以下のサービスを自動プロビジョニングし、トラフィックを適切にルーティングします。
    • -rw: 読み書き用(アクティブなプライマリにルーティング)
    • -ro: 読み取り専用(ホットスタンバイレプリカ間でラウンドロビン)
    • -r: 読み取り用(クラスタ内の全インスタンスへ分散)

メリット:

  • 自動化されたライフサイクル管理: ダウンタイムゼロまたは最小限のローリングアップデート、自動スイッチオーバー、柔軟なスケールアップ/ダウン、レプリカの自動再作成。
  • エンタープライズ向けDR(災害復旧)とバックアップ: 継続的な物理バックアップ、PITR(ポイントインタイムリカバリ)、CSI経由のボリュームスナップショット、オブジェクトストレージ(AWS S3、Azure Blob、GCS)またはCNPG-IプラグインによるWALアーカイブに対応。
  • ネイティブなコネクションプーリング: Pooler リソースを通じたPgBouncerの組み込み宣言型サポート。
  • 高度な可観測性(オブザーバビリティ): 標準出力へのJSON形式ログ出力、ポート9187でのPrometheusメトリクス公開(オペレーター用はポート8080)、標準Grafanaダッシュボード、pprof プロファイリング連携。

3. オープンソース版CloudNativePGに対する優位点・メリット
オープンソース版(OSS)のCloudNativePGのコア機能に加え、EDB版ではエンタープライズ向けの商用機能が多数提供されています。

  • エンタープライズワークロードのサポート(EPASおよびPGE):
    • コミュニティ版PostgreSQLに加え、EDB Postgres Advanced Server(EPAS) および EDB Postgres Extended(PGE) をサポート。
    • EPASによる Oracle互換機能 を利用可能。
  • 透過的データ暗号化(TDE: Transparent Data Encryption):
    • ディスク上の保存データ(Data-at-Rest)を暗号化(パスフレーズシークレット、カスタムwrap/unwrapコマンド、HashiCorp Vault / OpenBaoとのネイティブ連携に対応)。
  • プラットフォームおよびアーキテクチャの対応範囲:
    • linux/amd64, linux/arm64 に加え、OpenShift上の IBM Power (linux/ppc64le) および IBM Z / LinuxONE (linux/s390x) をサポートおよび認定。
    • Red Hat OpenShiftとの高度な統合(認定オペレーター、OLMカタログ、restricted-v2 SCC準拠)。
  • 長期サポート(LTS: Long Term Support):
    • 毎年LTSバージョン(例: 1.28)をリリースし、標準の6ヶ月に加えて12ヶ月延長された計18ヶ月間のサポートを提供。長期運用における安定性を確保。
  • 高度なセキュリティと監査:
    • PGAuditに加えて EDB Audit をネイティブサポートし、構造化JSONログとして出力可能。
    • 米国国防総省の Iron Bank(Platform One)による強化済み(Hardened)コンテナイメージの提供。
  • サードパーティ製バックアップツール連携:
    • External Backup Adapterを介した、Kasten K10、Velero、および OpenShift API for Data Protection (OADP) によるコールドバックアップ/リストアの統合。

4. バージョン 1.30.0 の新機能・変更点
新機能:

  • 安全なプライマリ選出のための Lease オブジェクト導入: Kubernetesの Lease オブジェクト(.spec.primaryLease で設定可能)をミューテックスとして使用し、昇格処理を直列化。WALアーカイブ完了前の誤った早期昇格を防ぎます。
  • 宣言型ロール管理用 DatabaseRole CRD: PostgreSQLロールを単一のKubernetesオブジェクトとして管理できるスタンドアロンCRDを導入。GitOps運用に最適化され、削除時の動作を指定するリクレイムポリシー(databaseRoleReclaimPolicy: retain|delete)も備えています。
  • 宣言型ロール向けTLSクライアント証明書生成: DatabaseRole に clientCertificate ブロックを追加することで、クラスタのクライアントCAによって署名されたTLSクライアント証明書をSecretとして自動生成・更新可能に(パスワード不要の証明書認証を実現)。
  • イメージカタログによるPgBouncerイメージ管理: Pooler リソースの spec.pgbouncer.imageCatalogRef を通じて ImageCatalog や ClusterImageCatalog を参照可能になり、PgBouncerイメージの一元管理・自動ローリングアップデートが可能になりました。

主な改善点:

  • Image Volume拡張機能使用時のインプレース pg_upgrade: PostgreSQL 19以降において、旧バージョンと新バージョンの拡張機能イメージを並行マウントすることで、Image Volume拡張を使用するクラスタでの pg_upgrade に対応。
  • Pooler メトリクスエンドポイントのTLS対応: .spec.monitoring.tls.enabled により、PgBouncerのメトリクスをHTTPS経由で安全に配信(証明書ローテーションにも対応)。
  • スケールサブリソースのラベルセレクター追加: Cluster のスケールサブリソースに status.selector を追加し、VPA(Vertical Pod Autoscaler)やHPAの有効な targetRef として指定可能に。
  • 複数オペレーターの共存サポート: ENABLE_WEBHOOK_NAMESPACE_SUFFIX フラグを追加し、Webhook設定名に名前空間サフィックスを付与することで同一クラスタ内での複数オペレーター共存を可能に。
  • CNPG-i プラグインの自動リロード: プラグインのServiceを支える EndpointSlices を監視し、プラグインのPod更新時にクラスタへ即座に反映。
  • インスタンスシリアル番号の再利用: ノードのドレイン等でPod/PVCを再作成する際、グローバルカウンターを無制限に加算するのではなく、空いている最小のシリアル番号を再利用して名前の安定性を向上。
  • リコンサイル時のバリデーションフォールバック: アドミッションWebhookが利用できない場合でも、リコンサイル処理の中でデフォルト値の適用や検証を実施。

セキュリティ修正:

  • search_path の固定: オペレーターが発行する接続において search_path = pg_catalog, public, pg_temp を強制固定。オーバーロードされた関数等を用いた特権昇格やCWE-426(RCE)の脆弱性を修正。
  • オペレーター・インスタンスマネージャー間通信の認証: ポート8000の機密エンドポイント(バックアップ、アップグレード等)へのアクセスに対し、インメモリECDSA P-256クライアント証明書のフィンガープリント検証を導入。
  • オペレーター側でのSCRAM-SHA-256暗号化: basic-auth Secret内の平文パスワードをオペレーター側で事前にハッシュ化してからPostgreSQLに送信することで、pg_stat_statements やログへの平文パスワード漏洩を防止。

その他の主な変更:

  • Kubernetes 1.36 のサポート追加。
  • デフォルトのPostgreSQLバージョンを 18.4 に更新。
  • 組み込み(in-tree)Barman Cloud機能の完全削除予定をバージョン 1.31.0 に延期(Barman Cloud Pluginへの移行を推奨)。
  • Database, Pooler, Publication, Subscription, ScheduledBackup におけるクラスタ参照フィールドをイミュータブル(変更不可)化。