作者简介

211工程院校贵州大学管理学院硕士研究生、互联网金融行业资深DevOps研发工程师. 曾在国内多家知名互联网公司 平安科技、微众银行、顺丰科技、魅族任职. 具有多年国内一线互联网公司自动化运维平台设计与开发经验。
在上一篇文章中我们介绍了单机版本harbor的安装与配置,但是这种单机部署显然无法满足在实际生产环境中的需求,因为在生产环境中是必须要保证应用服务的高可用性的,以下我为大家提供两种Habor高可用解决方案。
在上节内容中我们已经成功的部署了单机版的Harbor并可以正常对外提供容器镜像仓库服务, 我们现在开始向Harbor中推拉镜像1.1.1 在Harbor WEB控制台中创建项目os_base(过程略)1.1.2 将要推送的镜像标签更改为HarborIP/projectName/imageName:version形式[root@localhost ~]# docker tag docker.io/centos:latest 172.16.70.91/os_base/centos:latest1.1.3 尝试登录Harbor可能会出现如下错误[root@localhost ~]# docker login 172.16.70.91 需要在docker启动参数中加入 --insecure-registry参数, 将该参数的值置为Harbor仓库的地址。默认情况下Docker未配置该参数, 如下图所示:
步骤2: 寻找docker启动配置文件查看其中配置信息[root@localhost ~]# find -name docker.service[root@localhost ~]# cat usr/lib/systemd/system/docker.service
Description=Docker Application Container EngineDocumentation=http://docs.docker.comWants=docker-storage-setup.serviceRequires=docker-cleanup.timer
EnvironmentFile=-/run/containers/registries.confEnvironmentFile=-/etc/sysconfig/dockerEnvironmentFile=-/etc/sysconfig/docker-storageEnvironmentFile=-/etc/sysconfig/docker-networkEnvironment=GOTRACEBACK=crashEnvironment=DOCKER_HTTP_HOST_COMPAT=1Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbinExecStart=/usr/bin/dockerd-current \ --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \ --default-runtime=docker-runc \ --exec-opt native.cgroupdriver=systemd \ --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \ --init-path=/usr/libexec/docker/docker-init-current \ --seccomp-profile=/etc/docker/seccomp.json \ $DOCKER_STORAGE_OPTIONS \ $DOCKER_NETWORK_OPTIONS \ExecReload=/bin/kill -s HUP $MAINPID
WantedBy=multi-user.target
在配置文件中可以看出docker在启动过程中会关联OPTIONS、DOCKER_STORAGE_OPTIONS等变量,这些变量均来自EnvironmentFile中,如/etc/sysconfig/docker、/etc/sysconfig/docker-storage等.
步骤3. 修改/etc/sysconfig/docker 配置文件,在OPTIONS变量值尾部加入insecure-registry参数,如下所示:OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false --insecure-registry=172.16.70.91'
此时docker进程的启动项中新增了insecure-registry配置参数. 重新docker login登录Harbor,登录成功!
[root@localhost ~]# docker push 172.16.70.91/os_base/centos [root@localhost ~]# docker pull 172.16.70.91/os_base/centos 2.1 双主复制
Harbor官方默认提供主从复制的方案来解决镜像同步问题,通过复制的方式,我们可以实时将harborA仓库的镜像同步到harborB仓库中,在实际生产运维的中,往往需要把镜像发布到几十或上百台集群节点上。此时单个Harbor是无法满足大量节点的下载需求的,因此要配置多个Harbor实例做负载均衡。但是手工维护多个Harbor实例上的镜像是十分繁琐的事情。Harbor可以支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题。镜像同步架构图如下所示:但是仅仅单靠主从同步,仍然解决不了harbor主节点的单点问题。
2.2 多harbor实例共享后端存储
共享后端存储就是多个Harbor实例共享同一个后端存储(NFS、DB、Redis),任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置的负载均衡器(HAPROXY、LVS、F5等)将进来的请求分流到不同的实例中去处理,这样既实现了负载均衡又避免了单点故障。架构图如下所示:使用共享后端存储方案需要注意以下几个问题:
共享存储的选取: Harbor支持多种类型的后端存储包括AWS S3、Openstack Swift, Ceph等;在我们的演示环境中采用NFS作为共享存储解决方案。
Session在不同的实例上共享: 在Harbor中,默认session会存放在redis中,我们搭建一台独立的Redis服务器即可。
Harbor多实例数据库共享问题: 可以将harbor中的数据库拆出来独立部署,修改配置文件让多实例共用一个外部数据库,数据库的高可用也可以通过数据库的高可用方案保证。
在下一篇文章中,我们仍然是秉持可操作、能落地的原则来介绍Harbor的高可用集群的详细部署过程。
如果本文可以对您的工作学习带来帮助,请扫描左侧赞赏码以资鼓励作者;文章勘误请扫描右侧二维码联系作者。
