我已经使用 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
验证。如果太旧,请尝试更新。