我们有一些在Google Kubernetes Engine上运行的API服务,我们不时需要进行一些维护,因此我们希望API服务返回503以及一些有关停机时间的可配置消息。
将API服务从与服务链接的Kubernetes部署返回503并不是可靠的方法,因为可能需要关闭/重新启动API容器。
我的一个想法是要有一个特定的部署/吊舱,我们将配置要使用的服务,并且该服务仅返回503,其中包含有关服务维护的一些信息。但是,如果我们要进行集群升级,则这种方法将不成立,因为可能会有一段时间部署/吊舱也将不可用。
那么有什么方法可以不必依赖部署/吊舱吗?意味着配置超出了特定Kubernetes集群的范围?
答案 0 :(得分:0)
如果在Kubernetes级别设置此配置,则在群集升级期间它将永远不会保留。您必须依靠外部解决方案,例如,在Cloud Fuctions上托管简单功能。您也可以使用例如AWS Cloud Formation实现它。
您可以在DNS上执行运行状况应用程序和维护消息之间的切换,但我不依赖它,因为它可能会花费一些时间,具体取决于您的TTL配置。我希望在您的LoadBalancer解决方案上执行此操作。
答案 1 :(得分:0)
您可以使用ingress和2个部署(api和503),并且只要要切换就可以编辑入口。
kubectl edit ingress ${INGRESS_NAME}
在GKE中,如果您使用regional cluster(3个主服务器),至少2个节点池,并且对不同节点池上的节点使用node affinity,则可以实现零停机时间升级,以便每次更新时使用--node-pool标志的一个节点池,另一个节点池上运行着一个容器。
您也可以参考Kubernetes best practices document来了解有关零停机升级的更多信息。