请教 V 友微服务对外发布升级的问题

2021-05-10 17:56:22 +08:00
 wheeler

如果我有一个应用是由三个容器构成的,这个应用要交给客户部署的。这种场景对外发布应用的话就是直接把镜像交给客户吗?后期应用升级该怎么做呢,发布新的镜像吗?不知道业界的主流实践是什么样的。

本人刚接触微服务的概念,说的不对的请指教哈。要是推荐一些入门的书就更好了。🙏

725 次点击
所在节点    问与答
4 条回复
timethinker
2021-05-10 18:47:47 +08:00
你这个问题其实这个跟微服务没啥关系,跟容器也没有太大的关系,想想没有容器之前我们是怎么交付软件的?有了容器之后区别在哪里?

1 、当你发布的新的镜像,里面包含了最新的代码,那么客户升级的时候必然会拉取这个镜像并启动该镜像的容器。
2 、启动容器的时候,以前的容器如果同时运行,此时适当的切换流量至最新的容器内,如果没有问题,旧容器就可以停止了。
3 、如果不允许同时启动两个不同版本的容器,那么必然要停掉之前的,再启动新的(例如版本迁移,数据结构更改)。

所以这里没有什么神奇的地方,对于不兼容的升级,该停机还是得停机,否则迁移成本太高(你得同时维护新老版本的数据兼容、API 变更等等)。
wheeler
2021-05-10 19:03:46 +08:00
@qwe520liao 谢谢。目前客户希望我们拿到新镜像以后能够在用户界面一键升级,这让我很疑惑。

这相当于容器自己得通之 docker daemon 来完成自己的升级。
timethinker
2021-05-10 19:22:32 +08:00
这个需求可不简单了,毕竟涉及到的东西比较多,可能你需要透过容器调用 Docker 引擎的 API 来实现,这样做就跟你的部署配置耦合了,意味着你需要管理 Docker 的镜像以及容器。

Docker 引擎 API 文档: https://docs.docker.com/engine/api/v1.41/
可以使用 alpine/socat 这个容器将 Docker 的 unix socket 映射为一个可以请求的端口地址 ,加入到跟应用同一个 docker 网络中进行调用,这样你的服务就可以通过一个 HTTP 客户端来请求 Docker 引擎了。
wheeler
2021-05-10 20:06:00 +08:00
@qwe520liao 是的。总感觉明明都用 docker 了,结果升级安装的时候还想隐藏细节的想法很怪异。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776067

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX