我有两个外部的AcriveMQ url,说mqA和mqB,这是由pod my-pod使用。mqA和mqB都不在kubernetes集群中,也不是我管理的。mqqa通常被使用,因此当它不可用时(0.1%的概率),mqB可以被使用。
当前如果mqA坏了,那么my-pod崩溃并试图重新启动。
对我来说,重新启动pod或一些合理的停机时间进行切换是可以的。
所以基本上我想有一种外部服务的故障转移。
在Kubernetes中有通用的方法吗?比如一个外部名字就可以了。因此,当mqA无法ping通时,它会将externalName切换为mqB。
不幸的是,Kubernetes没有运行主-被动式工作负载的原生概念。在这个阶段,您最好在客户端进行故障转移,或者使用一些自定义操作符逻辑和代理来为您执行故障转移。
这里有一些非常好的信息,你可能会对kubernetes开发人员的主备建议感兴趣,并提供一些可能的临时解决方案:
- https://github.com/amelbakry/kubernetes-active-passive
- https://github.com/andreykaipov/active-standby-controller
- https://github.com/kubernetes/kubernetes/issues/45300 issuecomment - 737658596