web-dev-qa-db-ja.com

Kubernetesを使用したPostgreSQLフェイルオーバー

マスタースレーブレプリケーションをKubernetesで動作させていますが、フェイルオーバーを実装したいと思います。 service = postgresqlおよびrole = masterまたはrole = slaveロールで実行されているポッドがあります。マスターに障害が発生した場合、別のマスターを選択し、その役割ラベルをマスターに変更して、postgresql-masterサービスが新しいマスターを指すようにします。

2つの質問:

  • ポッドからKubernetesAPIに接続して、マスターが停止したときに通知を受け取り、どのポッドが新しいマスターになる必要があるかを確認できますか?
  • 'kubectl label pod postgresql-slave role = master'と言ってラベルを変更しようとすると、実行中のポッドのイメージしか変更できないというメッセージが表示されますが、コマンドヘルプからはできるはずだという印象を受けます。ポッドのラベルを変更します。私は何が間違っているのですか?

更新:ラベルの更新時の正確なエラー

$ ./kubectl get pod -l type=postgresql
POD                       IP           CONTAINER(S)   IMAGE(S)                      Host                  LABELS                        STATUS    CREATED     MESSAGE
postgresql-master-y868v   172.17.0.2                                                127.0.0.1/127.0.0.1   role=master,type=postgresql   Running   3 minutes   
                                    postgresql     genericsites/postgresql:0.1                                                       Running   3 minutes   

vincent@vincent-netbook-e11:~/Documents/Develop/Web/websites-system/installation/kubernetes$ ./kubectl label pod postgresql-master-y868v test=foo
Error from server: Pod "postgresql-master-y868v" is invalid: spec: invalid value '* pod definition in JSON *': may not update fields other than container.image

更新:サービスのラベルを変更できるようです。これにより、問題を回避できる可能性がありますが、もちろん最適ではありません

3

@vincentサーバーのバージョンが古すぎる可能性があります。してみてください kubectl versionそれを確認します。古すぎる場合は、更新してみてください。

1
janetkuo