はじめに
========
**CloudNativePG** は、オープンソースの `operator `_
サポートされている `Kubernetes `_ クラスターで `PostgreSQL `_ ワークロードを管理するように設計されています。
:ref:`レプリカクラスターから分散トポロジへ <レプリカクラスターから分散トポロジへ>` により、プライベート、パブリック、ハイブリッド、およびマルチクラウド環境での展開をサポート
機能。
CloudNativePGは、宣言的構成や不変のインフラストラクチャなどのDevOpsの原則と概念を遵守しています。
``Cluster``
と呼ばれる新しいKubernetesリソースを定義します。高可用性と読み取り専用クエリのオフロードのために、選択したKubernetes名前空間に共存する単一のプライマリとオプションの数のレプリカで構成されるPostgreSQLクラスターを表します。
同じKubernetesクラスターにあるアプリケーションは、オペレーターがのみ管理するサービスを使用してPostgreSQLデータベースにアクセスでき、フェールオーバーまたはスイッチオーバーに伴うプライマリロールの変更を心配する必要はありません。
Kubernetesクラスターの外部にあるアプリケーションは、サービステンプレート機能と\ ``LoadBalancer``
サービスを活用して、TCP経由でPostgreSQLを公開できます。さらに、Webアプリケーションは、PgBouncerに基づいたネイティブ接続プーラーを利用できます。
CloudNativePGは、もともと `EDB `_ によってビルドされ、Apache
License 2.0の下でオープンソースをリリースしました。 `source code repository is in Github `_ 。
.. Note::
:ref:`Operator Capability Levels model <オペレーター能力レベル>` に基づいて、ユーザーはCloudNativePGオペレーターからの**「レベルV - 自動パイロット」**機能セットを期待できます。
サポートされているKubernetesディストリビューション
--------------------------------------------------
CloudNativePGの各マイナーリリースは、さまざまなKubernetesバージョン、通常、マイナーバージョンが最初にリリースされたときにCNCFによってサポートされているバージョンで動作するように設計されています。
詳細は :ref:`サポートされているリリース <サポートされているリリース>` ページを参照してください。
コンテナイメージ
----------------
`CloudNativePG community `_ は、オペレーターとPostgreSQLオペランドの両方のコンテナイメージを維持します。
オペレーター
^^^^^^^^^^^^
CloudNativePGオペレーターコンテナイメージは、
`cloudnative-pg `_ で入手できます。
3つの異なるフレーバーで
- Debian 12ディストリビューション
- Red Hat UBI 9 microサフィックス ``-ubi9``
- Red Hat UBI 8 microサフィックス ``-ubi8``
Red Hat UBIイメージは、主にOLM使用を目的としています。
オペランド
^^^^^^^^^^
PostgreSQLオペランドコンテナイメージは、複数のアーキテクチャにわたって、すべての `PGDG supported versions of PostgreSQL `_ で
`postgres-containers `_ から直接利用できます。
毎日のジョブにより、スタック全体の重大な脆弱性CVEが迅速に対処されます。
さらに、コミュニティは :ref:`PostGIS extension ` のイメージを提供しています。
主な機能
--------
- 外部ツールを必要とせずに、高可用性を実現するKubernetes
APIサーバーとの直接統合
- 最も調整されたレプリカ
- レプリカの自動再作成を促進することによるプライマリインスタンスの
- フェイルオーバーを介した自己修復機能
- 選択したレプリカの昇格によるプライマリインスタンスの計画的なスイッチオーバー
- スケールアップ/ダウン機能
- 任意の数のインスタンスの定義最小1 - 1つのプライマリサーバー
- アプリケーションをクラスターの唯一のプライマリサーバーに接続するための
*読み取り-書き込み* サービスの定義
- ワークロードを読み取るためのインスタンスにアプリケーションを接続するための
*読み取り専用* サービスの定義
- クラスターを介した特定の人気のPostgres拡張機能を含むPostgreSQL構成の宣言管理
``spec`` ``pgaudit`` 、\ ``auto_explain`` 、\ ``pg_stat_statements``
、および\ ``pg_failover_slots``
- Postgresのロール、ユーザー、グループの宣言的管理
- PVCテンプレートを使用したローカル永続ボリュームのサポート
- ポッドの永続ボリュームストレージの再利用
- WALファイルとテーブルスペースの個別のボリューム
- 一時テーブルスペースを含むPostgresテーブルスペースの宣言的管理
- PostgreSQLマイナーバージョンのローリングアップデート
- オペレーターアップグレードのインプレースまたはローリング更新
- TLS接続とクライアント証明書認証
- カスタムTLS証明書のサポートcert-managerとの統合を含む
- オブジェクトストアへの継続的なWALアーカイブAWS S3およびS3互換、Azure
Blob Storage、およびGoogle Cloud Storage
- ボリュームスナップショットのバックアップ基になるストレージクラスでサポートされている場合
- オブジェクトストアのバックアップAWS S3およびS3互換、Azure Blob
Storage、およびGoogle Cloud Storage
- ボリュームスナップショットまたはオブジェクトストアの既存のバックアップからのフルリカバリーおよびポイントインタイムリカバリー
- PostgreSQLのメジャーアップグレードを含む、既存のPostgreSQLデータベースのオフラインインポート
- PostgreSQLネイティブ論理レプリケーションを介したPostgreSQLのメジャーアップグレードを含む既存のPostgreSQLデータベースのオンラインインポート
``cnpg`` プラグインを介して必須
- 宣言的な方法でのPostgreSQLクラスター全体、またはインスタンスのサブセットのフェンシング
- 宣言的な方法でのPostgreSQLクラスターの休止状態
- クォーラムベースおよび優先度ベースの同期レプリケーションのサポート
- クラスターレベルでのHA物理レプリケーションスロットのサポート
- ユーザー定義の物理レプリケーションスロットの同期
- スタンバイからのバックアップ
- バックアップ保持ポリシーリカバリウィンドウに基づいて、オブジェクトストアのみ
- 並列WALアーカイブと復元により、データベースが大量の書き込みシステムでのWAL生成に追いつくことができます
- オブジェクトストアにアップロードされたバックアップファイルのタグ付けをサポートして、オブジェクトストアレイヤーでオプションの保持管理を有効にします
- 複数のKubernetesクラスターにまたがるPostgreSQL分散トポロジのレプリカクラスター。制御されたスイッチオーバーのサポートを備えたプライベート、パブリック、ハイブリッド、およびマルチクラウドアーキテクチャを有効にします。
- 遅延レプリカクラスター
- PgBouncerを使用した接続プーリング
- ``nodeSelector`` を介したノードアフィニティのサポート
- ``metrics``
ポート9187を介したプロメテウスのユーザー定義メトリックのネイティブなカスタマイズ可能なエクスポーター
- JSON形式のPostgreSQLエラーメッセージの標準出力ログ
- ポッドの\ ``readOnlyRootFilesystem``
セキュリティコンテキストを自動的に設定します
- ``kubectl`` 用の\ ``cnpg`` プラグイン
- 単純なバインドと検索+バインドのLDAPクライアント認証
- マルチアーチフォーマットのコンテナイメージ
- OLMのインストール
.. Note::
CloudNativePGは、データの永続性の管理に`StatefulSet` sを使用しません。代わりに、永続ボリューム要求PVCを直接管理します。ご興味がある場合は、 :ref:`カスタムポッドコントローラ <カスタムポッドコントローラ>` を読んで詳細をご覧ください。
このガイドについて
------------------
:ref:`クイックスタート <クイックスタート>` の指示に従って、KindまたはMinikubeを使用してローカルKubernetesクラスターでCloudNativePGをテストします。
KubernetesとPostgreSQLの基本的な用語に慣れていない場合は、
:ref:`始める前に <始める前に>` を参照してください。
- `Postgres, PostgreSQL and the Slonik Logo `_
は、カナダPostgreSQLコミュニティ協会の商標または登録商標であり、その許可を得て使用しています。\*