使用kubernetes部署高可用Docker私有镜像仓库

 20160720205158
Registry介绍

Registry是Docker官方推出的镜像仓库,用于存储Docker的镜像。Docker官方推出了Docker Trusted Registry(DTR)并发布了V2版API,相对于V1版本有很大改变和优化。

快速预览:

  • 下载Registry镜像
  • 创建信任证书
  • 创建部署文件
  • 创建部署脚本
  • 部署私有镜像仓库
  • 构建registry镜像
  • 使用私有镜像仓库
  • 后记
  • 准备存储设备
下载Registry镜像

本文使用Docker官方registry:2.1镜像,先下载镜像:

docker pull registry:2.1
创建自信任证书

可以通过nginx作为registry的反向代理实现可信访问,这种方式已经被集成到最新的DTR中。

我们使用自信任证书的方式实现私有镜像的访问控制:

创建certs文件夹,用于保存证书文件:

mkdir -p certs

创建证书,在Common Name处填写私有镜像仓库的地址,例如registry.docker,其他默认,一路回车:

openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt

查看certs文件夹,看是否生成了两个文件:

Is certs

domain.crt

domain.key
构建registry镜像

使用Docker官方的registry:2.1作为集成镜像,构建自信任镜像仓库的docker镜像。

编写Dockerfile:
20160720211642

构建yeepay/registry:2.1镜像:

docker build -t yeepay/registry:2.1
创建部署文件

自信任registry镜像构建完成后,接下来就是将registry部署到kubernetes集群中。

创建rc文件:

20160720211702

20160720211711

创建svc文件:

20160720211720

准备存储空间

使用Ceph RBD创建块设备,先创建一个1T的硬盘:

rbd create registry -s 1024000

映射该设备:

rbd map registry

查看设备的挂载点:

rbd showmapped | grep registry

10 registry /dev/rbd9

格式化硬盘:

mkfs.ext4/dev/rbd9

取消映射:

rbd unmap registry

在registry空间不足时,随时可以通过rbd实现无感知的扩容。

创建部署脚本

每次构建镜像,部署和删除registry应用都要重复很多命令,所以,我们使用make来简化构建和部署操作。

创建Makefile:

cat Makefile

20160720211744

下面介绍如何使用make来简化部署操作:

  • make build: 构建yeepay/registry:2.1镜像
  • make push: 试验将registry镜像推送至原有的镜像仓库,如果没有旧的仓库,这步请忽略
  • make run:  以裸docker的方式启动registry,启动后可以测试registy是否能够正常工作,如果正常才在容器云中部署
  • make clean: 清除构建的yeepay/registry:2.1镜像
  • make deploy: 在容器云中部署registry
  • make clear: 在容器云中清除registy的部署

在容器云没有界面化的团队,可以优先考虑将部署脚本使用这种方式管理,这些Makefile脚本也应该放在git/svn中进行管理。

部署Registry

使用make将registry部署到容器云中:

make deploy

可以使用kubectl命令查看registry是否已经部署成功:

kubect1 get pods | grep registry

kubect1 get svc | grep registry
使用私有镜像仓库

将certs下的文件domain.crt重新命名为ca.crt,它将作为每个docker daemon访问私有镜像仓库的凭证。

颁发证书的过程:将ca.crt分发给需要访问私有镜像仓库的部门,使用方将ca.crt放置在/etc/docker/下,重启docker daemon即可。

验证私有仓库的使用:

docker tag busybox registry.docker:5000/busybox

docker push reistry.docker:5000/busybox

dockerpull registry.dockeer:5000/busybox

上述操作成功完成,说明镜像仓库可以正常使用了~

后记

最新版本的Docker Trust Registry(DTR)相比之前版本有了重大改进,本文中所提及的镜像仓库是指registry:2.1版本。 我们将在以后的文章中详细介绍最新版本DTR在容器云中的部署和使用经验。

本文原标题:使用容器云部署高可用私有镜像仓库

K8S中文社区微信公众号
分享到:更多 ()

评论 1

评论前必须登录!

 

  1. #1

    本人把所有的gcr.io/google-containers下的docker镜像全部都同步到中央库,并且每天会定时更新,请关注:
    https://hub.docker.com/u/googlecontainer/

    blademainer8年前 (2017-05-18)