暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

从零开始搭建一个高可用Harbor集群部署

云原生转型实验室 2019-12-06
4431

我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度慢的原因, 往往需要将一些无法直接下载的镜像导入本地私有仓库. 而Harbor就是部署企业私有仓库的一个不二之选。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,Harbor主要提供Dcoker Registry管理UI,提供的功能包括:基于角色访问的控制权限管理(RBAC)、AD/LDAP集成、日志审核、管理界面、自我注册、镜像复制和中文支持等。Harbor的目标是帮助用户迅速搭建一个企业级的Docker registry服务。
这里我们从零开始搭建一个高可用Harbor集群部署

部署方案

Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制;2)多harbor实例共享后端存储。
我们这里选择第一种方案:双主复制。

所谓的双主复制其实就是复用主从同步实现两个harbor节点之间的双向同步,来保证数据的一致性,然后在两台harbor前端顶一个负载均衡器将进来的请求分流到不同的实例中去,只要有一个实例中有了新的镜像,就是自动的同步复制到另外的的实例中去,这样实现了负载均衡,也避免了单点故障,在一定程度上实现了Harbor的高可用性:

话不多说,开始动手。

环境准备

服务器准备:

序号节点IP地址
1Harbor01192.168.188.134
2Harbor02192.168.188.135
3VIP192.168.188.136

注:这里的VIP是keepalived的高可用IP地址,非物理节点,所有节点使用的操作系统为Redhat7.6。

为两台物理服务器关闭防火墙,安装docker18.09

[root@harbor01 yum.repos.d]# systemctl stop firewalld && systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@harbor01 yum.repos.d]# setenforce 0
[root@harbor01 yum.repos.d]# yum install -y docker-ce
[root@harbor01 docker]# systemctl daemon-reload
[root@harbor01 docker]# systemctl start docker && systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

Harbor安装

1)将harbor-offline-installer-v1.8.1.tgz解压至/usr/local/harbor/
2)将docker-compose移动至/usr/local/bin/docker-compose/

[root@harbor02 tmp]# mv docker-compose /usr/local/bin/docker-compose

3)增加权限

[root@harbor02 tmp]# chmod +x /usr/local/bin/docker-compose

4)修改harbor.yml
将其中的hostname改为hostname: 192.168.188.135

5)启动harbor

[root@harbor02 harbor]# ./prepare
[root@harbor02 harbor]# sh /usr/local/harbor/install.sh

两个物理节点相同的操作,将Harbor启动起来

此时此刻Harbor已经安装完成并启动起来,赶紧去测试一下:

在浏览器中测试,输入http://192.168.188.135,使用默认密码登陆进去

默认用户名:admin
默认密码:Harbor12345

这个时候在浏览器中看到画面如下:

再用docker登陆试一下:

[root@harbor01 harbor]# docker login 192.168.188.134
Username: admin
Password: 
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

这里有个坑,会出现如下报错:

[root@harbor01 harbor]# docker login 192.168.188.134
Username: admin
Password: 
Error response from daemon: Get https://192.168.188.134/v2/: dial tcp 192.168.188.134:443: connect: connection refused

这是因为docker默认使用安全认证登录方式,这里则是使用http方式,因此需要添加insecure-registry,解决方法如下:
vim usr/lib/systemd/system/docker.service
增加:--insecure-registry这一行
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.188.134

好了,Harbor已经能正常运作了,下面开始部署双主复制的高可用方案

Harbor高可用设置

登录至Harbor网页
设置仓库管理

设置复制管理

基本设置已经完成,我们可以推个镜像上去试一试,看看是否同步过去。

[root@harbor02 harbor]# docker tag busybox:lastest 192.168.188.135/library/busybox_test
[root@harbor02 harbor]# docker push 192.168.188.135/library/busybox_test
The push refers to repository [192.168.188.135/library/busybox_test]
1da8e4c8d307: Pushed 
latest: digest: sha256:679b1c1058c1f2dc59a3ee70eed986a88811c0205c8ceea57cec5f22d2c3fbb1 size: 527

这里上传镜像时也会有个坑
出现如下报错:
The push refers to repository [192.168.188.135/library/busybox]
1da8e4c8d307: Preparing
denied: requested access to the resource is denied
解决方案如下:
应修改如下文件:

[root@harbor02 harbor]# vim ~/.docker/config.json                         

{
        "auths": {
                "192.168.188.135": {
                        "auth""YWRtaW46SGFyYm9yMTIzNDU="
                }
        },
        "HttpHeaders": {
                "User-Agent""Docker-Client/18.09.5 (linux)"
        }
}

将其中的“auth”键值对删除即可

这个时候用网页登录到harbor上,看一下harbor02中的library项目是否已经有这个busybox镜像了
然后登录另一个节点harbor01,看一下项目下的library是否已经同步过来。
注:这里设置的是30秒同步,等不及的同学请直接点手动同步。

已经同步过来了,接下来,我们完成VIP的安装配置

Keepalived安装配置

安装Keepalived:

[root@harbor02 harbor]# yum install -y keepalived

修改Keepalived配置文件

! Configuration File for keepalived

global_defs {
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL1
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user root
   enable_script_security
}

vrrp_script check_harbor {
#   script "/opt/harbor.sh"
   script "curl -k https://192.168.188.136:6443"
   interval 2
   weight 20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    mcast_src_ip 192.168.188.135
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    unicast_peer {        
        #注释掉本地IP,增加集群IP        
        #192.168.188.135
        192.168.188.134
    }
    virtual_ipaddress {
        192.168.188.136/24 dev ens33 label ens33:vip
    }
    track_script {
        check_harbor
    }
}

同时将192.168.188.136加入docker的insecure-registry。
然后登陆测试下:

[root@harbor02 harbor]# docker login 192.168.188.136
Username: admin
Password: 
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

我们再传个镜像上去

[root@harbor02 harbor]# docker tag busybox:lastest 192.168.188.136/harbor01/busybox:lastest
[root@harbor02 harbor]# docker push 192.168.188.136/harbor01/busybox:lastest               
The push refers to repository [192.168.188.136/harbor01/busybox]
1da8e4c8d307: Mounted from harbor02/busybox 
lastest: digest: sha256:679b1c1058c1f2dc59a3ee70eed986a88811c0205c8ceea57cec5f22d2c3fbb1 size: 527

我们再登录到网页端看一下,发现已经同步

至此完成Harbor的高可用集群搭建


文章转载自云原生转型实验室,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论