当前位置: 首页 > news >正文

部署Harbor私有仓库

一、Harbor

1、Harbor简介

        Docker容器应用的开发和运行离不开可靠的镜像管理,Docker官方提供了原生的Registry,但其功能比较简单,而且没有可视化界面,自然无法满足企业级的需求。虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署私有环境内的Registry也是非常必要的。

        为了解决以上需求,VMware公司推出了Harbor,Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。

Harbor的架构示意图:

Harbor的GitHub仓库地址如下:

  • https://github.com/goharbor/harbor
  • Wiki:https://github.com/goharbor/harbor/wiki

2、Harbor高可用部署

官方的安装文档:

  • https://goharbor.io/docs/2.0.2/install-config/

        本文采用的高可用方案是Harbor的双主复制,该方案比较简单,需要搭建至少两个Harbor节点,并且节点之间能够互相复制,然后通过nginx代理Harbor节点提供外部访问。这里采用的高可用方案级别没那么高,因为主要是通过Nginx代理其中一个节点,该节点挂掉后需要手动修改Nginx配置文件去代理另一个可用节点。

        所以此方案比较适合中小型公司,而且Harbor主要是给公司内部的开发人员使用的,通常只需要保证分钟级的高可用性就可以了。另外还有一点就是,云环境基本无法使用keepalived,因为云服务商一般不支持自定义外网可访问的虚拟IP,要么就是使用起来非常麻烦。这也是为什么没有采用keepalived的原因之一,当然,如果是部署在内网服务器上也是可以采用keepalived的

3、准备工作

我这里使用了三台CentOS-7.9的虚拟机,具体信息如下表:

系统版本

IP地址

节点角色

CPU

Memory

Hostname

CentOS-7.9

192.168.10.101

  Nginx

\>=2

\>=2G

     Nginx

Docker

CentOS-7.9

192.168.10.102

Harbor1

\>=2

\>=2G

Docker01

CentOS-7.9

192.168.10.106

Harbor2

\>=2

\>=2G

Docker02

二、安装Harbor(worker节点)

在两台worker节点上分别安装Harbor,由于官方提供了安装脚本,安装过程还是比较简单的。具体步骤如下:

1、下载安装包

首先下载官方的离线安装包,当然你能科学上网的话使用在线安装包也可以:

https://github.com/goharbor/harbor/releases/tag/v2.4.3

https://github.com/goharbor/harbor/releases/download/v2.4.3/harbor-offline-installer-v2.4.3.tgz

2、下载完成后,将压缩包上传到两个worker节点,并解压

3、配置harbor

3.1、将模板拷贝一份出来

4、运行脚本

./install.sh

5、访问测试

三、安装Nginx

1、拉取nginx的镜像

docker pull nginx:1.13.12

2、编辑配置文件

#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}stream {upstream hub {server 192.168.10.102:80;}server {listen 80;proxy_pass hub;proxy_timeout 300s;proxy_connect_timeout 5s;}
}

Tips:这里只所以只代理其中一个Harbor节点是因为Harbor节点之间的同步存在延迟,而且通常镜像都比较大,所以这个延迟也会比较明显。一般镜像推送完马上就会调度拉取,所以这个延迟时间一般是不可接受的。如果让nginx代理两个节点就会出现一会请求A一会请求B的问题,造成镜像pull/push不成功。只代理一个节点也成为了这个方案的缺点,当nginx代理的那个节点宕掉,我们得手动修改nginx的配置代理另一个节点。但由于Harbor是给公司内部的开发人员使用,通常可以允许分钟级别的不可用。

3、编写重启脚本

vim restart.sh
#!/bin/bashdocker stop harbor-nginx
docker rm harbor-nginxdocker run -itd --net=host --name harbor-nginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf nginx:1.13.12

4、运行脚本

bash restart.sh

5、使用代理节点IP访问

5.1、创建Harbor项目和用户

将默认的library项目删除掉,然后创建一个新项目,项目名称为kubernetes

5.2、到“用户管理”新建一个用户

5.3、将该用户添加到新建的项目中

6、所有的docker主机设置daemon.json文件

        回到命令行上测试一下pushpull。由于我们自己搭建的私有仓库默认是不受Docker信任的,所以需要先在配置文件中增加如下配置项让Docker信任该registry:

vim /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker

vim /etc/docker/daemon.json{
"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com"],
"insecure-registries": ["192.168.10.101"]
}

7、重新启动一个容器

bash restart.sh

8、重新跑一遍harbor脚本

./install.sh
docker ps -a

./install.sh
docker ps -a

9、push上传

然后尝试使用命令行push一个镜像到Harbor上

docker login 192.168.10.101
docker pull cirros
docker tag cirros 192.168.10.101/kubernetes/cirros:v1
docker push 192.168.10.101/kubernetes/cirros:v1

10、pull拉取

vim /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker
docker pull 192.168.10.101/kubernetes/cirros:v1
docker images

11、配置Harbor节点互相复制(两个节点都设置,要连接对方的ip)

        测试完Harbor的基本功能后,我们接下来配置一下Harbor节点之间的互相复制功能,让两个节点能够同步镜像数据。首先到第一个节点上的“仓库管理”界面中新建一个目标,这个目标就是另一台Harbor节点:

然后到“复制管理”界面中新建复制规则,如下

  • 资源过滤器是用于定义只复制哪些镜像的,过滤维度有名称、tag和label。不配置默认复制全部

定义了复制规则后,我们可以在界面上手动触发复制:

复制成功后,到另一个节点上可以看到kubernetes这个项目及项目下的镜像都被复制过去了:

http://www.dtcms.com/a/276591.html

相关文章:

  • 第五章 RAG知识库进阶
  • Java项目2——增强版飞机大战游戏
  • Linux:信号
  • Redis持久化机制:RDB和AOF
  • 【面试八股文】2025最新软件测试面试
  • 多模态数据解压-Parquet
  • 【数据结构初阶】--顺序表(三)
  • 咨询导览,AI发展趋势
  • 三维点云Transformer局部感受野构建:理论、方法与挑战
  • 【图像处理基石】如何入门大规模三维重建?
  • 宁德时代2025年社招入职Verify测评语言理解数字推理考点及SHL测评真题整理
  • Augmented Nested Arrays With Enhanced DOF and Reduced Mutual Coupling
  • C++面试问题集锦
  • Linux系统编程——目录 IO
  • C++ 算法题常用函数大全
  • 独立开发第二周:构建、执行、规划
  • 数智管理学(三十二)
  • ATE-市场现状及趋势
  • AI:机器人行业发展现状
  • 用 Jpom 10 分钟搭好一套轻量级 CICD + 运维平台
  • 傅里叶方法求解偏微分方程2
  • 【C/C++】迈出编译第一步——预处理
  • 并查集理论以及实现
  • QILSTE/旗光 H6-108QHR
  • SSM项目上传文件的方式及代码
  • Java使用Langchai4j接入AI大模型的简单使用(二)
  • 线程同步:互斥锁与条件变量实战指南
  • 猿人学js逆向比赛第一届第二十题
  • 关于赛灵思的petalinux zynqmp.dtsi文件的理解
  • 二叉树算法进阶