Kubernetes Harbor
一、Harbor 介绍
Docker容器应用的开发和运行路不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境的Registry也是非常必要的。 Harbor是由VMware
公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
harbor主要组件包括proxy,它是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,图中通过深蓝色标识;Ui提供了一个Web管理界面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;Registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过ui创建Registry,图中红色线标识。 当然registry的token认证也是通过ui组件完成;adminserver是系统的配置管理中心附带检查存储用量,ui和Jobserver启动时候会需要加载adminserver的配置,通过灰色线标识。 jobservice是负载镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry并记录job_log,通过紫色线表示;log是日志汇总组件,通过docker的log-driver把日志汇总到一起,通过蓝色线
Harbor 的每个组件都是以 Docker 容器的形式构建的,因此很自然地,我们使用 Docker Compose 来对它进行部署。在源代码中
(https://github.com/vmware/harbor) 用于部署 Harbor 的 Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现 Harbor 由 5 个容器组成:
- proxy:由 Nginx 服务器构成的反向代理。
- registry:由 Docker 官方的开源 registry 镜像构成的容器实例。
- ui:即架构中的 core services, 构成此容器的代码是 Harbor 项目的主体。
- mysql:由官方 MySql 镜像构成的数据库容器。
- log: 运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志。
这几个容器通过 Docker link 的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露 proxy (即 Nginx)的服务端口。
1.1 工作原理
假设我们将 Harbor 部署在主机名为 registry.abcdocker.com 的虚机上。用户通过 docker login 命令向这个 Harbor 服务发起登录请求:docker login registry.abcdocker.com当用户输入所需信息并点击回车后,Docker 客户端会向地址“registry.abcdocker.com/v2/” 发出 HTTP GET 请求。
Harbor 的各个容器会通过以下步骤处理:
(1)Docker login
(a) 首先,这个请求会由监听 80 端口的 proxy 容器接收到。根据预先设置的匹配规则,容器中的 Nginx会将请求转发给后端的 registry 容器;
(b) 在 registry 容器一方,由于配置了基于 token 的认证,registry 会返回错误代码 401,提示 Docker客户端访问 token 服务绑定的 URL。在 Harbor 中,这个 URL 指向 Core Services;
(c) Docker 客户端在接到这个错误代码后,会向token服务的URL发出请求,并根据HTTP协议的BasicAuthentication 规范,将用户名密码组合并编码,放在请求头部(header);
(d)类似地,这个请求通过 80 端口发到 proxy 容器后,Nginx 会根据规则把请求转发给 ui 容器,ui 容器监听 token 服务网址的处理程序接收到请求后,会将请求头解码,得到用户名、密码;
(e) 在得到用户名、密码后,ui 容器中的代码会查询数据库,将用户名、密码与 mysql 容器中的数据进行比对(注:ui 容器还支持 LDAP 的认证方式,在那种情况下 ui 会试图和外部 LDAP 服务进行通信并校验用户名/密码)。比对成功,ui 容器会返回表示成功的状态码, 并用密钥生成 token,放在响应体中返回给 Docker 客户端。这个过程中组件间的交互过程如下图所示
至此,一次 docker login
成功地完成了,Docker 客户端会把步骤(c)中编码后的用户名密码保存在本地的隐藏文件中。
(2) Docker Push 用户登录成功后用 docker push 命令向 Harbor 推送一个 Docker 镜像:docker push registry.abcdocker.com/library/hello-world
(a) 首先,docker 客户端会重复 login 的过程,首先发送请求到 registry,之后得到 token 服务的地址;
(b) 之后,Docker 客户端在访问ui容器上的token服务时会提供额外信息,指明它要申请一个对imagelibrary/hello-world 进行 push 操作的 token;
(c) token 服务在经过 Nginx 转发得到这个请求后,会访问数据库核实当前用户是否有权限对该 image进行 push。如果有权限,它会把 image 的信息以及 push 动作进行编码,并用私钥签名,生成 token返回给 Docker 客户端;
(d) 得到 token 之后 Docker 客户端会把 token 放在请求头部,向 registry 发出请求,试图开始推送image。 Registry 收到请求后会用公钥解码 token 并进行核对,一切成功后,image 的传输就开始了。我们省去 proxy 转发的步骤,下图描述了这个过程中各组件的通信
二、Harbor 功能介绍
2.1 用户管理
基于校色的访问控制,RBAC,这个是K8S 1.6以后才加入的功能,harbor在设计的时候就开始考虑添加进去,用户分为三种角色
1.项目管理员(MDRWS) 2.开发人员(RWS) 3.访客(RS) 4.最高管理员权限admin
我们这边大概介绍一下,M:管理
D:删除
R:读取
W:写入
S:查询
非常细致的一个权限管理体系。当然一个用户可以在不同的项目里面扮演不同角色,这个和现实的用户管理体系非常吻合
2.2 项目管理
项目管理是系统最主要的一个功能模块,项目是一组镜像仓库的逻辑集合,是权限管理和资源的单元划分。一个项目下面有多个和镜像仓库,并且关联多个不同的角色的成员,镜像复制也是基于项目,通过添加复制规则,可以将项目下班的镜像从一个harbor迁移到另一个harbor,并且可以通过日志查看复制过程,并有retry机制
2.3 项目管理和日志查询
配置管理主要是配置harbor的认证模式,企业内部使用,通常都是对接到公司LDAP上面,当然harbor也支持数据库认证;还可以设置token的有效时间。用户对镜像的pull
和push
操作都可以被harbor记录下来,这样为排查文件提供了重要手段。
当然harbor功能不止上面,例如harbor集成了clair镜像扫描功能,它是cereos开发的一款漏洞扫描工具,可以检查镜像操作系统以及上面安装包是否与已知不安全的包版本相匹配,从而提高镜像的安全性。
2.4 Harbor高可用部署
通过三个harbor完成高可用部署,前面通过负载均衡器对外提供访问。共享数据库与存储。
Harbor和Kubernetes结合
Kubernetes中的Kubelet组件负责容器的声明周期管理,通过CRI对接到不同的容器实现如:docker等,默认是docker,Kubelet启动Docker容器的时候,会根据策略IfNotPresent是如果本地不存在则拉取,打上latest标签或者设置Always策略则是一直拉取最新镜像。 Docker的镜像仓库需要配置成harbor,在容器启动是会拉去harbor中的镜像。
注意: 1.ImagePullSecrets 拉取镜像需要先登陆,在Kubernetes多用户使用场景中,镜像的安全必须要保证,一个用户是没有权限拉取另一个用户下面的镜像。Kubernetes提供了imagePullSecrets负责管理镜像拉取时的安全认证。其实Kubelet就是模拟了一次用户登陆,并且会在~/.docker/config.json生成auth认证信息。当然如果是绝对单个用户的场景为了避免麻烦,也可以使用admin到每台机器上登陆(docker login)一下,这样拉取镜像就是通过admin来完成
2.Https 为了安全建议使用https,需要不是https,需要在docker启动文件中添加-insecure-registry
三、Kubernetes Harbor Install
生产环境中Harbor一般都是独立的,我们这里也放在单独一台服务器上
IP地址 | docker版本 | docker-compose版本 | 内核 | Centos |
---|---|---|---|---|
192.168.60.26 | 17.03 | 1.22 | 4.17.12 | 7.4 |
注意:Harbor的所有服务组件都是在Docker中部署的,所以官方安装使用Docker-compose快速部署,所以我们需要安装Docker、Docker-compose. 由于Harbor是基于Docker Registry V2版本,所以就要求Docker版本不小于1.10.0,Docker-compose版本不小于1.6.0
3.1 环境准备
# 设置主机名
hostnamectl set-hostname harbor
# 时间同步
yum -y install ntp
systemctl enable ntpd
systemctl start ntpd
ntpdate -u cn.pool.ntp.org
hwclock --systohc
timedatectl set-timezone Asia/Shanghai
# 关闭swap分区
vim /etc/fstab #永久关闭swap分区
swap was on /dev/sda11 during installation
UUID=0a55fdb5-a9d8-4215-80f7-f42f75644f69 none swap sw 0 0
#注释掉SWAP分区项,即可
# 关闭防火墙 Selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
# 升级内核
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y&&
sed -i s/saved/0/g /etc/default/grub&&
grub2-mkconfig -o /boot/grub2/grub.cfg && reboot
3.2 Docker Install
下载Docker安装包
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
由于网络经常超时,我们已经把镜像上传上去,前往Kubernetes 单点安装下载
安装修改配置
➜ yum install docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm -y
➜ yum install docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm -y
设置开机启动并启动docker
systemctl enable docker
systemctl start docker
替换docker相关配置
sed -i '/ExecStart=\/usr\/bin\/dockerd/i\ExecStartPost=\/sbin/iptables -I FORWARD -s 0.0.0.0\/0 -d 0.0.0.0\/0 -j ACCEPT' /usr/lib/systemd/system/docker.service
sed -i '/dockerd/s/$/ \-\-storage\-driver\=overlay2 --insecure-registry 192.168.60.26/g' /usr/lib/systemd/system/docker.service
重启docker
systemctl daemon-reload
systemctl restart docker
注意: 1.Docker默认从官方拉取镜像,并且从1.12版本之后,默认私有仓库是使用https来进行连接,我们需要将使用私服的主机上docker启动文件进行修改,在启动命令添加
--insecure-registry 192.168.60.26
3.3 Docker-compose Install
Github地址:https://github.com/docker/compose/releases
Docker Compose简介
Docker Compose是Docker编排服务的最后一块,前面提到的Machine可以让用户在其它平台快速安装Docker,Swarm可以让Docker容器在集群中高效运转,而Compose可以让用户在集群中部署分布式应用。简单的说,Docker Compose属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。
安装Docker-compose
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
$ docker-compose --version
docker-compose version 1.22.0, build f46880fe
Docker-compose常用命令
docker-compose up -d ###后台启动,如果容器不存在根据镜像自动创建
docker-compose down -v ###停止容器并删除容器
docker-compose start ###启动容器,容器不存在就无法启动,不会自动创建镜像
docker-compose stop ###停止容器
3.4 Harbor Install
Harbor官方地址 https://github.com/vmware/harbor/releases
Harbor 2种安装方式
1.离线安装
$ wget https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.0.tgz
$ tar xf harbor-online-installer-v1.5.0.tgz
2.在线安装
$ wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.2.tgz
$ tar xf harbor-online-installer-v1.5.2.tgz
网络不好的可以下载我下载好的安装包 百度云盘 密码: ro15
配置Harbor 解压之后,配置文件名称harbor.cfg,该文件就是Harbor的配置文件
编辑harbor.cfg 实际上我们只需要修改Hostname字段
[root@harbor harbor]# head harbor.cfg
## Configuration file of Harbor
#This attribute is for migrator to detect the version of the .cfg file, DO NOT MODIFY!
_version = 1.5.0
#The IP address or hostname to access admin UI and registry service.
#DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname = 192.168.60.26
harbor.cfg相关配置解释
[root@master harbor]# grep -Ev "^$|^[#;]" harbor.cfg
# Harbor版本
_version = 1.5.0
# hostname 设置访问地址,可以使用IP/域名,不可以设置127.0.0.1 && localhost
hostname = 192.168.60.24
# 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
ui_url_protocol = http
# Job 最大进程数
max_job_workers = 50
# 是否创建证书,创建证书将会在下面的路径下生成
customize_crt = on
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
# 私钥存储路径
secretkey_path = /data
# 设置日志大小
admiral_url = NA
log_rotate_count = 50
log_rotate_size = 200M
# 是否使用代理
http_proxy =
https_proxy =
no_proxy = 127.0.0.1,localhost,ui
# 邮箱设置,发送重置密码邮件时使用
email_identity =
email_server = smtp.mydomain.com
email_server_port = 25
email_username = sample_admin@mydomain.com
email_password = abc
email_from = admin <sample_admin@mydomain.com>
email_ssl = false
email_insecure = false
# 安装Harbor后,管理员UI登陆的密码,默认是Harbor12345
harbor_admin_password = Harbor12345
# 认证方式,这里支持多种认证方式,比如LDAP、数据库认证。默认是db_auth
auth_mode = db_auth
# LDAP认证时配置项
ldap_url = ldaps://ldap.mydomain.com
ldap_basedn = ou=people,dc=mydomain,dc=com
ldap_uid = uid
ldap_scope = 2
ldap_timeout = 5
ldap_verify_cert = true
ldap_group_basedn = ou=group,dc=mydomain,dc=com
ldap_group_filter = objectclass=group
ldap_group_gid = cn
ldap_group_scope = 2
#是否开启自动注册
self_registration = on
# Token有效时间,默认30分钟
token_expiration = 30
# 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(管理员)
project_creation_restriction = everyone
# Mysql数据库root用户默认密码root123,根据实际时使用来进行修改
db_host = mysql
db_password = root123
db_port = 3306
db_user = root
# Redis配置
redis_url = redis:6379
clair_db_host = postgres
clair_db_password = password
clair_db_port = 5432
clair_db_username = postgres
clair_db = postgres
uaa_endpoint = uaa.mydomain.org
uaa_clientid = id
uaa_clientsecret = secret
uaa_verify_cert = true
uaa_ca_cert = /path/to/ca.pem
registry_storage_provider_name = filesystem
registry_storage_provider_config =
本次我们使用离线安装,安装包在上面
tar xf harbor-offline-installer-v1.5.0.tgz
[root@abcdocker harbor]# ll
total 854960
drwxr-xr-x 3 root root 23 Aug 6 16:16 common
-rw-r--r-- 1 root root 1185 May 2 23:34 docker-compose.clair.yml
-rw-r--r-- 1 root root 1725 May 2 23:34 docker-compose.notary.yml
-rw-r--r-- 1 root root 3596 May 2 23:34 docker-compose.yml
drwxr-xr-x 3 root root 156 Aug 6 16:17 ha
-rw-r--r-- 1 root root 6684 Aug 6 16:19 harbor.cfg
-rw-r--r-- 1 root root 875401338 May 2 23:36 harbor.v1.5.0.tar.gz
-rwxr-xr-x 1 root root 5773 May 2 23:34 install.sh
-rw-r--r-- 1 root root 10771 May 2 23:34 LICENSE
-rw-r--r-- 1 root root 482 May 2 23:34 NOTICE
-rwxr-xr-x 1 root root 27379 May 2 23:34 prepare
[root@abcdocker harbor]#
导入镜像,因为离线安装就是将镜像一块下载下来,在线安装就是在线获取镜像
[root@abcdocker harbor]# docker load -i harbor.v1.5.0.tar.gz # 这步可以不用操作,脚本会自动操作
安装完成之后需要修改docker的配置文件
--insecure-registry
##修改完成后重启docker
systemctl daemon-reload
systemctl restart docker
访问查看
默认端口为80,需要修改端口请修改docker-compose.yaml对应服务的映射
访问地址:http://192.168.60.26
3.5 Harbor新建项目
我们新建一个abcdocker的项目;注意:当设为不公开后,任何人都有此项目下镜像读权限。命令行用户不需要docker login
就可以拉取此项目下的镜像
新项目设置完毕后,我们就可以使用admin账户提交本地镜像到Harbor仓库了。例如我们提交nginx镜像
因为我们本地没有镜像,我们先拉取一个镜像,然后进行下面的操作docker pull daocloud.io/library/nginx:latest
1.使用admin登陆
docker login -u admin -p Harbor12345 192.168.60.26
##如果出现一下报错可以使用一下方式登录
docker login -uroot 192.168.60.26
Password:
Error response from daemon: Get http://192.168.60.26/v2/: unauthorized: authentication required
#确保配置文件中添加--insecure-registry x.x.x.x之后使用以下方式
docker -D login 192.168.60.26
Username: admin
Password:
Login Succeeded
# 这里的用户名密码都是默认的,在harbor.cfg中修改
# IP地址是harbor的地址
2.给镜像打tag
docker tag daocloud.io/library/nginx:latest 192.168.60.26/abcdocker/nginx:latest
# nginx是我们之前下来下载
# abcdocker 是我们刚刚创建的
3.Push到仓库中
[root@harbor harbor]# docker push 192.168.60.26/abcdocker/nginx:latest
The push refers to a repository [192.168.60.26/abcdocker/nginx]
08d25fa0442e: Pushed
a8c4aeeaa045: Pushed
cdb3f9544e4c: Pushed
latest: digest: sha256:2de9d5fc6585b3f330ff5f2c323d2a4006a49a476729bbc0910b695771526e3f size: 948
命令错误
Error response from daemon: Get https://192.168.60.26/v1/users/: dial tcp 192.168.60.26:443: getsockopt: connection refused
这个错误就是我们的docker 启动文件中没有添加--insecure-registry
Web界面查看 当我们把镜像Push成功之后,我们可以去Web界面查看了 此时我们可以看到有一个镜像
四、Harbor 权限管理
4.1 测试权限
注意:非系统管理员用户登陆,只能看到有权限的项目和日志,其他模块看不到 镜像已经上传完毕,我们进行拉取镜像测试.找一台没有node服务器,或者master,只要有docker环境就可以
docker pull 192.168.60.26/abcdocker/nginx:latest
如果我们镜像设置不公开,直接拉取镜像是无法拉取镜像
镜像不公开只能登陆有权限的用户进行pull,登陆到管理员账号才可以pull
4.2 用户权限管理
上面我们说到,非系统管理员用户登陆,只能看到有权限的项目和日志,其他模块看不到。 我们这里为大家演示一下
1)新建项目
我们新建一个名称为k8s
的项目,出于安全考虑不设置公开,公开之后上面说过所有人不需要使用docker login
就可以下载,但是给管理员权限又比较大,我们这次使用普通用户
上传镜像一共有三步
(1) 登陆admin
[root@harbor ~]# docker login 192.168.60.26
Username (admin): admin
Password:
Login Succeeded
#这里如果本地没有镜像上传,可以去daocloud pull一个下来
docker pull daocloud.io/library/tomcat:latest
(2)给镜像打tag
[root@harbor ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/tomcat latest f3159377bac1 6 days ago 463 MB
192.168.60.26/abcdocker/nginx latest c82521676580 13 days ago 109 MB
daocloud.io/library/nginx latest c82521676580 13 days ago 109 MB
vmware/redis-photon v1.5.0 7c03076402d9 3 months ago 207 MB
vmware/clair-photon v2.0.1-v1.5.0 7ae4e0670a3f 3 months ago 301 MB
vmware/notary-server-photon v0.5.1-v1.5.0 0b2b23300552 3 months ago 211 MB
vmware/notary-signer-photon v0.5.1-v1.5.0 67c41b4a1283 3 months ago 209 MB
vmware/registry-photon v2.6.2-v1.5.0 3059f44f4b9a 3 months ago 198 MB
vmware/nginx-photon v1.5.0 e100456182fc 3 months ago 135 MB
vmware/harbor-log v1.5.0 62bb6b8350d9 3 months ago 200 MB
vmware/harbor-jobservice v1.5.0 aca9fd2e867f 3 months ago 194 MB
vmware/harbor-ui v1.5.0 1055166068d0 3 months ago 212 MB
vmware/harbor-adminserver v1.5.0 019bc4544829 3 months ago 183 MB
vmware/harbor-db v1.5.0 82354dcf564f 3 months ago 526 MB
vmware/mariadb-photon v1.5.0 403e7e656499 3 months ago 526 MB
vmware/postgresql-photon v1.5.0 35c891dea9cf 3 months ago 221 MB
vmware/harbor-migrator v1.5.0 466c57ab0dc3 3 months ago 1.16 GB
vmware/photon 1.0 4b481ecbef2a 3 months ago 130 MB
gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 2 years ago 747 kB
[root@harbor ~]# docker tag daocloud.io/library/tomcat:latest 192.168.60.26/k8s/tomcat:latest
(3)push 到镜像仓库
[root@harbor ~]# docker push 192.168.60.26/k8s/tomcat:latest
The push refers to a repository [192.168.60.26/k8s/tomcat]
db677f7b3885: Pushed
4a1cb73d1994: Pushed
365c8156ff79: Pushed
2de08d97c2ed: Pushed
6b09c39b2b33: Pushed
4172ffa172a6: Pushed
1dccf0da88f3: Pushed
d2070b14033b: Pushed
63dcf81c7ca7: Pushed
ce6466f43b11: Pushed
719d45669b35: Pushed
3b10514a95be: Pushed
latest: digest: sha256:50af8583c6869227e6f01a13b2b36ba9b3ee05e5ca39e5a98ed514c0837f5b09 size: 2836
上传完毕后,登陆Web Harbor,选择项目,项目名称k8s,就可以查看刚刚上传的tomcat images
2) 创建用户并分配权限 我们上面一直使用的是admin管理员用户,实际应用中我们使用的账号应该都是每个人都不相同的。所以我们就需要新建用户,同时为了让用户有权限操作创建的项目,还必须将该用户添加到该项目成员中
创建用户名为abcdocker的测试用户,点击系统管理->>用户管理->>创建用户名,输入用户名密码邮箱等(邮件我们这里没有配置后续可以配置一下就ok)
我们的账号设置为:
用户名:abcdocker
密码: Abcdocker..1
将abcdocke用户添加到k8s项目中,点击项目-->K8S-->成员-->新建成员,填写姓名,角色 添加完毕后
3) 测试
我们现在使用abcdocker
账户摸底模拟刚刚操作pull刚刚上传的tomcat镜像
如果想退出账号可以使用
$ docker logout 192.168.60.26
说明:如果我们将项目设置为公开,那么这里我们不需要登陆就可以拉取到项目
四、Harbor 镜像仓库复制
一个仓库的情况下,如果镜像仓库挂了,那么所有的镜像也就没有了,所以最好是创建一个备份仓库,Harbor提供了镜像仓库复制功能,可以很好的自动实现;创建2个harbor仓库,其中一个为主,另一个为备。
我们可以使用克隆虚拟机或者找另一台服务器
IP | Harbor版本 | Docker版本 | 系统版本 | 主备 |
---|---|---|---|---|
192.168.60.26 | v1.50 | 17.03 | 7.4 | 主 |
192.168.60.27 | v1.50 | 17.03 | 7.4 | 备 |
我们克隆一个虚拟机出来,安装步骤和上面一样,保持一致就可以了
4.1 环境准备完毕
我们要把主节点的镜像自动复制到备节点上
由于我们刚刚是使用克隆的方式,目前两台服务器环境一样,现在我们在下载一个镜像,然后提交到192.168.60.26(主节点上)
docker pull daocloud.io/library/node:7.9-wheezy
docker tag daocloud.io/library/node:7.9-wheezy 192.168.60.26/k8s/node:7.9-wheezy
docker push 192.168.60.26/k8s/node:7.9-wheezy
4.2 创建复制
进入备节点
配置复制规则,点击项目-->K8S-->复制-->新建复制规则,填写名称、目标名、目标url等。
注意:这里目标URL是备节点地址,用户密码也是备节点的密码,一旦勾选☑️启用,那么新建复制规则完成后,立马就检测需要同步的images自动同步。
1)进入仓库管理,创建目标
目标URL: 需要同步的地址(我们镜像存放在26上,往27同步,这里写27) 用户名密码:27的用户名密码
我们顺便将现有的镜像删除,因为当时是克隆过来,所以镜像都有,我们将镜像删除。从新同步
点击复制管理,添加一条复制策略
源项目===== k8s (我们之前创建的k8s项目) 目标===== 就是我们上面创建的
新版本增加的过滤的功能,我们可以修改只同步k8s项目下的那几个镜像
如果有需要修改Harbor的配置文件harbor.cfg,因为Harbor是基于docker-compose服务编
排的,我们可以使用docker-compose命令重启Harbor。不用从新安装,重启Harbor命令:docker-compose start | stop | restart