本章概述
- Harbor 功能官方介绍
- 安装harbor
- 访问harbor验证
- 使用harbor镜像仓库上传下载镜像
- harbor镜像扫描
- 实现harbor高可用
前言
Harbor是一个用于存储和分发Docker镜像的企业级Registry 服务器,由vmware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控,另外,Harbor 也提供了高级的安全特性,诸如用户管理、访问控制、活动审计和镜像安全扫描等。
vmware 官方开源服务列表地址:https://vmware.github.io/harbor/cn/
harbor 官方 github 地址:https://github.com/vmware/harbor
harbor 官方网址:https://goharbor.io/
harbor服务器规格推荐:
CPU:8C
内存:16G以上(包括16G)
硬盘:越大越好(根据镜像需求而定),做raid10
网卡:最起码是千兆网卡,最好是万兆网卡
4.1 Harbor 功能官方介绍
功能介绍
基于角色的访问控制:用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
镜像复制:镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
图形化用户界面:用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
AD/LDAP支持:Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
RESTful API - RESTful API :提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
部署简单:提供在线和离线两种安装工具,也可以安装到 vSphere 平台(OVA 方式)虚拟设备。
harbor组件
nginx:harbor 的一个反向代理组件,代理 registry、ui、token 等服务。这个代理会转发 harbor web 和 docker client 的各种请求到后端服务上。
harbor-adminserver:harbor 系统管理接口,可以修改系统配置以及获取系统信息。
harbor-db:存储项目的元数据、用户、规则、复制策略等信息。
harbor-jobservice:harbor 里面主要是为了镜像仓库之前同步使用的。
harbor-log:收集其他 harbor 的日志信息。
harbor-ui:一个用户界面模块,用来管理 registry。
registry:存储 docker images 的服务,并且提供 pull/push 服务。
redis:存储缓存信息
webhook:当 registry 中的 image 状态发生变化的时候去记录更新日志、复制等操作。
token service:在 docker client 进行 pull/push 的时候负责 token 的发放。
逻辑架构
为了实现harbor高可用,一般会在两个服务器上部署harbor,两个harbor节点之间进行数据同步,一个节点挂掉,不影响harbor的使用
4.2 安装harbor
由于在1.8版本到1.9版本以后,harbor的配置文件有harbor.cfg变成harbor.yml,因此安装时注意harbor的版本。这里采用最新版本2.8.1的harbor进行安装,如果在生产环境,不建议使用最新版本,可以使用早几个版本的稳定版。
下载地址:https://github.com/vmware/harbor/releases
安装文档:https://github.com/vmware/harbor/blob/master/docs/installation_guide.md
harbor官方提供了两种harbor安装方式:
离线安装:下载的安装包比较大,包括了所有需要的安装包,下载完以后,不需要联网就可以安装harbor
在线安装:下载的安装包比较小,安装时需要连接互联网在线下载需要的安装包
4.2.1 安装前准备工作
1、环境准备
两台服务器信息如下:
地址:172.31.7.153、172.31.7.154
操作系统:ubuntu 1804
服务器规格:2C4G #实验环境最低配置,实际环境根据需求而定
硬盘:如果实验使用虚拟机,可以添加一个硬盘作为专门用来存放镜像的存储
2、格式化新添加的硬盘(该硬盘专门用于harbor存放镜像文件)
(1)查看本地硬盘:lsblk
(2)对硬盘进行分区,创建占用所有硬盘的一个分区/dev/sdb1
root@docker_harbor01:/usr/local/src/harbor# fdisk /dev/sdb
Command (m for help): n #创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p #创建主分区
Partition number (1-4, default 1): #默认即可
First sector (2048-104857599, default 2048): #默认即可
Last sector, +sectors or +size{K,M,G,T,P} (2048-104857599, default 104857599):
Created a new partition 1 of type 'Linux' and of size 50 GiB.
Command (m for help): w #保存创建的分区
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
(3)查看分区
(4)格式化分区,然后df -h查看该分区
mkfs.ext4 /dev/sdb1
(5)创建存放镜像的目录/data/harbordata,然后挂载到新创建的分区
mkdir /data/harbordata -p
vim /etc/fstab
/dev/sdb1 /data/harbordata xfs defaults 0 0
mount -a #将目录挂载
4.2.2 安装docker
安装harbor之前需要先安装docker环境,否则harbor无法启动(要求docker版本在17.06以上版本)
1、为了方便,这里使用以下脚本安装docker:(二进制安装)
或者参考1.2.2章节的操作步骤进行docker二进制安装
#!/bin/bash
#docker-install
docker_version="20.10.24"
#添加清华大学镜像源
cat > /etc/apt/sources.list << EOF
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
EOF
#更新镜像源
apt update
#下载docker二进制安装包并解压
mkdir -p /usr/local/src
cd /usr/local/src/
ls docker-${docker_version}.tgz
if [ $? -eq 0 ];then
echo "file exist,no need to download"
tar -xvf docker-${docker_version}.tgz -C /usr/local/src/
cp /usr/local/src/docker/* /usr/bin/
else
wget mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/docker-${docker_version}.tgz
tar -xvf docker-${docker_version}.tgz -C /usr/local/src/
cp /usr/local/src/docker/* /usr/bin/
fi
#编辑containerd.service文件
cat > /lib/systemd/system/containerd.service << EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
#编辑docker.service文件
cat > /lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
# Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
# Both the old, and new location are accepted by systemd 229 and up, so using the old location
# to make them work for either version of systemd.
StartLimitBurst=3
# Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
# Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
# this option work for either version of systemd.
StartLimitInterval=60s
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not support it.
# Only systemd 226 and above support this option.
TasksMax=infinity
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
#编辑docker.socket文件
cat > /lib/systemd/system/docker.socket << EOF
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
#增加docker用户和组(如果不加,docker会启动失败)
groupadd docker
useradd docker -g docker
#创建普通用户,加入docker组
id -u magedu > /dev/null
if [ $? -eq 0 ];then
echo "user exist"
else
useradd magedu -G docker
fi
#启动containerd服务
systemctl enable containerd.service
systemctl restart containerd.service
#启动docker服务
systemctl enable docker.service
systemctl restart docker.service
#启动docker.socket,设置开机自启动
systemctl enable docker.socket
systemctl start docker.socket
#添加镜像加速器
cd /etc/docker
touch daemon.json
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
]
}
EOF
#更改内核参数
cat > /etc/sysctl.conf << EOF
net.bridge.bridge-nf-call-arptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p
#docker安装成功
echo "docker install sucess!!!"
2、执行脚本,安装docker
bash binary-docker_install.sh
3、安装完成以后,执行docker info命令验证
4.2.3 安装docker-compose
harbor安装除了依赖docker之外,还依赖docker-compose这个编排工具,因此docker环境安装完成后,还需要安装docker-compose,否则harbor无法安装(要求docker-compose版本为1.18.0以上版本)
注意:这里我们为了安装harbor,只需安装docker-compose即可,暂时不需要知道docker-compose如何使用,docker-compose的用法,在后面会提到
1、下载docker-compose安装包
github下载:https://github.com/docker/compose/releases
使用命令下载docker-compose(2.16.0版本)二进制文件
cd /usr/local/src
wget https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64
2、为二进制文件赋予可执行权限
chmod a+x docker-compose-linux-x86_64
3、为了便于全局执行命令,把二进制复制到/usr/bin目录下
cp /usr/local/src/docker-compose-linux-x86_64 /usr/bin/docker-compose
4、验证
执行命令确保docker-compose命令可以执行
docker-compose version
4.2.4 安装harbor
1、下载harbor离线安装包
本次安装使用2.7.2版本的harbor,推荐使用离线安装方式
(1)离线安装包下载(推荐这种安装方式)
cd /usr/local/src/
wget https://github.com/goharbor/harbor/releases/download/v2.7.2/harbor-offline-installer-v2.7.2.tgz
(2)在线安装包下载(不推荐的安装方式)
cd /usr/local/src/
wget https://github.com/goharbor/harbor/releases/download/v2.7.2/harbor-online-installer-v2.7.2.tgz
2、解压并编辑harbor配置文件
root@docker_harbor01:~# cd /usr/local/src/
root@docker_harbor01:/usr/local/src# tar -xvf harbor-offline-installer-v2.7.2.tgz
root@docker_harbor01:/usr/local/src# cd harbor/
root@docker_harbor01:/usr/local/src/harbor# cp harbor.yml.tmpl harbor.yml
root@docker_harbor01:/usr/local/src/harbor# vim harbor.yml
#harbor地址,可以写ip,也可以写域名,如果写域名,需要在访问harbor的本地hosts文件添加地址解析。当配置harbor镜像复制时,要将域名修改为主机ip地址,否则会报错
hostname: harbor.magedu.com
#http协议,保持默认即可
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80
#https协议,如果启用,需要配置公钥证书和私钥证书,这里暂时不开启,将以下内容注释掉
# https related config
#https:
# https port for harbor, default is 443
# port: 443
# The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
#harbor登录密码,默认为Harbor12345,可以自定义密码
harbor_admin_password: 123456
#harbor数据存储目录,默认为/data,这里修改为自定义的/data/harbordata目录,该目录可以挂载到存储或其他地方,专门用来存放harbor数据,即使服务器宕机,数据也不会丢失
data_volume: /data/harbordata
3、安装harbor
cd /usr/local/src/harbor
root@docker_harbor01:/usr/local/src/harbor# ./install.sh --with-trivy #--with-trivy是指开启镜像扫描
出现以下输出说明安装成功
4.3 访问harbor验证
1、在访问harbor的主机本地hosts添加以下地址解析
172.31.7.153 harbor.magedu.com
2、浏览器访问harbor:harbor.magedu.com
3、输入账号密码,访问控制台
账号为admin,密码为harbor配置文件中harbor_admin_password参数的值
4、创建项目,用于存放镜像
项目名称:设置项目名称
访问级别:如果不勾选公开前面的按钮,是私有仓库,这里勾选上
存储容器:-1是指不限量,如果需要限量,可根据需求进行配置
镜像代理:保持默认即可
创建完成后,如下所示:
4.4 使用harbor镜像仓库上传下载镜像
4.4.1 上传前准备工作
要想在客户端使用harbor镜像仓库,需要准备以下工作:
1、在客户端本地hosts文件中添加地址解析
root@docker_server01:~# vim /etc/hosts
172.31.7.153 harbor.magedu.com
2、在客户端添加非安全镜像仓库(注意:如果镜像仓库使用域名,则daemon.json文件中添加非安全仓库也需要添加域名,如果镜像仓库是ip地址,daemon.json文件中添加非安全仓库也需要添加ip地址,否则上传镜像会报错)
root@docker_server01:~# vim /etc/docker/daemon.json #如果存在多个镜像,可以同时列出,用逗号隔开
{
"registry-mirrors": ["https://3lvei2wk.mirror.aliyuncs.com"],
"insecure-registries":[ "http://172.31.7.151:5000","http://harbor.magedu.com"]
}
重启docker服务,使配置生效
root@docker_server01:~# systemctl daemon-reload && systemctl restart docker
查看docker info信息中的非安全仓库:
4.4.2 上传下载镜像
4.4.2.1 上传镜像
1、为本地镜像打tag(tag格式:镜像仓库域名/项目名称/镜像名称:tag号)
root@docker_server01:~# docker tag nginx:1.18.0 harbor.magedu.com/harbor2023/nginx:1.18.0
2、登录harbor镜像仓库,然后上传镜像
登录账号密码就是登录web页面harbor的账号密码
root@docker_server01:~# docker login harbor.magedu.com
上传镜像
root@docker_server01:~# docker push harbor.magedu.com/harbor2023/nginx:1.18.0
3、在harbor镜像仓库控制台查看镜像已存在,说明上传成功
4.4.2.2 下载镜像并启动容器
1、在其他服务器下载下载harbor镜像仓库中的镜像
注意:在下载前要添加hosts地址解析,以及添加非安全镜像仓库
root@docker_server02:~# docker pull harbor.magedu.com/harbor2023/nginx:1.18.0
2、启动镜像为容器
root@docker_server02:~# docker run -it -p 8088:80 harbor.magedu.com/harbor2023/nginx:1.18.0
4.5 harbor镜像扫描
4.5.1 开启镜像扫描
harbor镜像扫描器可以扫描镜像文件,检查镜像文件中是否存在安全漏洞,因此一般情况下都会开启扫描器
1、开启扫描器方法:
方法1:在安装时开启
在安装harbor时,添加--with-trivy参数,即:
cd /usr/local/src/
root@docker_harbor01:/usr/local/src/harbor# ./install.sh --with-trivy
备注:harbor 早期版本开启扫描器使用--with-clair参数,2.2版本以后已经丢弃该参数,使用--with-trivy参数开启扫描器
方法2:在安装后开启
如果已经harbor已经安装完成,可以执行以下命令开启镜像扫描器
cd /usr/local/src/
root@docker_harbor01:/usr/local/src/harbor# ./prepare --with-trivy
2、在harbor控制台查看扫描器(扫描器状态是健康状态说明扫描器可以正常使用)
3、查看镜像扫描
找到项目下的镜像文件,点击扫描器
4.5.2 手动对镜像进行扫描
1、点击项目-项目仓库harbor2023,进入下一页面
2、点击镜像harbor2023/nginx
3、勾选镜像,然后点击扫描
4、查看扫描结果
5、查看漏洞内容
点击镜像,进入下一页面
把页面拉到最下面,查看漏洞内容
4.5.3 开启镜像自动扫描
上传镜像到harbor,harbor镜像仓库不会自动扫描镜像,需要人为手动扫描。可以开启自动扫描,镜像一旦上传,harbor就会自动进行镜像扫描。
1、登录harbor,点击项目-镜像仓库
2、点击配置管理,勾选自动扫描镜像
4.6 实现harbor高可用
高可用实现方式:
方法1:使用共享存储,harbor将镜像存储到共享存储,node节点下载镜像时,harbor将存储中的数据返回给客户端
方法2:如果没有共享存储,可以基于镜像复制的方式,实现高可用。即几台harbor服务器之间进行数据同步,使得数据保持一致
Harbor 支持基于策略的 Docker 镜像复制功能,这类似于 MySQL 的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用很多互联网公司使用harbor 搭建内网 docker 仓库的案例,并且还有实现了双向复制的案列,本文将实现单向复制的部署。
逻辑架构图
备注:正常情况下,为了实现高可用,应部署两台harbor服务器,开启镜像复制实现数据同步。由haproxy负载两台harbor服务器,然后在两台haproxy服务器上启用keepalive保证haproxy的高可用。
环境准备:
harbor01:172.31.7.153
harbor02:172.31.7.154
负载均衡harproxy01:172.31.7.152
负载均衡harproxy02:172.31.7.155
keepalive vip地址:172.31.7.188
4.6.1 部署harbor
1、要实现harbor的镜像复制,需要两台harbor服务器。
具体操作步骤可以操作4.2章节,这里不在复述。(如果复用4.2章节部署的harbor服务器,注意要将harbor配置文件中的hostname参数的值修改为harbor服务器ip地址)
注意:在部署harbor过程中,修改harbor配置文件harbor.yaml时,hostname参数需要配置为当前harbor服务器的ip地址,而不能配置为域名,如果配置为域名,在仓库管理-新建目标时会出现新建连接失败的报错。
2、在两台harbor服务器(172.31.7.153/172.31.7.154)的控制台上分别创建存放基础镜像的镜像仓库baseiamges
3、上传镜像进行验证
(1)在客户端添加非安全镜像仓库(将两台harbor服务器地址均添加到非安全仓库列表中)
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://3lvei2wk.mirror.aliyuncs.com"],
"insecure-registries":["http://172.31.7.153","http://172.31.7.154"]
}
root@docker_server01:~# systemctl daemon-reload && systemctl restart docker
(2)给本地镜像打tag
docker tag nginx:1.18.0 172.31.7.154/harbor2023/nginx:1.18.0
(3)登录harbor仓库,然后上传镜像
root@docker_server01:~# docker login 172.31.7.154
root@docker_server01:docker push 172.31.7.154/harbor2023/nginx:1.18.0
4、在控制台查看镜像
4.6.2 配置镜像复制
在两台harbor控制台上执行以下操作:
4.6.2.1 配置仓库管理
1、在172.31.7.153 harbor控制台上进行以下操作步骤:
(1)登录harbor控制台,点击系统管理-仓库管理-新建目标
(2)新建目标
参数说明:
提供者:选择harbor即可
目标名:同步的镜像仓库名称,两边保持一致,这里填写baseimages
描述:可以添加描述信息
目标URL:同步镜像的目标harbor服务器的url,这里填写http://172.31.7.154
访问ID:目标harbor服务器的登录账号,这里填写admin
访问密码:目标harbor服务器的登录密码,这里填写admin账号的密码
验证远程证书:是否启用https,如果启用,勾选该选项,如果没有启动,使用的是自签名证书或者非信任证书,则无需勾选
(3)配置完成后,点击测试连接,出现测试连接成功才可以创建
注意:如果新建目标失败,提示测试连接失败,报错如下:
解决方法:将harbor配置文件harbor.yml中hostname参数的值需要修改为harbor服务器的ip地址
2、在172.31.7.154 harbor控制台上进行以下操作步骤:
(1)登录harbor控制台,点击系统管理-仓库管理-新建目标
(2)新建目标
参数说明:
提供者:选择harbor即可
目标名:同步的镜像仓库名称,两边要保持一致,这里填写baseimages
描述:可以添加描述信息
目标URL:同步镜像的目标harbor服务器的url,这里填写http://172.31.7.153
访问ID:目标harbor服务器的登录账号,这里填写admin
访问密码:目标harbor服务器的登录密码,这里填写admin账号的密码
验证远程证书:是否启用https,如果启用,勾选该选项,如果没有启动,使用的是自签名证书或者非信任证书,则无需勾选
(3)配置完成后,点击测试连接,出现测试连接成功才可以创建
4.6.2.2 配置复制管理
1、在172.31.7.153 harbor控制台上:
(1)登录harbor控制台,系统管理-复制管理-新建规则
(2)配置规则
参数说明:
名称:镜像复制的名称,可自定义,这里填baseiamges-sync
描述:镜像复制的描述信息,可自定义
复制模式:建议选择Push-based,因此选择拉取的话,我们不知道目标何时上传镜像,因此选择推送更合适
Push-based:把镜像从本地向目标推送
Pull-based:把镜像从目标拉向本地
目标仓库:点击下拉列表选择刚才创建的仓库,这里为baseimages-http://172.31.7.154
目标:可不填,选择默认即可
触发模式:分为手动、定时、事件驱动,建议选择事件驱动,并勾选下方删除本地资源时同时也删除远程的资源
手动:人为手动触发同步,不建议
定时:指定同步时间,在某个时间点进行同步
事件驱动:一旦出现镜像上传或删除的事件就会触发同步。
带宽:-1是指不做限制
选项:保持默认即可
2、在172.31.7.154 harbor控制台上:
(1)登录harbor控制台,系统管理-复制管理-新建规则
(2)配置规则
参数说明:
名称:镜像复制的名称,可自定义,这里填baseiamges-sync
描述:镜像复制的描述信息,可自定义
复制模式:建议选择Push-based,因此选择拉取的话,我们不知道目标何时上传镜像,因此选择推送更合适
Push-based:把镜像从本地向目标推送
Pull-based:把镜像从目标拉向本地
目标仓库:点击下拉列表选择刚才创建的仓库,这里为baseimages-http://172.31.7.153
目标:可不填,选择默认即可
触发模式:分为手动、定时、事件驱动,建议选择事件驱动,并勾选下方删除本地资源时同时也删除远程的资源
手动:人为手动触发同步,不建议
定时:指定同步时间,在某个时间点进行同步
事件驱动:一旦出现镜像上传或删除的事件就会触发同步。
带宽:-1是指不做限制
选项:保持默认即可
4.6.3 镜像同步验证
1、在客户端向主harbor 172.31.7.153上传镜像
root@docker_server01:~# docker tag centos:7.9.2009 172.31.7.153/baseimages/centos:7.9.2009
root@docker_server01:~# docker push 172.31.7.153/baseimages/centos:7.9.2009
2、在harbor 172.31.7.153控制台上查看镜像
3、在harbor 172.31.7.154 控制台上查看镜像,已经同步成功
4、在控制台查看同步日志,系统管理-复制管理-勾选创建的规则,点击下方复制任务的id
点击右侧日志
查看镜像复制的日志内容
5、在一台主机下载从172.31.7.153上同步过来的镜像(要在一台没有该镜像的主机上下载)
注意:在同步之前要在客户端配置非安全镜像仓库
root@docker_server02:~# docker pull 172.31.7.154/baseimages/centos:7.9.2009
4.6.4 通过负载均衡下载镜像
4.6.4.1 配置haproxy
1、在172.31.7.152和172.31.7.155上安装haproxy并配置
vim /etc/haproxy/haproxy.cfg
listen docker_harbor_80
bind 172.31.7.188:80
mode tcp
balance source
server harbor01 172.31.7.153:80 check inter 3s fall 3 rise 1
server harbor02 172.31.7.154:80 check inter 3s fall 3 rise 1
注意:由于没有使用共享存储,这里建议将负载策略设置为source,即源地址hash,确保上传镜像时同一台服务器得请求能访问到相同的目标服务器。如果使用轮询,万一请问过程中被转发到其他服务器,会导致镜像上传到不同服务器,造成镜像不完整
2、重启服务
systemctl enable haproxy && systemctl restart haproxy
如果第二台haproxy重启服务器报错,提示无法绑定,添加以下内容:
增加内核参数:允许绑定非本机的IP
vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
4.6.4.2 配置keepalived
1、在172.31.7.152上安装keepalived并配置
apt install -y keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER #该节点作为主
interface eth0
garp_master_delay 10
smtp_alert
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.31.7.188 dev eth0 label eth0:0 #添加vip
}
}
重启服务
systemctl enable keepalived && systemctl restart keepalived
2、在172.31.7.155上安装keepalived并配置
apt install -y keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #该节点作为备
interface eth0
garp_master_delay 10
smtp_alert
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.31.7.188 dev eth0 label eth0:0 #添加vip
}
}
重启服务
systemctl enable keepalived && systemctl restart keepalived
4.6.4.3 镜像上传下载验证
1、在客户端主机添加非安全镜像仓库172.31.7.188
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://3lvei2wk.mirror.aliyuncs.com"],
"insecure-registries":["harbor.magedu.com","http://172.31.7.153","http://172.31.7.154","http://172.31.7.188"]
}
2、上传镜像
root@docker_server02:~# docker login 172.31.7.188
root@docker_server02:~# docker tag nginx:1.18.0 172.31.7.188/baseimages/nginx:1.18.0
root@docker_server02:~# docker push 172.31.7.188/baseimages/nginx:1.18.0
在harbor控制台查看镜像
3、下载镜像
root@docker_server02:~# docker pull 172.31.7.188/baseimages/centos:7.9.2009
文章评论