KubernetesでPatroniを使用する¶
Patroniは、Kubernetesオブジェクトを使用して、クラスターの状態を保存し、リーダーキーを管理できます。これにより、コンシステンシーストアなしでKubernetes環境でPostgresを操作できるようになります。つまり、追加のEtcdデプロイメントを実行する必要はありません。Patroniがリーダーと構成キーを保存するために使用できるKubernetesオブジェクトには2つの異なるタイプがあります。それらは`kubernetes.use_endpoints`または`PATRONI_KUBERNETES_USE_ENDPOINTS`環境変数で構成されます。
エンドポイントを使用する¶
これは推奨モードであるにもかかわらず、互換性上の理由からデフォルトでオフになっています。オンの場合、Patroniはクラスター構成とリーダーキーを、作成するそれぞれの`Endpoints`の`metadata:annotations`フィールドに保存します。リーダー情報を含むアノテーションと、実行中のリーダーポッドを指す実際のアドレスの両方が一度に更新されるため、リーダーの変更は`ConfigMaps`を使用する場合よりも安全です。
ConfigMapを使用する¶
このモードでは、PatroniはEndpointsの代わりにConfigMapsを作成し、これらのConfigMapsのメタデータ内にキーを保存します。リーダーを変更するには、リーダーのConfigMapとそれぞれのエンドポイントに対する少なくとも2つの更新が必要です。
トラフィックをPostgresリーダーに転送するには、`role_label`(パトニ構成で構成)でラベルセレクターを使用するようにKubernetesPostgresサービスを構成する必要があります。
場合によっては、たとえば、OpenShiftで実行している場合、ConfigMapを使用する以外に方法がないことに注意してください。
構成¶
PatroniKubernetes settings および settings は、ドキュメントの一般的な章で説明されています。
ロールラベルをカスタマイズする¶
デフォルトでは、Patroniは、 role=master などのノードのロールに基づいて、実行されるポッドに対応するラベルを設定します。ラベルのキーと値は、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
カスタムロールラベルを追加します(例、set`kubernetes.leader_label_value=primary`)。ポッドが再起動されると、パトローニが設定した次の新しいラベルが取得されます。
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マニフェストが含まれています。現在の状態では、権限の問題のため、PersistentVolumesを使用できないことに注意してください。
Spilo Project で永続ボリュームを使用できるフル機能のDockerイメージを見つけることができます。
Kubernetesを使用して実行されているPatroniで構成されたSpiloイメージをデプロイするための Helm chart もあります。
PatroniとSpiloを使用してデータベースクラスターを大規模に実行するには、 postgres-operator プロジェクトをご覧ください。Spiloクラスターを管理するオペレーターパターンを実装します。