比方说,我有一个Web服务器的Docker容器(如Apache 2)。 现在我想更新它下面的操作系统。 这个SF答案说最好的方法是重build基础图像和我的Apache图像。 但是部署映像意味着停机时间,因为在创build新容器之前必须删除旧容器,因此只有一个容器绑定到端口80/443。
但是,如何以零停机时间部署此更新? 我应该使用负载均衡器并使用集装箱间通信吗? 我该如何更新负载均衡器?
是的,您应该使用负载平衡器并一次更新一个实例。 我不确定集装箱间的通讯是在哪里进行的。
举一个例子,假设你有一个负载平衡器来为你的站点A服务。用户只能连接到它,只知道它是“A”。 负载均衡器知道有两个或更多的后端(B,C等),以及它们是VM还是容器并不重要。
然后,你想升级后端,在这种情况下是Apache实例。
然后,对C,D等进行相同的处理
请注意,从2013年11月开始, Docker容器就地升级就有了一个开放的请求 ,但似乎并没有太多的进展,所以上面的解决scheme就是你应该做的。
据推测,你问这是因为你已经在这个模型中运行一个实时网站,你想升级它没有停机。 所以,我们需要达到上面的理想目标状态,但是是递增的。
我们假设:
如果这些假设是错误的,你应该首先修正它,这是正确的。
然后,按照下列步骤操作:
最简单的select是不要运行自己的平衡器。 例如,如果您使用的是提供负载平衡即服务的云平台,请考虑使用它,然后维护和更新负载平衡器不是问题。
如果您正在运行自己的负载平衡器,添加另一个间接层(即DNS)将有所帮助。 我们假设如下:
我们继续如下:
将B的IP地址与A一起添加到DNSparsing中
如果B有任何错误,撤消如下:
你完成了。
看到这些写作和工具可以帮助你自动化的过程,但总体思路是一样的:
“计算机科学中的所有问题都可以通过另一个层次的间接来解决,当然除了太多的间接问题之外。” – 大卫惠勒