docker - 如何以简单的方式在不停机的情况下更换负载均衡器Docker容器

标签 docker kubernetes docker-compose nginx-reverse-proxy downtime

我在同一主机上运行着大约30个不同的站点,每个站点都使用docker-compose进行管理。其中一些使用Nginx,一些使用Apache。然后,有一个反向代理容器暴露于Internet上,该容器运行Nginx,有一堆虚拟主机,并将流量重定向到正确的容器。那30个不同的站点只是我在尝试各种想法,并且他们没有很多客户。

我知道使用docker-compose在生产中使用是不明智的,因为使用新版本关闭和重新打开容器仍需要时间(<3秒)。我也知道docker swarm和K8S,如果这30个不同的站点中的任何一个足够大,我将使用它们。到那时,我可能会重组所有内容以实现零停机时间部署。但是我要问的是不同的。

我仍然想使用docker compose来管理普通容器,因为它非常方便并且因为我只有1个节点,所以运行K8S会显得过大,并且实际上不会有零停机部署。但是,我想不时地替换反向代理容器(可能是每周1-3次),并且我不想因为使用这单个容器而造成任何停机,因为这30个站点都将受到影响。我可以接受单个站点的停机时间少于3秒,因为大多数站点完全没有变化,而且那些站点都是实验性的,但是对于反向代理而言,停机时间少于3秒让我感到不舒服。

那么,有没有办法让我在不停机的情况下更换反向代理容器?真的很简单轻巧吗?不必使用docker compose,但仍应整体使用容器。我正在考虑这些:

  • 使用KIND(Kubernetes IN Docker),它在单个主机上运行并创建容器,使它们显示为节点。这需要800MB-1GB RAM,所以这是不受欢迎的
  • 无限期保持反向代理容器的状态,更改其中的配置,重新启动Nginx(停机时间少于1秒),但这严重破坏了容器的用途,我不能只是不再关心容器了,这就是最初的原因是我想将应用程序容器化。

  • 还有其他选择吗?

    最佳答案

    使用Kubernetes即使在单个节点上,它也可以为您管理大多数此类问题,并且当您确实要转移到多台主机时,有99%的就绪。将有一个学习曲线,但这是值得的。

    我建议使用托管服务(DigitalOceanEKSGKEAKS),但是可以使用microk8s快速设置包含管理的单节点群集。

    可以通过kompose轻松携带docker compose配置。

    Kubernetes ingress controller(通常是nginx)将替代反向代理功能,除升级外很少需要替代。入口配置是从ingress definitions自动生成的。在极少数情况下,如果设置为Kubernetes,Kubernetes可以在不停机的情况下对其进行管理。入口 Controller 只是另一个部署。

    关于docker - 如何以简单的方式在不停机的情况下更换负载均衡器Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59803696/

    相关文章:

    mongodb - docker-compose无法为mongodb创建用户和密码

    mongodb - Docker撰写镜像文件夹

    docker - 主机名和服务名有什么区别?

    docker - 在 Kubernetes 设置期间保持我的服务器 O/S 的静态 IP 地址

    linux - kubernetes 如何在 docker 容器内工作

    kubernetes - status.lastScheduleTime 何时更改?

    python - 使用 Python 客户端在 Kubernetes 中批准 CSR

    amazon-web-services - kops - 得到错误的 kubectl 上下文

    amazon-web-services - Docker compose ECS集成: load balancer is of type application,项目需要网络

    php - Docker 服务未链接 - WordPress 未连接到 MySQL