一 Harbor 主从介绍
harbor 官方默认提供主从复制的方案来解决镜像同步问题, 通过复制的方式, 我们可以实时将测试环境 harbor 仓库的镜像同步到生产环境 harbor, 类似于如下流程:
Harbor 以 "项目" 为中心, 通过对项目配置 "复制策略", 标明需要复制的项目以及镜像. 管理员在复制策略中指明目标实例, 即复制的 "目的地", 并对它的地址和连接时使用的用户名密码进行设置. 当复制策略被激活时, 源项目下的所有镜像, 都会被复制到目标实例; 此外, 当源项目下的镜像被添加或删除 (push 或 delete), 只要策略还在激活状态, 镜像的变化都会同步到目标实例上去, 如下图所示:
在实际生产运维的中, 需要把镜像发布到几十或上百台集群节点上. 这时, 单个 Registry 已经无法满足大量节点的下载需求, 因此要配置多个 Registry 实例做负载均衡. 手工维护多个 Registry 实例上的镜像, 将是十分繁琐的事情. Harbor 可以支持一主多从的镜像发布模式, 可以解决大规模镜像分发与同步, 架构如下:
二 Harbor 主从部署
2.1 前期准备
节点 | IP 地址 | 备注 |
docker01 | 172.24.8.111 | Docker harbor 主节点,reg.harbor01.com |
docker02 | 172.24.8.112 | Docker harbor 从节点,reg.harbor02.com |
docker03 | 172.24.8.113 | Docker 客户端,用于测试仓库 |
建议所有节点添加 hosts 解析:
- 172.24.8.111 reg.harbor01.com
- 172.24.8.112 reg.harbor02.com
2.1 主从节点部署 Harbor
部署方法可参考《011.Docker 仓库管理》部署.
提示: 主从节点都必须部署 Harbor, 本实验采用 http 形式, 只需要修改 hostname 为对应的域名即可.
注意: Job services 主要用于镜像复制, 本地镜像可以被同步到远程 Harbor 实例上. 因此若采用域名配置, 则需要在 jobservice 的 hosts 中添加主从解析, 为方便修改, 可将使用以下脚本快速在所有容器 hosts 添加相应解析:
- root@docker02:~/harbor# cat addhosts.sh
- #!/bin/sh
- #****************************************************************#
- # ScriptName: test.sh
- # Author: xhy@itzgr.com
- # Create Date: 2018-10-27 15:48
- # Modify Author: xhy@itzgr.com
- #***************************************************************#
- docker ps | awk '{print $1}'>./dockerlist.txt
- for id in `cat ./dockerlist.txt`
- do
- HOSTS=`docker inspect $id | grep hosts | awk -F "\"" '{print $4}'`
- echo -e "172.24.8.111 reg.harbor01.com\n172.24.8.112 reg.harbor02.com">> $HOSTS
- done
在 Harbor 部署完毕后执行该脚本: chmod u+x addhosts.sh && bash addhosts.sh.
2.2 主节点测试
浏览器使用默认账号和密码 Harbor12345 访问: http://reg.harbor01.com
2.3 创建用于复制的测试项目
2.4 仓库管理新建从目标
2.5 创建复制策略
2.6 docker 客户端测试
- root@docker03:~# vi /etc/hosts
- 172.24.8.111 reg.harbor01.com
- 172.24.8.112 reg.harbor02.com
- root@docker03:~# vi /etc/docker/daemon.JSON
- {
- "insecure-registries": ["http://reg.harbor01.com","http://reg.harbor02.com"]
- }
- root@docker03:~# systemctl daemon-reload
- root@docker03:~# systemctl restart docker.service
- root@docker03:~# docker login reg.harbor01.com # 登录 registry
- Username: admin
- Password:
提示: 公开的 registry 可 pull, 但 push 也必须登录, 私有的 registry 必须登录才可 pull 和 push.
- root@docker03:~# docker pull hello-world
- root@docker03:~# docker tag hello-world:latest reg.harbor01.com/copyregistry/hello-world:xhy
- root@docker03:~# docker push reg.harbor01.com/copyregistry/hello-world:xhy
浏览器使用默认账号和密码 Harbor12345 访问: http://reg.harbor01.com, 查看是否同步状态:
浏览器使用默认账号和密码 Harbor12345 访问: http://reg.harbor02.com, 查看是否同步成功:
参考链接: https://www.cnblogs.com/breezey/p/9444231.html
参考链接: https://blog.csdn.net/hiyun9/article/details/79655385
来源: https://www.cnblogs.com/itzgr/p/10177143.html