Release notes for CloudNativePG 1.30

CloudNativePGの1.30マイナーリリースのユーザーに表示される変更の履歴。

変更の完全なリストについては、 commits を参照してください。

GitHubのリリースブランチで。

バージョン1.30.0

発売日 2026年6月29日

重要な変更

  • ネイティブツリー内Barman Cloudサポートの非推奨通知を更新して、1.30.0ではなくCloudNativePG 1.31.0で削除されることを反映しています。ユーザーは引き続きBarman Cloudプラグインに移行することをお勧めします。 ( #11083 )

  • cluster 参照は、Database 、Pooler 、Publication 、Subscription 、およびScheduledBackup リソースで不変になりました。別のクラスターでこれらのオブジェクトのいずれかをポイントすることには、明確に定義されたセマンティクスがなく、以前はコントローラを一貫性のない状態のままにしました。更新は、CEL検証ルールを介してAPIサーバーで拒否されるようになりました。 ( #10743 )

機能

  • 安全なプライマリ選挙のためのプライマリ``Lease`` プライマリプロモーションをシリアル化するミューテックスとして機能するKubernetes Lease オブジェクトクラスターにちなんで命名されました。インスタンスマネージャーは、プライマリとして機能する前にリースを保持する必要があり、クリーンシャットダウン時にリリースする必要があるためレプリカは、完全なTTLを待たずに昇格できます。タイミングは、新しい.spec.primaryLease スタンザを介して構成できます。リースはプロモーションゲートであり、フェンスではありません。一次隔離は引き続きフェンシングを担当します。 #10627

  • 宣言的ロール管理のための``DatabaseRole`` CRD Cluster の.spec.managed.roles スタンザでインライン宣言するのではなく、スタンドアロンのKubernetesオブジェクトとしてPostgreSQLロールを管理するDatabaseRole カスタムリソースを導入しました。各ロールは、独自のライフサイクル、ステータス、およびRBACを取得します。これにより、GitOpsワークフローに適合し、ロール定義を所有するアプリケーションの横に存在します。仕様はインラインメソッドと同じRoleConfiguration 構造を再利用するため、ロールの移行は、スタンザを独自のマニフェストに移動することです。 databaseRoleReclaimPolicy フィールド retain 、デフォルト、またはdelete は、リソースが削除され、永続ボリュームをミラーリングしたときにロールに何が起こるかを制御します。 #6155

  • 宣言的ロールのTLSクライアント証明書 DatabaseRole にclientCertificate ブロックを含めて、クラスターのクライアントCAによって署名され、<databaserole-name>-client-cert シークレットに保存されるTLSクライアント証明書をオペレーターが自動的に生成および更新できるようになりました。これにより、パスワードなしのPostgreSQL cert 認証が有効になります。シークレットは、機能が無効になるか、DatabaseRole が削除されるとクリーンアップされます。 #10896

  • イメージカタログを介したPgBouncerイメージ管理 Pooler リソースは、新しいspec.pgbouncer.imageCatalogRef フィールドを介してImageCatalog またはClusterImageCatalog のエントリーを参照できるようになり、PgBouncerイメージ管理を一元化できます。カタログエントリが更新されると、参照しているすべてのPoolers が自動的にリコンサイルされ、仕様を変更せずに新しいイメージをロールアウトします。解決された画像はstatus.image でレポートされ、新しいstatus.phase active 、paused 、inactive 、またはfailed もkubectl get pooler のPhase 列として表示され、ライフサイクルを概要します。 #10568

機能強化

  • PostgreSQL 19のpg_upgrade に追加された拡張パスのサポートに基づいて、イメージボリューム拡張を使用するクラスターでPostgreSQL 19以降へのpg_upgrade インプレースメジャーアップグレードを有効にしました。アップグレード中にJob 、ソースおよびターゲットバージョンの拡張イメージはサイドバイサイドでマウントされるため、古いサーバーはライブラリを保持し、失敗したアップグレードはきれいに元に戻ります。 #10366 )

  • .spec.monitoring.tls.enabled を介してPooler メトリックエンドポイントのTLSサポートを追加しました。有効にすると、メトリックサーバーはHTTPSで提供され、.spec.pgbouncer.clientTLSSecret から証明書とキーを再利用し、ハンドシェイクのたびにリロードして、再起動なしのローテーションをサポートします。生成されたPodMonitor は、それに応じてhttps をスクレイピングします。 #10466

  • ラベルセレクターをCluster スケールサブリソースstatus.selector に追加し、Cluster を垂直ポッドオートスケーラーVPAおよび水平ポッドオートスケーラーHPAの有効なtargetRef にします。Cluster をインスタンスポッドにマッピングできるようになりました。 @sebv004による寄稿。 ( #8996 )

  • プライマリポッドがkubeletパースペクティブからReady であるが、オペレーターの/pg/status チェックが失敗し、フェイルオーバーが遅延される場合、オペレーターはCluster でWarning PrimaryStatusCheckFailed イベントを発行するようになり、ユーザーにkubectl describe cluster を介して遅延を可視化します。 ( #10509 )

  • ENABLE_WEBHOOK_NAMESPACE_SUFFIX フラグを追加しました。これは、オペレーターのWebhook構成名の後に-<OPERATOR_NAMESPACE> を付けて、複数のオペレーターインスタンスが同じクラスターに共存できるようにします。オペレーターはこれらの構成を検索するだけです。ユーザーはそれらを作成および保守する必要があります。 @maxlengdellによる寄稿。 ( #10420 )

  • オペレーターは、ポッドがロールされたときにCNPG-iプラグインを自動的にリロードするようになりました。EndpointSlices バッキングプラグインServices を監視し、新しいポッドがReady になるとプラグインを使用してすべてのクラスターを再エンキューするため、アップグレードされたプラグインは待機せずに選択されます次の再同期。 ( #10836 )

  • インスタンスのシリアル番号は、常にグローバルカウンターをインクリメントするのではなく、既存のインスタンス名の中で最も低い空きスロットを再利用することにより割り当てられるようになりました。ポッドとPVCの名前は、インスタンスが再作成されても安定したままであり、たとえば、ノードドレイン後に再作成されるインスタンスは同じ名前で戻ってきて、削除されたインスタンスによって解放されたシリアルは再利用されます。新しいInitialized クラスター条件は、クラスターが最初のブートストラップを完了したかどうかをレポートし、 status.latestGeneratedNode は非推奨です。それはもう書き込まれませんが、下位互換性のためにCRDに保存されます。 #10548

  • デフォルトと検証は、アドミッションWebhookが使用できない場合、または障害を無視するように構成された場合のフォールバックとして、調整中に実行されるようになったため、オペレーターは無効または不完全な仕様をリコンサイルしなくなりました。欠落しているデフォルトは直接適用され、検証失敗は後でサイレントに失敗するのではなく、リソースステータスに表示されます。 #10874

セキュリティ

  • ``CVE-2026-55769`` / ``GHSA-x8c2-3p4r-v9r6`` オペレーター発行の接続での``search_path`` ピンニング データベース所有者はpublic スキーマにオーバーロードされたビルトイン演算子を植え、search_path を変更して、クラスタースーパーユーザーとして実行される演算子イントロスペクションプローブがこれらのオーバーロードを解決できるようにpg_catalog の前に、 COPY ... FROM PROGRAM を介してポッド内RCEにつながる可能性があるCWE-426 特権エスカレーションチェーンCVE-2018-1058 と同じクラス。オペレーターは、プールされたすべての接続にsearch_path = pg_catalog, public, pg_temp を固定するため、起動メッセージで出荷され、テナント制御のデフォルトより優先されます。 ( #10774 、

GHSA-x8c2-3p4r-v9r6 )

  • ``GHSA-7qwx-x8ff-3px9`` 認証されたオペレーターからインスタンスマネージャーへの呼び出し インスタンスマネージャーのリモートウェブサーバーは、オペレーター専用の制御エンドポイントの認証ではなくネットワーク分離に依存しているため、ポッドのステータスポートに到達できる当事者はそれらを呼び出すことができます、バックアップオーケストレーションとWALアーカイブを中断し、運用メタデータを読み取ります。アップグレードエンドポイントはSHA-256固定されているため、任意のコードの実行は許可されません。インスタンスマネージャーは、一致する証明書を提示しない機密エンドポイントへの要求を拒否します。この強化はバックポートされません。以前のリリースでは、NetworkPolicy でステータスポートを制限し続ける必要があります。 ( #10579 、 GHSA-7qwx-x8ff-3px9 )

  • ``CVE-2026-55765`` / ``GHSA-w3gf-xc94-wvmj`` オペレーターサイドのSCRAM-SHA-256パスワードエンコーディング オペレーターは現在SCRAM-SHA-256がCREATE /ALTER ROLE ... PASSWORD を発行する前にクリアテキストロールパスワードをエンコードするため、リテラルPostgreSQLが解析およびpg_stat_statements などの拡張機能またはpgaudit がキャプチャする場合があります)は、平文シークレットではなくSCRAMベリファイアです。事前ハッシュされたMD5またはSCRAM値は変更せずに転送され、シークレットごとのアノテーションcnpg.io/passwordPassthrough: "enabled" はオプトアウトします。 ( #10724 、

GHSA-w3gf-xc94-wvmj )

変更

  • Kubernetes 1.36のサポートを追加しました。 ( #10900 )

  • デフォルトのPostgreSQLバージョンを18.4に更新しました。 ( #10719 )

  • パブリッククラウドプロバイダーでオペレーターのテストに使用されるKubernetesバージョンを更新しました。 ( #10720 , #10563 , #11033 )

修正

  • クラスターがレプリカに降格された後、古いプライマリ側のステータスを報告する宣言的なDatabase 、Publication 、およびSubscription オブジェクトを修正しました。コントローラはレプリカの状態を再チェックし、Cluster を監視するようにして、降格がすぐに検出されるようにします。 ( #10871 )

  • 対応するJob およびPVCが作成される前にインスタンスシリアルカウンタが進められたことが原因で発生した非シークエンシャルのポッド名たとえば -1 、-3 を修正した。バンプは、これらのリソースが存在した場合にのみ持続されるようになりました。 ( #10491 )

  • ファイナライザーリコンサイラーの前にレプリカゲートが実行され、ファイナライザーがリリースされない、レプリカクラスターのTerminating で行き詰まったDatabase 、Publication 、またはSubscription の削除を修正しました。レプリカでは、PostgreSQLオブジェクトはプライマリクラスターに残されます。 ( #10853 )

  • 生き残ったCRが所有するPostgreSQLオブジェクトをドロップするdelete 再利用ポリシーと競合する重複Database またはSubscription を修正しました。ドロップは、記録された調整に基づいてゲートされるようになりました。 ( #10870 )

  • キャッシュされたシークレットバージョンが無効化されず、パスワードが再適用されなかったため、スーパーユーザーアクセスが無効になってから再度有効になった後、postgres スーパーユーザーがロックアウトされたままになる問題を修正した。 @mhartmann-jaconiによって診断されました。 ( #10834 )

  • バックアップがrunning に到達する前に、バックアップを実行しているインスタンスマネージャーが再起動された場合たとえば、オペレーターのアップグレードに続くインプレースアップグレードによって、バックアップがstarted フェーズでスタックする問題を修正した。調整が再スケジュールされるため、失われたセッションが検出されます。 ( #10859 )

  • SPDYフォールバックとWebSocketをネゴシエートするようにexec / attach ストリーミングを修正し、SPDYを削除したKubernetesバージョンと、WebSocket execアップグレードを拒否するOpenShiftなどのプラットフォームの両方との互換性を復元します。 @bartscheersによる寄稿。 ( #10876 、 #10933 )

  • 並列Backup オブジェクトが競合した場合のリソースリークを修正しました。バックアップは厳密に作成時の順序で実行されるようになりました、したがって、既に実行中のバックアップが新しいバックアップにプリエンプトされることはなく、そのレプリケーションスロットとPostgreSQLセッションは、プライマリで孤立しなくなりました。 @GabriFedi97による寄稿。 ( #10747 )

  • 参照されたシークレットを取得できなかった場合に、PostgreSQLロールのパスワードをクリアするロール調整を修正しました。シークレットが利用可能になるまでロールは変更されず、アクションごとのエラーが集計されて可視性が向上します。 ( #10053 )

  • メトリックエクスポーターのセットアップエラー一般的にコントローラとの重複キーレースがロールバックしstreaming_replica 作成とウェッジレプリカ参加をロールバックしたブートストラップ障害を修正しました。 metrics-exporterステップが別のトランザクションで実行されるようになりました。 @BlaiseAntonyによる寄稿。 ( #10749 )

  • Backup は作成されたが、そのステータスパッチが着地しなかったときに発生するScheduledBackup コントローラループを修正しました。コントローラは、次の反復にAlreadyExists でループする代わりに、既存のBackup を採用するようになりました。 ( #10612 )

  • Cluster が削除されたPooler をリコンサイルするときのnilポインターパニックを修正しました。 ( #10667 )

  • すべての名前付けログパイプpostgres 、postgres.csv 、およびpostgres.json がWithActiveInstance 中にコンシューマを取得し、名前付けパイプの代わりに通常のファイルが作成されないようにブートストラップログ処理を修正しました。 ( #10043 )

  • アドレスを角かっこで囲むことにより、無効なIPv6 URLの生成を修正しました。 @Infinoidによる寄稿。 ( #10682 )

  • 構成がenabled: false を設定している場合、外部クラスタープラグインがアクティブなものとして扱われるのを修正しました。 ( #10932 )

  • 復元ジョブが古いCluster プライマリがまだ記録されておらず、タイムラインがまだ設定されていないを読み取り、その.history ファイルがスプリットブレインガードによって拒否される可能性があるオブジェクトストアからのブートストラップリカバリ中のレースを修正しました。これが発生すると、リカバリはベースバックアップのタイムラインで停止し、後のタイムラインでコミットされたトランザクションをサイレントにドロップしました。クラスタータイムラインが設定されていないときに履歴ファイルを使用できるようになりました。 @dennispidunによる寄稿。 ( #10818 )

  • インスタンスのPVCを削除すると、インスタンスが永久にスタックしたままになる可能性があるレースを修正しました。WAL PVCがまだ終了中にデータPVCが削除された場合、オペレーターは終了ボリュームにバインドされたインスタンスを再作成し、ポッドをスケジュール不可のままにして、それ以降のすべてのリコンシリエーションをブロックします。オペレーターは、インスタンスを再作成または再接続する前に、終了PVCが完全に削除されるのを待機するようになり、ログラインとクラスターフェーズを介して待機を表面化します。 #11017

  • サーバーとクライアントCAが同じシークレットデフォルトに解決する場合、クラスター作成中のキャッシュレースを修正しました。古いインフォーマーキャッシュは、AlreadyExists で失敗した冗長Create をトリガーし、クラスターがUnable to create required cluster objects でスタックしたままになる可能性がありました。オペレーターは、名前が一致する場合、既に取得したCAシークレットを再利用するようになりました。 ( #10989 )

  • 他のブートストラップ方法で既に適用されているのと同じプリフライトディレクトリチェックを強制することにより、既存のPGDATA たとえばレプリカポッドの再起動後を上書きまたは失敗するpg_basebackup ブートストラップパスを修正しました。これにより、静的にプロビジョニングされたPVCがサイレントに上書きされるのを防ぎます。 ( #11006 )

  • リコンサイル後のプラグインフックがエラーを返したときのHealthy とプラグイン障害フェーズ間のCluster フェーズのフラッピングを修正しました。 Healthy フェーズは、成功したリコンシリエーションの最後のステップとして登録されるため、プラグインエラーで終了するループはHealthy を報告しません。 @GabriFedi97による寄稿。 ( #10421 )

  • 外部サーバーのシークレットがローテーションされた後の古い証明書データと部分的な読み取りを修正しましたたとえば、2つの証明書から1つに縮小するCAバンドル。ファイルはアトミックに書き込まれるようになったため、libpqは常に古い値または新しい値を読み取ります。ミックスする。 @Anand-240による寄稿。 ( #10975 )

  • 短い名前の代わりにプラグインService FQDNを使用するようにプラグインの接続を修正し、クラスターレベルのプロキシがポッドに自動的に注入される際の障害を回避します。 @kdautreyによる寄稿。 ( #10921 )

  • 要求ごとのCluster 作成/更新検証Webhookメッセージからの過剰なオペレーターログノイズを修正し、info ではなくdebug にログに記録されるようになりました。 ( #10984 )

  • 有効なPostgreSQLパラメーター名ではないキーを受け入れるspec.postgresql.parameters を修正しました。これにより、postgresql.conf に任意の指示子を注入する可能性があります。キー名がWebhookによって検証されるようになりました。 ( #11029 )

  • WAL-archiverプラグインが既存のクラスターで有効になっている場合のスイッチオーバーデッドロックを修正しました。primaryUpdateMethod: switchover では、クリーンな降格にはまだ不足しているアーカイバーサイドカーが必要であるため、プライマリをロールアウトできませんでした。オペレーターはプライマリポッドを再作成するため、サイドカーが挿入され、アーカイブが再開されます。このチェックは、 Barman CloudプラグインなどのネイティブサイドカーrestartPolicy: Always を備えたinitコンテナとしてアーカイバーを注入するプラグインもカバーしています。 ( #11032 , #11059 )

  • インスタンス作成ジョブがバックオフ制限を使い果たしたときに、クラスターがSetting up primary に無期限に滞在する問題を修正した。オペレーターは、ターミナルジョブの障害を検出し、クラスターを回復不可としてマークし、失敗したジョブに名前を付け、そのログをポイントします。 ( #11035 )

  • データPVCが作成された後、初期化ジョブが開始される前に、ステータスパッチが競合するファーストプライマリブートストラップデッドロックを修正しました。孤立した保留中のPVCがインスタンスとしてカウントされ、ブートストラップゲートをブロックしたままになります。 PVC状態リコンサイラーは、割り当てられたシリアルを再利用してブートストラップジョブを再作成します。 ( #11039 )

  • 外部クラスター名とシークレットセレクター参照が検証なしでファイルシステムパスに結合されるのを修正し、インスタンスマネージャーが接続マテリアルをダンプするときに.. コンポーネントまたはパスセパレーターが外部シークレットディレクトリをエスケープします。これらの値は検証Webhookで拒否され、書き込みサイトで再チェックされます。 @r0binakによって報告されました。 ( #11045 )

  • pending で永久にスタックするバックアップを修正しました。コンカレントバックアップゲートはリコンサイルごとに実行され、インスタンスマネージャーによって非同期で書き込まれた既に完了したフェーズを上書きする可能性があります。ゲートは、バックアップフェーズがまだ設定されていない場合またはpending である場合にのみ実行されます。 ( #11056 )

  • 古いキャッシュにより、オペレーターが既にプロビジョニングしたスナップショットを再作成し、 AlreadyExists で失敗した場合、失敗として永久にマークされる宣言的VolumeSnapshot バックアップが修正されました。既存のスナップショットがこのバックアップのラベルを運び、それを採用する場合、オペレーターは衝突を許容するようになりました。外部スナップショットとの衝突は引き続きエラーとして表面化します。 ( #11071 )

  • スナップショットが既にプロビジョニングされている場合でも、ファイナライズステップ中に一時的なインスタンスマネージャー接続エラーたとえば、短いポッドネットワークの中断からのダイヤルタイムアウトで破棄されるボリュームスナップショットバックアップを修正した。このようなネットワークエラーは、ターミナルとして扱われる代わりに再試行されるようになりました。 ( #11069 )

  • トークンの保存と移行メタデータのクリーンアップの間でリコンサイルが再キューイングされたときに、status.demotionToken を失うレプリカスイッチオーバーを修正しましたたとえば、不安定なWebhookに対して失敗したクリーンアップパッチ。空の変更なしトークンは、格納されている値をパッチして戻されません。 ( #11075 )

  • cnpg プラグイン:

  • Windowsでkubectl cnpg psql を修正しました。実行はUnix専用のシステムコールに依存し、「Windowsではサポートされていません」で失敗しました。 Windowsは子プロセスとしてkubectl exec を起動するようになりました。 @Utkarsh-sharma47による寄稿。 #10972 !– 1.29 1.28 1.25 –>

  • ロググループごとのタイマーが解放されなかった、ビジークラスターでのkubectl cnpg logs -f の無制限のメモリリークを修正しました。タイマーが反復にわたって再利用されるようになりました。 @Anand-240による寄稿。 ( #10976 )

サポートされているバージョン

  • Kubernetes 1.36、1.35、および1.34

  • PostgreSQL 18、17、16、15、および14 - PostgreSQL 18.4がデフォルトイメージです。PostgreSQL 14のサポートは2026年11月12日に終了します