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クライアント証明書をオペレーターが自動的に生成および更新できるようになりました。これにより、パスワードなしのPostgreSQLcert認証が有効になります。シークレットは、機能が無効になるか、DatabaseRoleが削除されるとクリーンアップされます。 #10896イメージカタログを介したPgBouncerイメージ管理
Poolerリソースは、新しいspec.pgbouncer.imageCatalogRefフィールドを介してImageCatalogまたはClusterImageCatalogのエントリーを参照できるようになり、PgBouncerイメージ管理を一元化できます。カタログエントリが更新されると、参照しているすべてのPoolersが自動的にリコンサイルされ、仕様を変更せずに新しいイメージをロールアウトします。解決された画像はstatus.imageでレポートされ、新しいstatus.phaseactive、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でWarningPrimaryStatusCheckFailedイベントを発行するようになり、ユーザーに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-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 、
変更
修正
クラスターがレプリカに降格された後、古いプライマリ側のステータスを報告する宣言的な
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 )
短い名前の代わりにプラグイン
ServiceFQDNを使用するようにプラグインの接続を修正し、クラスターレベルのプロキシがポッドに自動的に注入される際の障害を回避します。 @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日に終了します