赞
踩
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。统一了它们的文件路径,内容。
[root@redis ~]# cat redis_install.sh
[root@redis ~]# vi /usr/local/redis/etc/redis.conf
redis安装完毕。
[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
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还带有用户管理功能, 并且还具备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 DATABASEpostgres=# 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 ROLEpostgres=# 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数据库创建完了,跟配置文件对应起来了。
[root@harbor-a harbor]# ./prepare 运行它,做一部分的准备工作,生成一系列的配置文件
[root@harbor-a harbor]# ./install.sh 将harbor涉及到的容器进程启动起来
【注意】少熬夜,多看书。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。