实现harbor的高可用

发布时间 2023-10-08 09:45:56作者: 小糊涂90
#环境准备:
第一台主机:ubuntu  harbor1   10.0.0.151
第二台主机:centos7  harbor2  10.0.0.152

1.安装docker
#见上一次作业

2.harbor以来docker compose,所以先安装docker compose
方法1:通过pip安装
[root@Harbor1 ~]  #yum -y   install python3
[root@Harbor1 ~]  #pip3   install --upgrade pip
[root@Harbor1 ~]  #pip3   install docker-compose

方法2:下载程序(此方法更快)
[root@Harbor1 ~]  #curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#添加可执行权限
[root@Harbor1 ~]  #chmod +x /usr/local/bin/docker-compose



3.下载Harbor安装包并解压缩
[root@Harbor1 ~]  #wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.6.tgz
[root@Harbor1 ~]  #mkdir /apps
[root@Harbor1 ~]  #tar xvf harbor-offline-installer-v1.7.6.tgz -C   /apps

4.修改harbor配置文件
[root@Harbor1 ~]  #vim /apps/harbor/harbor.cfg
#只需要修改下面两行
hostname = 10.0.0.151    #修改此行,指向当前主机IP 或 FQDN
harbor_admin_password = 123456   #修改此行指定harbor登录用户admin的密码

5.运行harbor安装脚本
[root@Harbor1 ~]  # /apps/harbor/install.sh
#centos7没问题。但是ubuntu因为没有/usr/bin/python文件,运行/apps/harbor/install.sh会报错。拉不起容器。这里通过创建软链接解决
/apps/harbor/install.sh: ./prepare: /usr/bin/python: bad interpreter: No such file or directory
[root@Harbor1 ~]  #  ln -s   /usr/bin/python3.6 /usr/bin/python

#查看相关容器
[root@Harbor1 ~] # docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED          STATUS                             PORTS                                                                                                                 NAMES
b3a907af0c50   goharbor/nginx-photon:v1.7.6             "nginx -g 'daemon of…"   8 seconds ago    Up 7 seconds (health: starting)    0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:4443->4443/tcp, :::4443->4443/tcp   nginx
2156c970ccc1   goharbor/harbor-jobservice:v1.7.6        "/harbor/start.sh"       10 seconds ago   Up 9 seconds                                                                                                                                             harbor-jobservice
301fa9b3b260   goharbor/harbor-portal:v1.7.6            "nginx -g 'daemon of…"   10 seconds ago   Up 8 seconds (health: starting)    80/tcp                                                                                                                harbor-portal
44d513fc24a1   goharbor/harbor-core:v1.7.6              "/harbor/start.sh"       12 seconds ago   Up 10 seconds (health: starting)                                                                                                                         harbor-core
bccd0ee05b52   goharbor/harbor-db:v1.7.6                "/entrypoint.sh post…"   16 seconds ago   Up 12 seconds (health: starting)   5432/tcp                                                                                                              harbor-db
8c636669ec89   goharbor/harbor-registryctl:v1.7.6       "/harbor/start.sh"       16 seconds ago   Up 11 seconds (health: starting)                                                                                                                         registryctl
7a1ad24b012a   goharbor/redis-photon:v1.7.6             "docker-entrypoint.s…"   16 seconds ago   Up 14 seconds                      6379/tcp                                                                                                              redis
0f0e1ac82fad   goharbor/harbor-adminserver:v1.7.6       "/harbor/start.sh"       16 seconds ago   Up 13 seconds (health: starting)                                                                                                                         harbor-adminserver
a5fd2b4c2860   goharbor/registry-photon:v2.6.2-v1.7.6   "/entrypoint.sh /etc…"   16 seconds ago   Up 12 seconds (health: starting)   5000/tcp                                                                                                              registry
f7c1a8e06c63   goharbor/harbor-log:v1.7.6               "/bin/sh -c /usr/loc…"   17 seconds ago   Up 16 seconds (health: starting)   127.0.0.1:1514->10514/tcp                                                                                             harbor-log


6.登陆harbor的web页面,并创建项目test(公开)
用浏览器访问 http://10.0.0.151/
用户名: admin
密码: 123456  即前面harbor.cfg中指定的密码

7.命令行登录harbor并上传镜像到仓库
#修改docker服务文件
[root@Harbor1 ~]  # grep ExecStart /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  --insecure-registry 10.0.0.151 --insecure-registry 10.0.0.152


#命令行登陆harbor
root@harbor1:~# docker login 10.0.0.151
Username: admin
Password: 123456
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded


#给本地镜像打标签并上传到harbor
修改 images 的名称,不修改成指定格式无法将镜像上传到 harbor 仓库
[root@centos7 ~]  # docker tag alpine:latest 10.0.0.151/test/alpine:latest
[root@centos7 ~]  # docker push 10.0.0.151/test/alpine:latest

#最后访问harbor网站验证上传镜像成功 

8.实现Harbor的高可用
#Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制功能

8.1.在另一台主机上搭建Harbor
#参照上述步骤,在第二台主机上搭建Harbor
#harbor.cfg中配置文件中 hostname 修改为本机地址,其他步骤相同

8.2.第二台harbor上新建项目
#参考第一台harbor服务器的项目名称,在第二台harbor服务器上新建与之同名的项目test(公开)

8.3.第二台harbor上仓库管理中新建目标
#参考第一台主机信息,新建复制(同步)目标信息,将第一台主机设为复制的目标。
#登录管理网页,点击系统管理--仓库管理--新建目标。输入第一台harbor服务器上的主机和用户信息,目标名:test,目标url:http://10.0.0.151,用户名:admin,密码:123456

8.4.二台harbor(10.0.0.152)上新建复制规则实现到第一台harbor的单向复制
#在第二台harbor上建立复制的目标主机,即第一台harbor主机
#登录管理网页,点击系统管理--复制管理--新建规则,名称:test,源项目:test,目标:test-http://10.0.0.151,出发模式:即刻,勾选“删除本地镜像的同时也删除远程的镜像”和“立即复制现有的镜像”。

8.5.在第一台harbor(10.0.0.151)上重复上面操作
#以上操作,只是实现了从第二台harbor主机10.0.0.152到第一台harbor主机10.0.0.151的单向同步在第一台harbor上再执行下面操作,才实现双向同步
#登录管理网页,点击系统管理--仓库管理--新建目标。输入第二台harbor服务器上的主机和用户信息,目标名:test,目标url:http://10.0.0.152,用户名:admin,密码:123456
#登录管理网页,点击系统管理--复制管理--新建规则,名称:test,源项目:test,目标:test-http://10.0.0.152,出发模式:即刻,勾选“删除本地镜像的同时也删除远程的镜像”和“立即复制现有的镜像”。

8.6.确认同步成功
#管理网页,项目中,在第二台harbor主机上可以查看到从第一台主机同步过来的镜像

8.7.在第二台harbor上传镜像验证是否可以双向同步
[root@Harbor2 ~]  # docker login 10.0.0.152
[root@Harbor2 ~]  # docker tag busybox:latest  10.0.0.152/test/busybox
[root@Harbor2 ~]  # docker push 10.0.0.152/test/busybox
#在两台主机的管理网页中已经可以看到镜像同步了