容器镜像中心

镜像中心

容器总是存在一个镜像中心,而一个镜像中心的存在主要是为了保存所有的镜像image,而在使用的时候,总是要追求高可用,从而会有不同的架构。

开源是为了更好的闭源,从而一般都是使用registry镜像来直接搭建镜像中心。

在使用这种架构的时候,主要就是使用分布式存储,而在使用registry的时候,在配置文件中的storage中将分布式存储的url及账号密码写入即可。而使用nginx作为前端主要是为了将80端口转换成5000端口,并且nginx可以设置主机名,从而能使用域名的方式来进行推送镜像。

在使用nginx的时候需要注意的是,一个是设置nginx的上传的最大文件的大小,因为对于有的镜像来说,几个G也是很正常的,而nginx默认有1M大小的限制,从而超过了这个大小就会报错request entiry too large;另外一个是nginx的传输有时间的限制的,默认是60s,而对于大文件来说,可能就不止了,设置10分钟试试,否则就会出现报错gateway 504 timeout。

在使用这种架构的时候,优点是可以平行扩展,当前端的处理能力不足的时候,可以多加几个机器来进行处理,但是调用的链路略长,在虚拟机中直接使用两个容器,一个容器是nginx,一个容器是registry。

分布式存储大法好。

另外一种架构就是直接使用本地存储,在两台机器上,选择两个比较大的磁盘,用来挂载镜像存储的位置,毕竟所有的镜像都是存在本地之中。

在这里的高可用主要是需要一个额外的同步进程来进行同步两台机器上的镜像,从而将镜像中心的image保持同步。

在使用registry的时候,每次进行pull的时候很简单,但是每次要删除镜像的时候就比较复杂了,当程序不断的升级,那么镜像会越来越多,虽然如果设计良好,镜像的空间增长是有限的,但是毕竟存在很多的冗余镜像,一种方法是配置文件中开启删除的功能,然后进行批量的删除,还有一种就是全量的替换挂载的目录/var/lib/registry,然后重启容器进行清空无用的image。

在进行替换的时候,总是要传输很大的空间,从而在shell里面执行是不安全的,万一断了呢,从而都是使用screen配合rsync的断点续传功能来使用,scp虽然也不错,但是断了就是断了。。。

screen常用的命令:

开启: screen -S jobname

离开:ctrl+a+d

查看:screen -l

结束:ctrl+d

rsync命令:rsync -azvp srouce destionation

在使用registry的时候,使用http协议就好了,当然你要是用https也是可以的,当直接使用docker puull 域名的时候,注意dockerd中需要加入insecure的选项,标注镜像中心的地址。

原文发布于微信公众号 - SRE运维实践(gh_319dd73ec076)

原文发表时间:2019-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券