HarBor私有镜像仓库

HarBor是vmware,在github中开源出私有镜像的项目,也是在开源领域里作为私有镜像仓库,以及容器镜像的制品库这一层面的项目代表。它是我们经常能遇见的一个项目。

公司在内部将自己的源代码打包成镜像的时候,需要将自己打包的镜像上传到自己可以控制的地方,如果发布到hub.docker. com里面,全世界所有的人都可以下载,这种情况是它们所不希望的。所以就引出来下面这么一套架构。

在公司内部实现其私有的镜像仓库

首先会有nginx去代理多台harbor的主机,可以用harborA,B实现私有镜像仓库的搭建,可以有多台,这个私有镜像仓库,支持k8s集群大概能支持5000多台的拉取,5000台k8s node节点去拉取harbor里的镜像,harbor是可以承受住的,大概上线是在10台harbor,10个harbor被一个负载均衡器负载,对于harbor内部而言,还要把内部的用户信息,及镜像的tar信息镜像存储的文件层数信息以及相应的哈希值,将其存到一个数据库叫pastgresql,(和mysql所起到的意义一样,比mysql的性能要高很多)两台harbor在拉取镜像的时候所去缓存住的一些信息要把它放到redis里。为了保证redis的稳定性,肯定要放一台redis-cluster。mysql的集群最少3台,postgresql最少是5台机器构成一个集群,在上方nginx还要做好备用机,keepalived做心跳检测,保证其高可用,集群内部没有单点。

十台harbor要把镜像文件存储到相同的地方,而且每次读到的文件都是相同的。还需要有一个共享存储,比如nfs,分布式存储产品ceph/glusterfs(专门应用在k8s外部存储,向内提供存储空间)。在内网中(harbor)推荐用nfs。也就是所有的harbor将镜像的文件会从nfs的共享目录中读取,以及从nfs的共享目录中,由harbor拉取提供给nginx,返回给用户。这些文件都会由nfs提供,而且harbor里面一些必要的用户信息,镜像信息等等,harbor都会去到postgresql进行拉取,在包括多台harbor里涉及到的一些镜像相关的缓存,包括用户之间的一些筛选这些信息都会存到redis-cluster中。

现在单做实验,这个项目中所需要的机器一台nginx,两台harbor,一台redis,一台postgresql,一台nfs。六台机器。

如果内存不够可以缩减一下,nginx一台,harbor两台,redis,postgresql,nfs三个放到一台机器。客户端一台(进行拉取镜像,推送镜像的测试)。

 生产中所需要的机器:两台nginx  10台harbor 6台redis-cluster  postgresql单独成一个集群最小需要5台机器  nfs只需要一台nfs服务器就ok     在生产中这个架构最小的机器台数大概在24台。

配置:nginx比较吃cpu,内存所以对于cpu内存一般给到4核16G 两台8核32G

由于harbor内部运行的是容器,所以它内部可能发生资源的争抢,官方推荐最小的配置是4核4G,而在生产中为了达到一定的效果一般会调整为4核16G,让它稳定的运行。

redis-cluster 每台机器要给64G,

postgresql :吃cpu,内存,磁盘要大

nfs:主要吃网络,io, 网口要给到万兆,存储要巨大:最好给到TB

在阿里云创建的最大节点数是5000(直接买)五套集群,40w,1套正在用,4套灾备,其中一套挂了,另外的立马顶上,

实验开始

nginx一台,harbor两台,redis,postgresql,nfs三个放到一台机器。客户端一台

harbor 4GB 剩下三台1GB

在redis机器

yum -y install nfs-utils     安装nfs的驱动
mkdir -p /data/harbor        在本地创建一个目录

vi /etc/exports    对目录进行一个共享

 systemctl enable --now nfs  启动 

启动完nfs去harborA,B这两台机器,将nfs共享目录挂到这两台机器

[root@harbor-a ~]# mkdir -p /data/harbor  在harborA创建相同的目录(防止混乱)

[root@harbor-a ~]# vi /etc/fstab

挂载到本地的/data/harbor

[root@harbor-b ~]# mkdir -p /data/harbor
[root@harbor-b ~]# vi /etc/fstab

 证明nfs构建好了,而且这两台机器harborA,B /data/harbor所读取到的内容全部来自于nfs这台机器data/harbor。统一了它们的文件路径,内容。

安装redis

[root@redis ~]# cat redis_install.sh  

 [root@redis ~]# vi /usr/local/redis/etc/redis.conf  

 redis安装完毕。

安装postgresql

[root@redis ~]# yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 把它装到机器里

yum makecache   先看最近有没有版本更新,建议装新版,因为这个新版bug比较少,用的时候和mysql差不多,都是sql语句,相对mysql来说它的性能很强悍。

[root@redis ~]# yum install -y postgresql14-server

[root@redis ~]# /usr/pgsql-14/bin/postgresql-14-setup initdb    做数据库的初始化 

 确保启动它启动成功,然后调配置。

[root@redis ~]# vi /var/lib/pgsql/14/data/postgresql.conf

 [root@redis ~]# vi /var/lib/pgsql/14/data/pg_hba.conf

 md5是一种密码的授权方式,在postgresql数据库中,创建出的用户就可以连接到我们的数据库去控制数据库。

[root@redis data]# systemctl restart postgresql-14  重启让配置生效

 装好了postgresql

安装nginx

 yum -y install nginx

 [root@nginx ~]# vi /etc/nginx/conf.d/default.conf

[root@nginx ~]# mkdir /etc/nginx/certs/
生成证书

 certbot certonly --manual --preferred-challenges dns -d harbor.gg.icu   签证三级域的证书(如果报错连自己手机热点下载)

[root@nginx harbor.gkjt.work]# systemctl restart nginx

harbor配置及启动

 安装harbor
 含义: 对企业内的镜像进行统一的管理,并且harbor还带有用户管理功能, 并且还具备LDAP用户管理域接入功能;

1.事先在两台harbor机其中安装好docker, 并配置好加速器

装harbir之前装好docker,因为harbor所有的服务都是以容器的形式运行,

[root@harbor-a ~]# cd /etc/yum.repos.d
[root@harbor-a yum.repos.d]# wget https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo  下载仓库

[root@harbor-a yum.repos.d]# sed -i 's#download.docker.com#mirrors.ustc.edu.cn/docker-ce#g' docker-ce.repo    改源地址,对docker版本没要求,最新版最好。

[root@harbor-a yum.repos.d]# yum makecache fast

[root@harbor-a yum.repos.d]# yum -y install docker-ce

配置镜像加速器

将默认的替换成cn

[root@harbor-a docker]# vi /etc/docker/daemon.json

{
    "registry-mirrors": ["https://registry.docker-cn.com"]
}

[root@harbor-a docker]# systemctl daemon-reload
[root@harbor-a docker]# systemctl restart docker.service

harbor-B 同样的操作

 2.安装docker-compose  单台机器中的容器编排,单台机器中的容器编排工作,有时候并不是启动一个容器就满足我们的业务场景,要连续启动多个就需要使用docker-compose。docker-compose就是用于把多个容器同时在一个宿主机上启动起来的工具,类似把docker写成一个脚本。

[root@harbor-a docker]# wget https://mirrors.hiops.icu/packages/docker-compose-linux-x86_64 --no-check-certificate

[root@harbor-a docker]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

[root@harbor-a docker]# chmod a+x /usr/local/bin/docker-compose

[root@harbor-a docker]# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

下载harbor的离线安装包

[root@harbor-a docker]#  wget https://ghproxy.com/https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz

[root@harbor-a docker]# tar xf harbor-offline-installer-v2.5.3.tgz -C /usr/local/   解压

 [root@harbor-a harbor]# vi harbor.yml   修改配置文件

 https不要,https在做加密的时候传输速度慢,在内网里没有必要做加密(尤其是私有镜像仓库,只有公司能访问到,所以没必要加https,注释掉)

 external_url : https://harbor.ggjt.work

# Uncomment external_database if using external database.
external_database:
  harbor:
    host: <postgresql_address>
    port: 5432
    db_name: harbor
    username: harbor
    password: 1123!!
    ssl_mode: disable
    max_idle_conns: 2
    max_open_conns: 0
  notary_signer:
    host: <postgresql_address>
    port: 5432
    db_name: notary_signer
    username: notary_signer
    password:1123!!
    ssl_mode: disable
  notary_server:
    host: <postgresql_address>
    port: 5432
    db_name: notary_server
    username: notary_server
    password: 11123!!
    ssl_mode: disable

# Uncomment external_redis if using external Redis server
external_redis:
  # support redis, redis+sentinel
  # host for redis: <host_redis>:<port_redis>
  # host for redis+sentinel:
  #  <host_sentinel1>:<port_sentinel1>,<host_sentinel2>:<port_sentinel2>,<host_sentinel3>:<port_sentinel3>
  host: <redis_address>:6379
  #password:
  # sentinel_master_set must be set to support redis+sentinel
  #sentinel_master_set:
  # db_index 0 is for core, it's unchangeable
  registry_db_index: 1
  jobservice_db_index: 2
  chartmuseum_db_index: 3
  trivy_db_index: 5
  idle_timeout_seconds: 30

:set paste    告诉要粘贴了 再按i    : % s/postgresql/192.168.22.200/   数据库的ip

 回到数据库机器中

postgres=# CREATE DATABASE harbor;
CREATE DATABASE
postgres=# CREATE DATABASE notary_signer;
CREATE DATABASE
postgres=# CREATE DATABASE notary_server;
CREATE DATABASE

postgres=# CREATE USER harbor WITH PASSWORD 'Harbor123!!';
CREATE ROLE
postgres=# CREATE USER notary_signer WITH PASSWORD 'Harbor123!!';
CREATE ROLE
postgres=# CREATE USER notary_server WITH PASSWORD 'Harbor123!!';
CREATE ROLE

postgres=# GRANT ALL PRIVILEGES ON DATABASE harbor TO harbor;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE notary_signer TO notary_signer;
GRANT
postgres=# GRANT ALL PRIVILEGES ON DATABASE notary_server TO notary_server;

 postgresql数据库创建完了,跟配置文件对应起来了。

回到harbor中

[root@harbor-a harbor]# ./prepare 运行它,做一部分的准备工作,生成一系列的配置文件

 

[root@harbor-a harbor]# ./install.sh   将harbor涉及到的容器进程启动起来

 

 【注意】少熬夜,多看书。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的导航

谢谢您的打赏,您的鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值