使用 Kubernetes 进行 PostgreSQL 故障转移

使用 Kubernetes 进行 PostgreSQL 故障转移

我已经使用 Kubernetes 实现了主从复制,但现在想要实现故障转移。我运行的 Pod 具有 service=postgresql 和 role=master 或 role=slave 角色。当主服务器发生故障时,我想选择另一个主服务器并将其角色标签更改为 master,这样 postgresql-master 服务就会指向新的主服务器。

两个问题:

  • 我是否可以从一个 pod 连接到 Kubernetes API,以便在主节点死亡时收到通知,并查看哪个 pod 必须成为新的主节点?
  • 当我尝试通过“kubectl label pod postgresql-slave role=master”更改标签时,我收到一条消息说我只能更改正在运行的 pod 的镜像,尽管我从命令帮助中得到的印象是我应该能够更改 pod 的标签。我做错了什么?

更新:更新标签时出现确切错误

$ ./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

更新:似乎确实可以更改服务的标签,这也许可以让我以黑客的方式解决问题,但当然不是最佳选择

答案1

@vincent 可能是服务器版本太旧了。请尝试kubectl version验证。如果太旧,请尝试更新。

相关内容