KubernetesでのPatroniの使用

Patroniは、Kubernetesオブジェクトを使用して、クラスターの状態を保存し、リーダーキーを管理できます。これにより、一貫性ストアなしでKubernetes環境でPostgresを操作できます。つまり、追加のEtcd展開を実行する必要はありません。 Patroniがリーダーと構成キーを保存するために使用できるKubernetesオブジェクトの2つの異なるタイプがあります。それらは`kubernetes.use_endpoints`または`PATRONI_KUBERNETES_USE_ENDPOINTS`環境変数で構成されます。

エンドポイントを使用する

これは推奨されるモードであるという事実にもかかわらず、互換性の理由からデフォルトでオフになっています。オンの場合、Patroniは、クラスター構成とリーダーキーを、作成する各`Endpoints`の`metadata: annotations`フィールドに保存します。リーダー情報を含むアノテーションと実行中のリーダーポッドを指す実際のアドレスの両方が一度に同時に更新されるため、`ConfigMaps`を使用する場合より安全です。

ConfigMapを使用する

このモードでは、Patroniはエンドポイントの代わりにConfigMapを作成し、これらのConfigMapのメタデータ内にキーを保存します。リーダーを変更するには、少なくとも2つの更新が必要です。1つはリーダーのConfigMapに対して、もう1つは各エンドポイントに対してです。

トラフィックをPostgresリーダーに転送するには、`role_label`patroni構成で構成したラベルセレクターを使用するようにKubernetes Postgresサービスを構成する必要があります。

OpenShiftで実行している場合など、場合によっては、ConfigMapsを使用する以外に方法がないことに注意してください。

構成

Patroni Kubernetes settings および settings は、ドキュメントの一般的な章で説明されています。

ロールラベルのカスタマイズ

デフォルトでは、Patroniは、 role=primary などのノードのロールに基づいて、実行されるポッドに対応するラベルを設定します。 labelのキーと値は、kubernetes.role_label、kubernetes.leader_label_value、kubernetes.follower_label_value、および`kubernetes.standby_leader_label_value`によりカスタマイズできます。

デフォルトのロールラベルからカスタムロールラベルに移行する場合、次の移行手順によりダウンタイムを削減できることに注意してください。

  1. kubernetes.tmp_role_label`とポッドの元のロール値を使用して、一時的なラベルを追加します ``tmp_role` など。ポッドが再起動すると、Patroniによって設定された次のラベルを取得します。

labels:
  cluster-name: foo
  role: primary
  tmp_role: primary
  1. すべてのポッドが更新されたら、サービスセレクターを変更して一時的なラベルを選択します。

selector:
  cluster-name: foo
  tmp_role: primary
  1. カスタムロールラベルを追加しますたとえば、`kubernetes.leader_label_value=primary`を設定します。ポッドが再起動すると、Patroniによって設定された次の新しいラベルを取得します。

labels:
  cluster-name: foo
  role: primary
  tmp_role: primary
  1. すべてのポッドが再度更新された後、新しいロール値を使用するようにサービスセレクターを変更します。

selector:
  cluster-name: foo
  role: primary
  1. 最後に、構成から一時的なラベルを削除し、すべてのポッドを更新します。

labels:
  cluster-name: foo
  role: primary

例

  • Patroniリポジトリの kubernetes _フォルダーには、Dockerイメージの例と、Patroni KubernetesセットアップをテストするためのKubernetesマニフェストが含まれています。権限の問題のため、現在の状態ではPersistent Volumeを使用できないことに注意してください。

  • Spilo Project .には、永続ボリュームを使用できるフル機能のDockerイメージがあります。

  • Kubernetesを使用して実行されるPatroniで構成されたSpiloイメージを展開するための Helm chart もあります。

  • PatroniとSpiloを使用してデータベースクラスターを大規模に実行するには、 postgres-operator プロジェクトを見てください。 Spiloクラスターを管理するための演算子パターンを実装します。