Ubuntu22.04 LTS 部署harbor-v2.7.2高可用

环境准备

均需要提前准备docker,docker-compose环境

docker,docker-compose 安装参考文章

IP主机名配置
10.0.0.20harbor012C4G
10.0.0.21harbor022C4G

一、Harbor 介绍

1. 什么是 Harbor?

Harbor 是一个开源的云原生镜像仓库,主要用于存储、管理和分发容器镜像。它基于 Docker Registry 进行了增强,提供了更强的安全性、身份管理和访问控制功能,使企业能够更高效地管理容器镜像。

2. Harbor 的主要功能

镜像管理: 支持 Docker 和 OCI 镜像格式,支持多项目管理
🔐 安全与访问控制: 支持 RBAC 访问控制、LDAP/OIDC 认证、Notary 镜像签名
🔄 镜像复制: 支持跨数据中心镜像同步
📊 日志与审计: 记录用户操作,支持 ELK 集成
🚀 高可用性: 支持集群部署、镜像拉取加速

3. Harbor 典型应用场景

企业级镜像仓库: 用于企业内部存储、管理和分发容器镜像
DevOps CI/CD: 结合 Jenkins、GitLab CI/CD,自动化构建、扫描和发布镜像
跨数据中心同步: 在不同区域的数据中心之间同步镜像,提升可用性
镜像安全管理: 防止恶意镜像进入生产环境,确保部署的安全性

4. Harbor 部署方式

  • Docker Compose 部署(适用于测试环境)
  • Helm Chart 部署(适用于 Kubernetes 环境)
  • Harbor Operator 部署(适用于自动化管理)

二、harbor 环境部署(基于Docker Compose )

1. 下载 Harbor 安装包

[root@harbor01:~]# wget https://github.com/goharbor/harbor/releases/download/v2.7.2/harbor-offline-installer-v2.7.2.tgz

2. 解压软件包

[root@harbor01:~]# mkdir -p /caixiangjia/softwares
[root@harbor01:~]# tar xf harbor-offline-installer-v2.7.2.tgz -C /caixiangjia/softwares/
[root@harbor01:~]# cd /caixiangjia/softwares/harbor/

3. 配置 Harbor

[root@harbor01:harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor01:harbor]# ll harbor.yml*
-rw-r--r-- 1 root root 11567 Dec 14 21:13 harbor.yml
-rw-r--r-- 1 root root 11567 Apr 24  2023 harbor.yml.tmpl

修改配置:

hostname: 10.0.0.20
data_volume: /caixiangjia/data/harbor
harbor_admin_password: 1

# 此处方便后期prometheus监控
metric:
  enabled: true
  port: 9099
  path: /metrics

4. 安装 harbor

[root@harbor01:harbor]# ./install.sh --with-chartmuseum

5. 访问 Harbor Web UI

  • 地址: http://10.0.0.20/
  • 账号: admin
  • 密码: 1


三、harbor 的基本使用

1. 配置 Docker 信任 Harbor

[root@harbor01:~]# cat /etc/docker/daemon.json
{
    "insecure-registries": ["10.0.0.20"]
}

[root@harbor01:~]# systemctl restart docker.service

2. Harbor 创建仓库

3. 给镜像打 tag

[root@harbor01:~]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED         SIZE
hello-world                     latest    d2c94e258dcb   19 months ago   13.3kB
[root@harbor01:~]# docker tag hello-world:latest 10.0.0.20/test/hello-world-latest

4. 推送镜像到 Harbor 仓库

# 未登录之前
[root@harbor01:~]# docker push 10.0.0.20/test/hello-world
Using default tag: latest
The push refers to repository [10.0.0.20/test/hello-world]
ac28800ec8bb: Preparing 
unauthorized: unauthorized to access repository: test/hello-world, action: push: unauthorized to access repository: test/hello-world, action: push

[root@harbor01:~]# docker login 10.0.0.20
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:~]# more /root/.docker/config.json
{
	"auths": {
		"10.0.0.20": {
			"auth": "YWRtaW46MQ=="
		}
	}
}

# 通过 base64 -d 查看你的密码
[root@harbor01:~]# echo YWRtaW46MQ== | base64 -d | more
admin:1


#登录之后
[root@harbor01:~]# docker push 10.0.0.20/test/hello-world
Using default tag: latest
The push refers to repository [10.0.0.20/test/hello-world]
ac28800ec8bb: Pushed 
latest: digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7 size: 524

5.web页面查看

6. 推送镜像完成后立刻退出(避免密码泄露)

[root@harbor01:~]# docker logout 10.0.0.20
Removing login credentials for 10.0.0.20

[root@harbor01:~]# more /root/.docker/config.json
{
	"auths": {}
}
[r

7. 其他客户端拉取镜像,【需要配置信任仓库】

[root@harbor02:~]# cat /etc/docker/daemon.json 
{
  "insecure-registries": ["10.0.0.20"]
}

[root@harbor02:~]# systemctl restart docker.service 

[root@harbor02:~]# docker pull 10.0.0.20/test/hello-world:latest
latest: Pulling from test/hello-world
c1ec31eb5944: Pull complete 
Digest: sha256:d37ada95d47ad12224c205a938129df7a3e52345828b4fa27b03a98825d1e2e7
Status: Downloaded newer image for 10.0.0.20/test/hello-world:latest
10.0.0.20/test/hello-world:latest

四、Harbor 高可用环境搭建

1. 将 Harbor 发送到 10.0.0.21 节点

[root@harbor01:~]# scp harbor-offline-installer-v2.7.2.tgz 10.0.0.21:/root

2. 解压软件包

[root@harbor02:~]# tar xf harbor-offline-installer-v2.7.2.tgz -C /caixiangjia/softwares/

3. 将 Harbor 配置文件发送到 10.0.0.21 节点

[root@harbor01:harbor]# scp harbor.yml 10.0.0.21:/caixiangjia/softwares/harbor/

4. 安装 Harbor

# 修改harbor配置文件
[root@harbor02:harbor]# vim harbor.yml
...
hostname: 10.0.0.21
...

[root@harbor02:harbor]# ./install.sh --with-chartmuseum

5. 访问 Harbor 的Web Ui

  • 地址: http://10.0.0.21/
  • 账号: admin
  • 密码: 1

6. 10.0.0.20节点新建仓库

7. 10.0.0.20节点新建复制规则

8. 10.0.0.21节点新建仓库

9. 10.0.0.21节点新建复制规则

10. 测试验证效果

推送镜像到 20 节点,观察 21 是否有同步数据

[root@harbor01:~]# docker push 10.0.0.20/wordpress/wordpress:latest


推送镜像到 21 节点,观察 20 是否有同步数据

[root@harbor02:~]# docker push 10.0.0.21/mysql/mysql:8.0.36-oracle


11. 配置keepalived

1. 分别安装keepalived

[root@harbor01:~]# apt -y install keepalived
[root@harbor02:~]# apt -y install keepalived

2. 修改 keepliaved 的配置文件

[root@harbor01:~]# cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
   router_id 10.0.0.20
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_port.sh 80"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    mcast_src_ip 10.0.0.20
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 11111111
    }
    track_script {
         chk_nginx
    }
    virtual_ipaddress {
        10.0.0.99
    }
}
EOF


[root@harbor02:~]# cat > /etc/keepalived/keepalived.conf <<EOF
! Configuration File for keepalived
global_defs {
   router_id 10.0.0.21
}
vrrp_script chk_nginx {
    script "/etc/keepalived/check_port.sh 80"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 100
    priority 100
    advert_int 1
    mcast_src_ip 10.0.0.21
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 11111111
    }
    track_script {
         chk_nginx
    }
    virtual_ipaddress {
        10.0.0.99
    }
}
EOF

3. 启动 keepalived

[root@harbor01:~]# systemctl enable --now keepalived
[root@harbor02:~]# systemctl enable --now keepalived

4. 检查VIP地址

[root@harbor01:~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:b2:85:39 brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 10.0.0.20/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 10.0.0.99/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feb2:8539/64 scope link 
       valid_lft forever preferred_lft forever
       
       
[root@harbor02:~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c3:05:1b brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 10.0.0.21/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec3:51b/64 scope link 
       valid_lft forever preferred_lft forever

5. 使用VIP地址登录

http://10.0.0.99/

6. 让10.0.0.21节点宕机,观察VIP是否漂移

[root@harbor01:~]# init 0
[root@harbor02:~]# ip a
...
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:c3:05:1b brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 10.0.0.21/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 10.0.0.99/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fec3:51b/64 scope link 
       valid_lft forever preferred_lft forever

harbor仓库正常访问

五、Prometheus监控 Harbor

1. 修改 Prometheus 的配置文件

vim prometheus.yml 
...
  - job_name: "harbor-exporter"
    static_configs:
      - targets:
          - 10.0.0.99:9099

2. 热加载配置文件

curl -X POST 10.0.0.31:9090/-/reload

3. 验证是否监控成功

http://10.0.0.31:9090/targets

4. Grafana导入模板ID

16686

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值