KubernetesでのPatroniの使用¶
Patroniは、クラスターの状態を保存し、リーダーキーを管理するためにKubernetesオブジェクトを使用できます。これにより、整合性ストアなしでKubernetes環境でPostgresを操作できるようになります。つまり、追加のEtcdデプロイメントを実行する必要がありません。Patroniがリーダーと構成キーを保存するために使用できるKubernetesオブジェクトには2つの異なるタイプがあり、これらは`kubernetes.use_endpoints`または`PATRONI_KUBERNETES_USE_ENDPOINTS`環境変数で構成されます。
エンドポイントの使用¶
これは推奨モードですが、互換性の理由からデフォルトではオフになっています。これがオンの場合、Patroniは作成するそれぞれの「エンドポイント」の「メタデータ:アノテーション」フィールドにクラスター構成とリーダーキーを保存します。リーダーの変更は、リーダー情報を含むアノテーションと、実行中のリーダーポッドを指す実際のアドレスの両方が一度に同時に更新されるため、「ConfigMaps」を使用する場合よりも安全です。
ConfigMapを使用する¶
このモードでは、Patroniはエンドポイントの代わりにConfigMapを作成し、それらのConfigMapのメタデータ内にキーを保存します。リーダーを変更するには、リーダーのConfigMapに対する更新と、それぞれのエンドポイントに対する更新の少なくとも2回の更新が必要です。
トラフィックをPostgresリーダーに送信するには、「role_label」(patroni構成で構成)を含むラベルセレクターを使用するようにKubernetesPostgresサービスを構成する必要があります。
OpenShiftで実行している場合など、場合によってはConfigMapを使用する以外に方法がないことに注意してください。
構成¶
PatroniKubernetes settings および settings については、ドキュメントの一般的な章で説明されています。
役割ラベルをカスタマイズする¶
デフォルトでは、Patroniはノードのロールに基づいて、実行されるポッドに対応するラベル( role=master など)を設定します。labelのキーと値は、kubernetes.role_label、kubernetes.leader_label_value、kubernetes.follower_label_value、`kubernetes.standby_leader_label_value`によってカスタマイズできます。
デフォルトの役割ラベルからカスタムの役割ラベルに移行する場合、次の移行手順によってダウンタイムを短縮できることに注意してください。
kubernetes.tmp_role_label`( ``tmp_role` など)を使用して、ポッドの元のロール値を使用して一時ラベルを追加します。ポッドが再起動されると、Patroniによって設定された次のラベルが取得されます。
labels: cluster-name: foo role: master tmp_role: master
すべてのポッドが更新されたら、サービスセレクターを変更して一時ラベルを選択します。
selector: cluster-name: foo tmp_role: master
カスタムロールラベルを追加します(例:`kubernetes.leader_label_value=primary`を設定します)。ポッドが再起動されると、Patroniによって設定された次の新しいラベルが取得されます。
labels: cluster-name: foo role: primary tmp_role: master
すべてのポッドが再度更新されたら、新しいロール値を使用するようにサービスセレクターを変更します。
selector: cluster-name: foo role: primary
最後に、構成から一時ラベルを削除し、すべてのポッドを更新します。
labels: cluster-name: foo role: primary
例¶
Patroniリポジトリの kubernetes _フォルダーには、Dockerイメージの例と、PatroniKubernetesセットアップをテストするためのKubernetesマニフェストが含まれています。現在の状態では、権限の問題によりPersistentVolumeを使用できないことに注意してください。
永続ボリュームを使用できるフル機能のDockerイメージは Spilo Project にあります。
Kubernetesを使用して実行されるPatroniで構成されたSpiloイメージをデプロイするための Helm chart もあります。
PatroniとSpiloを使用してデータベースクラスターを大規模に実行するには、 postgres-operator プロジェクトを確認してください。Spiloクラスターを管理するための演算子パターンを実装します。