SUSE Portus + Docker Registry在Rancher环境下的部署实战

在正文之前,我们先来看一下,如果没有容器,通常会如何部署 Docker Registry?关于这个问题,我简单画了一个草图:

下面简单解释一下:

  • Nginx:用来做 Docker Registry 的代理和软件负载均衡Keepalived 采用主备加虚拟 IP 的方式,解决 Nginx 的单点问题,保证 Nginx 服务的高可用性。
  • Docker Registry:这是 Docker 官方开源的私有镜像仓库项目,对应 github 上的 docker-distribution 项目,也是私有镜像仓库的核心。
  • Redis:大名鼎鼎的 Key-Value 数据库,很多应用场景中,将其作为缓存使用。在 Docker Registry中也不例外,用来缓存 Docker Image 的 laryer metadata,带来的好处即是 laryer metadata 的快速访问。
  • Storage Cluster Docker Registry:以存储驱动的方式支持多种后端存储。例如:Docker Registry2.3 目前支持如下的存储驱动:

这里简单做个补充,官方文档也有介绍如何贡献新的 Docker Registry 存储驱动。

下面我们来看一下,在 Rancher 环境下,一个简化版 Docker Registry 的部署结构图,如下图所示:

这个图是以 Rancher 下服务的视角画的,部署这样一个简单的 Docker Registry,需要四个服务,分别是外部存储服务、Redis Cache 服务、Docker Registry 服务和负载均衡服务。用户访问 Docker Registry 通过使用负载均衡服务的IP和端口。Docker Registry 的负载均衡服务,需要做源 IP会话保持配置。

到此为止,我们就在 Rancher 环境下部署了一个简化版的 Docker Registry 服务。至于我为什么说其是简化版呢?是因为现在这个版本存在一些问题。

首先,Docker Registry 本身没有 Web UI,镜像的检索,只能通过命令行工具完成,使用起来非常不方便。

其次,Docker Registry 自身没有基于角色权限访问控制,所有可以访问负载均衡服务的用户都能随意的推送和拉取镜像。

最后,Docker Registry 本身是提供了基于 token 的认证机制,需要接入 Authorization Service,这个服务官方没有实现,需要我们自己实现或者借助开源实现。

SUSE Portus 完美地解决了上述问题。下面我们看一下,在 Rancher 环境下加入 SUSE Portus的服务结构图:

Portus Core Cluster 服务负责给 Docker Registry 提供 token 认证服务和接收 Docker Registry 发送的镜像推送的通知,同步 Docker Registry 中的镜像信息到 SUSE Portus 的数据库中。该服务本身无状态,可以水平扩展PortusCronSync负责定时请求DockerRegistryAPI 同步镜像数据到SUSEPortus的数据库中。

当用户向 Docker Registry 推送一个镜像后,Docker Registry 会发送通知给 SUSE Portus,如果网络闪断,或者 SUSE Portu 服务中断,会做有限次数的重试。这样可能会导致 SUSE Portu 无法收到镜像推送的通知,造成两端数据的不一致。Portus Cron Sync 就是为了解决这个问题而存在的。

SUSE Portus 的 token 认证服务完全满足官方的认证模型,Docker 官方的认证模型如下图所示:

Docker Registry 关于认证服务的配置和通知目标服务的配置,都在 Docker Registry 容器的/etc/docker/registry/config.yml 中:

最后,我们可以按照 Rancher Catalog 的规范,制作一些基础镜像,然后把这个服务 Catalog化,做成一键部署。

原文来源:Rancher Labs

时间: 2024-10-05 19:35:02

SUSE Portus + Docker Registry在Rancher环境下的部署实战的相关文章

全开源深度学习平台PaddlePaddle入手之路(二)----利用Docker在Windows10专业版环境下配置PaddlePaddle

利用Docker在Windows10专业版环境下配置PaddlePaddle 对于PaddlePaddle的安装,查询官网信息,PaddlePaddle提供pip安装和Docker安装运行的使用方式.我们已经了解到Docker在避免环境配置难题上的的巨大优势,加上本人用的是Windows10操作系统,目前官方对于win10版本给出独特的支持,因而选择了在Docker中安装PaddlePaddle. (1)安装docker 在安装Docker前,切记在Windows中打开Hyper-V管理器中(截

mosquitto在Linux环境下的部署/安装/使用/测试

mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. 使用传统源码安装步骤: 步骤1:http://mosquitto.org/files/source/官网下载源码,放到Linux环境中.解压后,找到主要配置文件config.mk,其中包含mosquitto的安装选项,需要注意的是,默认情况下mosquitto的安装需要OpenSSL(一个强大的安全

Hyper-v环境下通过部署SCVMM进行物理机至虚拟机的转换

Hyper-v环境下通过部署SCVMM进行物理机至虚拟机的转换 1.环境介绍 公司已经搭建了一套hyper-v的虚拟化群集,现通过在单台节点(vmhost1)上部署SCVMM平台,对整套HA环境进行统一管理. 本次文档主要介绍下SCVMM进行PToV的部署及实施的详细步骤.所有内容全部在生产环境中正式使用. 2.部署详情 1.安装前准备 本次安装的版本为vmm2012sp1版本 安装sqlserver2012 运行sql中的setup.exe,再左侧栏中选择"安装",进入sql 安装界

Win8环境下 IIS6部署MVC网站出现的无法显示此网页错误

在Win7环境下做好的网站,新的Win8环境发布出现如下图错误: 解决方法如下: 运行:

Solr6.0与Jetty、Tomcat在Win环境下搭建/部署

摘要: Solr6的新特性包括增强的edismax,对SQL更好的支持--并行SQL.JDBC驱动.更多的SQL语法支持等,并且在Solr6发布以后,Solr5还在持续更新,对于想尝鲜Solr6的用户来说,与之前版本有什么不同,让我们一起来探究一下. Solr6用默认的Jetty启动 需要的软件支持 JDK1.8以上 Solr6的安装包(solr-6.0.0.zip 大约140M) Solr自带一个Jetty环境,可以很方便的运行Solr. 直接到解压缩的solr/bin目录运行solr sta

Linux环境下安装部署AWStats日志分析系统实例

AWStats是使用Perl语言开发的一款开放性日志分析系统,可分析Apache网站服务器的访问日志,还可以用来分析Samba.Vsftpd.IIS等日志信息.       此文章主要讲解如何在linux系统下安装部署关于对Apache网站服务站日志分析的AWStats. 实验步骤一,安装部署AWStats分析软件. 一,安装AWStats软件包. 直接将其解压到/usr/local/awstats目录下即可完成安装. 使用命令:mkdir -p /usr/local/awstats tar z

docker之在Linux环境下安装docker

1.首先是Linux环境 (1)下载virtualbox,并进行安装.默认选择即可,同时要注意安装其提示所需的软件. (2)安装软件完成后启动会报错:VirtualBox COM获取对象失败.可参考https://blog.csdn.net/zp_00000/article/details/70207445.修改之后重启电脑就可以启动virtualbox了. 原文地址:https://www.cnblogs.com/xiximayou/p/12264466.html

Linux环境下安装部署MySQL数据库系统实例

      MySQL是一个真正的多线程,多用户的SQL数据库服务,现由Oracle公司负责运营和维护. 一,准备工作. 1,为了避免发生端口冲突.程序冲突的现象,建议查询MySQL软件安装情况,确认没有使用rpm方式安装的mysql-server.mysql软件包,否则建议将其卸载. 使用命令: rpm -q mysql-server mysql                 //查询有无mysql安装软件和服务 rpm -e mysql  --nodeps                 

Redis~Linux环境下的部署

Redis的生产环境建议部署到linux上,而在开发时可以连接windows版本,下面介绍如何在linux上部署redis. $ wget http://download.redis.io/releases/redis-3.2.8.tar.gz $ tar xzf redis-3.2.8.tar.gz $ cd redis-3.2.8 $ make 上面语句wget从互联网上下载一个安装包,tar它将包包解压,make为编译和安装程序. 如果wget工具没有安装到linux上,可以通过yum指令