インストールとアップグレード
Kubernetesへのインストール
オペレーターマニフェストを直接使用する
オペレーターは、Kubernetesの他のリソースと同様に、kubectl
を介して適用されるYAMLマニフェストを介してインストールできます。
latest operator manifest をインストールできます
このマイナーリリースでは次のようになります。
kubectl apply --server-side -f \
https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/main/releases/cnpg-1.24.0-rc1.yaml
これは次の方法で確認できます。
kubectl get deployment -n cnpg-system cnpg-controller-manager
kubectl のcnpg プラグインを使用する
cnpg
プラグインを使用して、静的マニフェストにあるデフォルトの構成オプションをオーバーライドできます。
たとえば、デフォルトの最新のマニフェストを生成しますが、ウォッチ名前空間を特定の名前空間のみに変更するには、次のコマンドを実行できます。
kubectl cnpg install generate \
--watch-namespace "specific-namespace" \
> cnpg_for_specific_namespace.yaml
より包括的な例については、 Backup {postgresql-cnpg-io-v1-Backup} ドキュメントを参照してください。
警告
GKEにCloudNativePGをデプロイしており、エラー`... failed to call webhook...` を取得した場合は、公式 docs で説明しているように、デフォルトでは、ワーカーノードとコントロールプレーン間のトラフィックは、いくつかの特定のポートを除きてファイアウォールによってブロックされていることに注意してください
そしてこれによって issue 。 WebhookサービスのtargetPort
を許可されるもののいずれかに変更するか、ファイアウォールでWebhookのポート9443
を開く必要があります。
最新の開発スナップショットのテスト
次の公式パッチリリースの前にCloudNativePGの最新の開発スナップショットをテストまたは評価する場合は、 cloudnative-pg/artifacts からマニフェストをダウンロードできます。
これにより、現在のトランクメインおよびサポートされている各リリースに簡単にアクセスできます。
たとえば、次の使用でオペレーターの最新のスナップショットをインストールできます。
curl -sSfL \
https://raw.githubusercontent.com/cloudnative-pg/artifacts/main/manifests/operator-manifest.yaml | \
kubectl apply --server-side -f -
代わりに、この特定のマイナーリリースのオペレーターの最新のスナップショットを探している場合は、次を実行できます。
curl -sSfL \
https://raw.githubusercontent.com/cloudnative-pg/artifacts/main/manifests/operator-manifest.yaml | \
kubectl apply --server-side -f -
重要
スナップショットはCloudNativePGではサポートされておらず、本番使用を目的としていません。
Helmチャートを使用する
オペレーターは、提供されている Helm chart を使用してインストールできます。
OLMを使用する
CloudNativePGは、 Operator Lifecycle Manager (OLM) を使用してインストールすることもできます
OperatorHub.io から直接。
デプロイメントの詳細
Kubernetesでは、オペレーターはデフォルトでKubernetes Deployment
としてcnpg-system
名前空間にインストールされます。この展開の名前は、インストール方法によって異なります。マニフェストまたはcnpg
プラグインを介してインストールされる場合、デフォルトでcnpg-controller-manager
と呼ばれます。
Helmを介してインストールされた場合、デフォルト名はcnpg-cloudnative-pg
です。
注釈
Helmを使用すると、 *"values.yaml"* file の`fullnameOverride` フィールドを介してデプロイメントの名前をカスタマイズできます。
kubectl のdescribe
コマンドを使用して、詳細情報を取得できます。
$ kubectl get deployments -n cnpg-system
NAME READY UP-TO-DATE AVAILABLE AGE
<deployment-name> 1/1 1 1 18m
kubectl describe deploy \
-n cnpg-system \
<deployment-name>
他の展開と同様に、レプリカセットの上にあり、ローリングアップグレードをサポートします。 CloudNativePGオペレーターのデフォルト構成には、単一のレプリカの展開が付属しており、ほとんどのインストールに適しています。ポッドが実行されているノードに到達できなくなった場合、ポッドは別のノードで再スケジュールされます。
オペレーターレベルでの高可用性が必要な場合、オペレーターがリーダー選択をサポートしていることを考慮すると、展開構成で複数のレプリカを指定できます。また、テイントと寛容を利用して、実際のPostgreSQLクラスターが実行されているノードでオペレーターが実行されないことを確認できます。これには、自己管理のKubernetesインストールのコントロールプレーンが含まれる場合があります。
参考
いくつかのデフォルトオプションをオーバーライドすることにより、オペレーターのデフォルト動作を変更できます。詳細については、 オペレーター設定 セクションを参照してください。
アップグレード
重要
1.14.0以前のリリースノート をよくお読みください
一部のバージョンは追加の手順を必要とする場合があるため、アップグレードを実行する前に。
CloudNativePGオペレーターのアップグレードは、2段階のプロセスです。
コントローラと関連するKubernetesリソースをアップグレードする
すべてのPostgreSQLポッドで実行されているインスタンスマネージャーをアップグレードする
リリースノートに別の記載がない限り、最初のステップは、通常、プレーンなKubernetesインストールの新しいバージョンのマニフェストを適用するか、使用するディストリビューションのネイティブパッケージマネージャーを使用して実行されます上記のセクションの指示に従ってください。
2番目のステップは、コントローラを更新した後に自動的に実行され、デフォルトでは、新しいインスタンスマネージャーを使用するように展開されたすべてのPostgreSQLインスタンスのローリング更新をトリガーします。ローリング更新手順は、スイッチオーバーで最高潮に達します。これは、
primaryUpdateStrategy
オプションで制御されます。デフォルトではunsupervised
に設定されます。 supervised
に設定している場合、ユーザーはkubectl のcnpg
プラグインを介して新しいインスタンスを手動で昇格させて、ローリング更新を完了する必要があります。
参考
このプロセスは、 ローリングアップデート ページで詳細に説明されています。
重要
primaryUpdateStrategy が`unsupervised` のデフォルト値に設定されている場合、オペレーターのアップグレードはPostgreSQLクラスターでスイッチオーバーをトリガーし、通常は無視できるダウンタイムを発生します。
バージョン1.10.0以降、ローリング更新動作をインスタンスマネージャーのインプレース更新に置き換えることができます。後者は、PostgreSQLインスタンスの再起動、その結果、クラスター内のスイッチオーバーを必要としません。デフォルトで無効になっているこの動作について以下に説明します。
インスタンスマネージャーのインプレース更新
デフォルトでは、CloudNativePGは、オペレーターが更新されるたびに、クラスターのローリング更新を発行します。オペレーターに同梱される新しいインスタンスマネージャーは、initコンテナを介して各PostgreSQLポッドに追加されます。
ただし、この動作は構成を介して変更でき、インスタンスマネージャーのインプレース更新を有効にできます。これは、コンテナを生きたままにするPID 1プロセスです。
内部的には、CloudNativePGのバージョン1.10からのインスタンスマネージャーは、完全性検証フェーズが完了すると、既存の実行可能ファイルを置き換える新しい実行可能ファイルのインジェクションと、すべての内部プロセスの正常な終了をサポートしています。新しいインスタンスマネージャーが新しいバイナリを使用して再起動すると、既に実行されている postmaster が採用されます。
その結果、PostgreSQLプロセスは更新の影響を受けず、スイッチオーバーを実行する必要はありません。コインの反対側は、Podがスタート後に変更され、不変性の純粋な概念を壊すということです。
オペレーター設定 でENABLE_INSTANCE_MANAGER_INPLACE_UPDATES
環境変数を'true' に設定することにより、この機能を有効にできます。
インプレースアップグレードプロセスでは、ポッド内のinitコンテナイメージは変更されません。したがって、ポッド定義はオペレーターの現在のバージョンを反映しません。
バージョン間の互換性
CloudNativePGはセマンティックバージョニングに従います。同じAPIバージョン内のオペレーターのすべてのリリースは、以前のAPIバージョンと互換性があります。現在のAPIバージョンはv1で、オペレーターのバージョン1.x.yに対応します。
新機能に加えて、オペレーターの新しいバージョンにはバグ修正と安定性の強化が含まれています。このため、各バージョンは、最も安全で安定したPostgres環境を維持するためにリリースされるため、**オペレーターの最新バージョンにアップグレードすることを強くお勧めします。
CloudNativePGは現在、少なくとも毎月オペレーターの新しいバージョンをリリースしています。各バージョンが利用可能になったときに更新を適用できない場合は、バージョンをスキップせずに、各バージョンを順番にアップグレードして、定期的に最新の状態になることをお勧めします。
1.14.0以前のリリースノート ページには、CloudNativePGのすべてのリリースバージョンで導入された変更の詳細なリストが含まれており、ソフトウェアの新しいバージョンにアップグレードする前に読む必要があります。
ほとんどのバージョンは直接アップグレード可能であり、その場合、プレーンなKubernetesインストールに新しいマニフェストを適用するか、選択したディストリビューションのネイティブパッケージマネージャーを使用するだけで十分です。
バージョンを直接アップグレードできない場合、新しいバージョンをインストールする前に古いバージョンを削除する必要があります。これはユーザーデータに影響を与えるのではなく、オペレーター自分自身にのみ影響を与えます。
1.24.0または1.23.3へのアップグレード
重要
CloudNativePGの既存のすべてのユーザーは、バージョン1.24.0または少なくとも現在使用しているマイナーリリースの最新の安定バージョン1.23.3にアップグレードすることをお勧めします。
警告
上位のマイナーリリースにアップグレードするたびに、すべての中間マイナーリリースのリリースノートとアップグレード手順を確認してください。たとえば、1.21.xから1.24に移行する場合は、1.22、1.23、および1.24のリリースノートとアップグレード手順を必ず読んでください。
レプリカクラスターから分散トポロジへ
CloudNativePG 1.24.0の重要な機能強化の1つは、レプリカクラスター機能のアップグレードです。
以前のレプリカクラスター機能は、現在「スタンドアロンレプリカクラスター」と呼ばれていますが、複数のKubernetesクラスターにまたがるディザスターリカバリーDRおよび高可用性HAシナリオでは推奨されなくなりました。スタンドアロンレプリカクラスターは、レポート、OLAP、テストデータを使用した開発環境の作成などの読み取り専用ワークロードに最適です。
DRとHAの目的で、CloudNativePGはレプリカクラスターの分散トポロジー戦略を導入するようになりました。この新しい戦略では、プライベート、パブリック、ハイブリッド、およびマルチクラウド環境、複数のリージョン、および異なるクラウドプロバイダーにまたがるPostgreSQLクラスターを構築できます。また、スイッチオーバー操作を制御するAPIも提供し、任意の時点で1つのクラスターのみがプライマリとして機能します。
この分散トポロジ戦略は、復元力とスケーラビリティを強化し、多様なインフラストラクチャ設定にわたって高可用性とディザスターリカバリー機能を必要とする最新の分散アプリケーションのための堅牢なソリューションになります。
分散PostgreSQLセットアップに関係するすべてのCluster
リソースを変更することにより、以前のレプリカクラスター構成から分散トポロジにシームレスに移行できます。次の手順が実行されていることを確認します。
externalClustersセクションを構成して、分散トポロジに関係するすべてのクラスターを含めます。保守性と一貫性を維持するために、すべてのClusterリソースで同じ構成を使用することを強くお勧めします。分散トポロジを反映するように
.spec.replicaスタンザのprimaryおよびsourceフィールドを構成します。primaryフィールドには、分散トポロジの現在のプライマリクラスターの名前が含まれている必要がありますが、sourceフィールドには、各Clusterリソースの複製元のクラスターの名前が含まれている必要があります。enabledフィールドは、以前にtrueまたはfalseに設定されていましたが、設定を解除するデフォルトにする必要があることに注意してください。
詳細については、 レプリカクラスターから分散トポロジへ を参照してください。
以前のマイナーバージョンから1.23へのアップグレード
ユーザー定義のレプリケーションスロット
CloudNativePGは、プライマリで定義されたすべてのレプリケーションスロットの自動同期を提供するようになりました。高可用性HAクラスター内のスタンバイ。
スタンバイでレプリケーションスロットを手動で管理する場合、これらのレプリケーションスロットを同期から除外することが重要です。これを行わないと、CloudNativePGがスタンバイから削除する場合があります。この除外を実装するには、次のYAML構成を利用します。この例では、 ’foo’で始まる名前のレプリケーションスロットは同期されません。
...
replicationSlots:
synchronizeReplicas:
enabled: true
excludePatterns:
- "^foo"
または、同期メカニズムを完全に無効にする場合は、次の構成を使用します。
...
replicationSlots:
synchronizeReplicas:
enabled: false
サーバーサイドでのマニフェストの適用
Kubernetes 1.29以降のバージョンとの互換性を保証するために、CloudNativePGは Server-side apply の使用を義務付けました
オペレーターマニフェストを展開するとき。
このインストール方法を採用することは、新しい展開に問題はありませんが、
--server-side
オプションを使用して既存のオペレーターマニフェストを更新すると、以下の例のようなエラーが発生する場合があります。
Apply failed with 1 conflict: conflict with "kubectl-client-side-apply" using..
このようなエラーが発生した場合は、 --force-conflicts
オプションを明示的に指定して競合解決を強制することにより解決できます。
kubectl apply --server-side --force-conflicts -f <OPERATOR_MANIFEST>
今後、 kube-apiserver
はCRDの認識されたマネージャーとして自動的に認識され、この問題に関するさらなる手動介入の必要性がなくなります。
以前のマイナーバージョンから1.22へのアップグレード
CloudNativePGは、デフォルトでのセキュリティのアプローチを遵守し続けます。バージョン1.22以降、
ALTER SYSTEM コマンドの使用はデフォルトで無効になりました。
この選択の背後にある理由は、デフォルトで、CloudNativePGによって制御されるデータベースクラスターのPostgreSQL構成の変更が、Kubernetes APIを介してのみ許可されるようにするためです。
同時に、バージョン1.22.0、1.21.2、および1.20.5から一時的にでも使用する必要がある場合に、次の抜粋のように.spec.postgresql.enableAlterSystem
をtrue に設定することにより、ALTER SYSTEM
を有効にするオプションを提供しています。
...
postgresql:
enableAlterSystem: true
...
22のクラスターでは、デフォルトで
enableAlterSystemがfalseに設定されます。 1.22の既存の動作を保持したい場合は、上記のようにenableAlterSystemをtrueに明示的に設定する必要があります。
重要
上記の例に示すように、バージョン1.22.3へのアップグレードの直後に`enableAlterSystem` の目的の値を設定できます。