Image Catalog ============= .. raw:: html ``ImageCatalog`` and ``ClusterImageCatalog`` are essential resources that empower you to define images for creating a ``Cluster`` . The key distinction lies in their scope: an ``ImageCatalog`` is namespaced, while a ``ClusterImageCatalog`` is cluster-scoped. Both share a common structure, comprising a list of images, each equipped with a ``major`` field indicating the major version of the image. .. Warning:: The operator places trust in the user-defined major version and refrains from conducting any PostgreSQL version detection. It is the user's responsibility to ensure alignment between the declared major version in the catalog and the PostgreSQL image.   The ``major`` field’s value must remain unique within a catalog, preventing duplication across images. Distinct catalogs, however, may expose different images under the same ``major`` value. **Example of a Namespaced ``ImageCatalog`` :** .. code:: yaml 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.1-system-trixie **Example of a Cluster-Wide Catalog using ``ClusterImageCatalog`` Resource:** .. code:: yaml apiVersion: postgresql.cnpg.io/v1 kind: ClusterImageCatalog metadata: name: postgresql 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.1-system-trixie A ``Cluster`` resource has the flexibility to reference either an ``ImageCatalog`` (like in the following example) or a ``ClusterImageCatalog`` to precisely specify the desired image. .. code:: yaml apiVersion: postgresql.cnpg.io/v1 kind: Cluster metadata: name: cluster-example spec: instances: 3 imageCatalogRef: apiGroup: postgresql.cnpg.io # Change the following to `ClusterImageCatalog` if needed kind: ImageCatalog name: postgresql major: 16 storage: size: 1Gi Clusters utilizing these catalogs maintain continuous monitoring. Any alterations to the images within a catalog trigger automatic updates for **all associated clusters** referencing that specific entry. CloudNativePG Catalogs ---------------------- The CloudNativePG project maintains ``ClusterImageCatalog`` manifests for all supported images. These catalogs are regularly updated and published in the `artifacts repository `_ . Each catalog corresponds to a specific combination of image type (e.g. ``minimal`` ) and Debian release (e.g. ``trixie`` ). It lists the most up-to-date container images for every supported PostgreSQL major version. By installing these catalogs, cluster administrators can ensure that their PostgreSQL clusters are automatically updated to the latest patch release within a given PostgreSQL major version, for the selected Debian distribution and image type. For example, to install the latest catalog for the ``minimal`` PostgreSQL container images on Debian ``trixie`` , run: .. code:: shell kubectl apply -f \ https://raw.githubusercontent.com/cloudnative-pg/artifacts/refs/heads/main/image-catalogs/catalog-minimal-trixie.yaml You can install all the available catalogs by using the ``kustomization`` file present in the ``image-catalogs`` directory: .. code:: shell kubectl apply -k https://github.com/cloudnative-pg/artifacts//image-catalogs?ref=main You can then view all the catalogs deployed with: .. code:: shell kubectl get clusterimagecatalogs.postgresql.cnpg.io For example, you can create a cluster with the latest ``minimal`` image for PostgreSQL 18 on ``trixie`` with: .. code:: yaml 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