我们目前只是单纯的容器化项目,然后在服务器上跑,也是单节点, 我想请教下大家,我应该如何在服务器上去监听容器仓库中的镜像是有新版本,然后服务器上主动拉取更新。 我们没有用像 k8s 这样的编排和集群工具,目前的也只是单纯的用容器在跑。
目前我正在使用的方式就是写了一个脚本,定时去监听仓库中镜像的 Digest 值然后和服务器上比对,不一致就拉取更新,但是这个脚本识别的不是特别准确,特别是在更新后的健康状态判断的时候。 有没有什么方法或者其他工具推荐的,最好是轻一点,k8s 这种,以我们目前的资源是完全跑不起来的,加上这玩意实际上我也不太会。
1
caomingjun 117 天前 via Android
|
2
IvanLi127 117 天前
有 docker compose 的话,直接定时任务跑 docker compose pull && docker compose up -d 。
这感觉这样朴实无华 |
3
yinmin 117 天前
自动更新镜像,前车之鉴: https://v2ex.com/t/981818
|
4
zx900930 117 天前 2
生产环境千万别整什么自动更新镜像版本,业务镜像一定要使用固定版本号!
除非是某些不影响业务需要频繁更新的中间件。 这个时候纯容器部署(非 k8s )下用 watchtower ,并且打好 label 只更新自己打了标签的那几个容器! k8s 下可以用 argoCD 或者其它 CD 工具。 |
5
fsdrw08 117 天前 via Android
如果用 podman ,那就很简单了,因为 podman 支持自动更新镜像,podman run 的时候加个 label io.containers.autoupdate=registry 就行
参考: https://www.redhat.com/sysadmin/podman-auto-updates-rollbacks |
7
0x5c0f OP @zx900930 关于这个问题,我们目前其实更新的也不是特别频繁,就是比较麻烦,得每次让我守着开发更新,弄成自动更新实际上是不会有什么问题的,只要更新,那么内容一定是经过完整性测试的。只是这个自动执行的步骤需要判定。至于大家说的 watchtower ,这个我也关注过,但是这个东西是肯定不适合生产环境的。
|
8
ETiV 117 天前 via iPhone
手写过,但不是定时检查,而是通过 gitlab cicd pipeline ,最后部署阶段的时候做:
两组服务,A&B 交替启动: 新版本来了的时候判断一下,比如当前 B 在运行中,就修改 A 的 tag ,准备启动 A 。 A 启动成功了去修改 nginx proxy_pass 的配置,test OK 后 nginx reload ,再等待 B 的端口没有连接后杀掉它。 |
9
zx900930 117 天前
@0x5c0f 版本发布后的健康状态可以自己写 healthcheck ,然后用 autoheal 容器监控实现类似 k8s 的 readiness/liveness probe 的自愈功能。
|
10
julyclyde 117 天前
你心里想的:
自动更新应用程序版本 你提问的: 自动更新镜像的版本 这俩事差十万八千里呢 |
11
VirgilChen97 117 天前
千万不要自动更新,发布还是要人工操作,同时看是否有异常。自动拉取更新,你不关注的话线上出问题你都不知道。如果新版本有问题,也无法及时回滚,同时还有可能被自动更新工具再次更新成新的有问题的版本
|
12
guanzhangzhang 117 天前
consul 的 nomad ?
|
13
chf007 117 天前
如果是部署的第三方应用,就不该自动更新,为什么这么执着自动更新呢?一般来讲出问题的概率比较大。
从你的描述上来看,说的不明不白,但是感觉你是想部署自已的业务应用吧,在其它地方打好了镜像,但是服务器是内网或什么原因没办法从其它地方触发拉取镜像的动作,所以想着在服务器上自动更新。这种是个笨办法啊。还是想想内网穿透的什么方案。 |
15
0x5c0f OP @chf007 这并不是第三方应用,就是我们自己的项目,整体应该就是一个很标准的 CI/CD ,CI 是 jenkins 完成,CD 目前我是自己写的一个脚本实现的,只是检查健康状态时不是特别准确,我想看看还有没有其他方案来实现 CD 的功能
|
16
0x5c0f OP @ETiV 如果是这样的话,会不会导致整体结果变得很慢,我把这两个拆分开来,是为了可以手动操作生产环境的更新,也可以通过定是任务自动去判定。目前脚本支持远程触发,也支持定时任务触发,只是健康检查的时候总是判断不太准确。关于两组服务交替启动,我们实际上并不特别需要高可用,我现在只是需要完善整个 CI/CD 流程,就想问一下有没有更好一点的方案或者工具实现。
|
17
chf007 116 天前
dockerfile 中是有健康检查的语句的,要自已实现
但是貌似单机版的健康检查没什么用,你可以试试 Docker Swarm |
18
ala2008 116 天前
自动更新挺危险的吧,除非全流程都一个人
|