Image Catalog

ImageCatalog およびClusterImageCatalog は、 PostgreSQLイメージのライフサイクルをCluster 定義から分離できるカスタムリソース定義CRDです。カタログを使用することにより、イメージの更新を一元管理できます。カタログエントリが更新されると、関連するすべてのクラスターが自動的に roll out the new image 。

カスタムカタログをビルドすることはできますが、CloudNativePGはClusterImageCatalog リソースとして CloudNativePGカタログ を提供し、すべての公式コミュニティPostgreSQLコンテナイメージをカバーします。

カタログのスコーピング

2つのリソースの主な違いは、そのスコープです。

Resource

Scope

Best use case

ImageCatalog

Namespaced

Application-specific versions or team-level restrictions.

ClusterImageCatalog

Cluster-wide

Global standards across all namespaces for an organization.

カタログ構造

両方のリソースは、共通のスキーマを共有します。

  • メジャーバージョン major PostgreSQLバージョンによってキー付けられたイメージのリスト。

  • 一意性 major フィールドは、単一のカタログ内で一意である必要があります。

  • 拡張機能 認定された拡張機能コンテナイメージのサポートextension_control_path 経由でPostgreSQL 18+で利用可能。

警告

オペレーターは画像検出を実行せずにユーザー定義の`major` バージョンを信頼しますが、公式CloudNativePGカタログはコミュニティによって事前検証され、すべての拡張機能とオペランドのイメージエントリが宣言されたメジャーバージョンと正しく一致することを確認します。カスタムカタログを作成する場合は、宣言されたメジャーバージョンが実際のPostgreSQLイメージと一致することを確認して、互換性を維持する必要があります。

構成例

カタログの定義

単一のカタログ内で複数のメジャーバージョンを定義できます。

次の例では、名前空間ImageCatalog を定義します。

apiVersion: postgresql.cnpg.io/v1
kind: ImageCatalog
metadata:
  name: postgresql
  namespace: default
spec:
  images:
    - major: 15
      image: ghcr.io/cloudnative-pg/postgresql:15.14-system-trixie
    - major: 16
      image: ghcr.io/cloudnative-pg/postgresql:16.10-system-trixie
    - major: 17
      image: ghcr.io/cloudnative-pg/postgresql:17.6-system-trixie
    - major: 18
      image: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie

次の例は、クラスター全体のClusterImageCatalog を定義します。

apiVersion: postgresql.cnpg.io/v1
kind: ClusterImageCatalog
metadata:
  name: postgresql-global
spec:
  images:
    - major: 15
      image: ghcr.io/cloudnative-pg/postgresql:15.14-system-trixie
    - major: 16
      image: ghcr.io/cloudnative-pg/postgresql:16.10-system-trixie
    - major: 17
      image: ghcr.io/cloudnative-pg/postgresql:17.6-system-trixie
    - major: 18
      image: ghcr.io/cloudnative-pg/postgresql:18.3-system-trixie

クラスター内のカタログの参照

Cluster リソースは、 imageCatalogRef を使用して画像を選択します。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: cluster-example
spec:
  instances: 3
  imageCatalogRef:
    apiGroup: postgresql.cnpg.io
    kind: ClusterImageCatalog # Or ImageCatalog
    name: postgresql-global
    major: 18
  storage:
    size: 1Gi

イメージボリューム拡張を使用したイメージカタログ

イメージボリューム拡張を使用したイメージカタログ では、カタログエントリー内で直接拡張機能のコンテナをバンドルできます。

apiVersion: postgresql.cnpg.io/v1
kind: ImageCatalog
metadata:
  name: postgresql
spec:
  images:
    - major: 18
      image: ghcr.io/cloudnative-pg/postgresql:18.3-minimal-trixie
      extensions:
        - name: foo
          image:
            reference: # registry path for your `foo` extension image

extensions セクションは ExtensionConfiguration の後です

APIスキーマと構造。イメージカタログを参照するクラスターは、関連する拡張機能を名前でロードできます。

注釈

documentation of image volume extensions を参照してください。

内部イメージ構造、構成オプション、およびクラスター内のカタログ拡張機能を選択またはオーバーライドする方法の詳細については、

CloudNativePGカタログ

CloudNativePGプロジェクトは、サポートされているすべてのイメージのClusterImageCatalog マニフェストを維持します。

これらのカタログは定期的に更新され、 artifacts repository で公開されます。

各カタログは、イメージタイプminimal などとDebianリリースtrixie などの特定の組み合わせに対応しています。サポートされているすべてのPostgreSQLメジャーバージョンの最新のコンテナイメージをリストしています。

重要

最大限のセキュリティと不変性を保証するために、公式CloudNativePGカタログ内のすべての画像は、単なるタグではなく**SHA256ダイジェスト**によって識別されます。

バージョンの互換性

標準カタログはオペレーターの古いバージョンで動作しますが、 ``extensions`` セクションを含むカタログはCloudNativePG 1.29以降 とのみ互換性があります。古いオペレーターの拡張定義を含むカタログを使用すると、これらの定義が拒否されます。

インストールと使用

これらのカタログをインストールすることにより、クラスター管理者は、PostgreSQLクラスターが、選択したDebianディストリビューションとイメージタイプの特定のPostgreSQLメジャーバージョン内の最新のパッチリリースに自動的に更新されることを確認できます。

たとえば、minimal PostgreSQLコンテナイメージの最新のカタログをDebian trixie にインストールするには、次のコマンドを実行します。

kubectl apply -f \
  https://raw.githubusercontent.com/cloudnative-pg/artifacts/refs/heads/main/image-catalogs/catalog-minimal-trixie.yaml

image-catalogs ディレクトリにあるkustomization ファイルを使用して、使用可能なすべてのカタログをインストールできます。

kubectl apply -k https://github.com/cloudnative-pg/artifacts//image-catalogs?ref=main

次に、次の方法で展開されたすべてのカタログを表示できます。

kubectl get clusterimagecatalogs.postgresql.cnpg.io

例 クラスターでのカタログの使用

trixie 上のPostgreSQL 18の最新のminimal イメージを常に追跡するクラスターを作成するには、次のようにCluster を定義します。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: angus
spec:
  instances: 3
  imageCatalogRef:
    apiGroup: postgresql.cnpg.io
    kind: ClusterImageCatalog
    name: postgresql-minimal-trixie
    major: 18
  storage:
    size: 1Gi