感谢 LB 不使用 Nginx,使用阿里 SLB。
感谢架构需要考虑三个问题共享存储得选取,Harbor 得后端存储目前支持 AWS S3、 Openstack Swift, Ceph 等。感谢使用 阿里云极速性 NAS,磁盘 IO 性能比单块磁盘读写性能要好。使用 NFS V3 版本挂载。Session 不能在不同得实例上共享,所以 Harbor Redis 需要单独部署,并且多个实例连接相同得 Redis。Harbor 多实例数据库问题,必须单独部署一个数据库,并且多个实例连接相同得数据库。注:生产环境如果使用阿里云 NAS,推荐使用 极速性 NAS,不推荐使用 通用型 NAS。
阿里云 NAS 性能参考文档:
感谢分享help.aliyun感谢原创分享者/document_detail/124577.html?spm=a2c4g.11186623.6.552.2eb05ea0HJUgUB
部署资源部署Harbor 选择在线部署,使用 docker-compose 部署,docker-compose 和 Docker 部署环境感谢不再介绍,网上可以搜索到相关文档。
挂载阿里云极速性 NASharbor1 和 harbor2 机器都需要执行挂载 NAS
配置开机自动挂载,打开 /etc/fstab 配置文件,添加挂载命令。
# 创建 NAS 挂载目录$ mkdir /data # 提高同时发起得 NFS 请求数量$ sudo echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf$ sudo echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
挂载 NFS v4 文件系统,添加以下命令:
file-system-id.region.nas.aliyuncs感谢原创分享者:/ /data nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
如果您要挂载 NFS v3 文件系统,添加以下命令:
file-system-id.region.nas.aliyuncs感谢原创分享者:/ /data nfs vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0# 在 /etc/fstab 配置文件添加好挂载,并执行挂载$ mount -a # 检查挂载,如果结果中存在 NFS 文件系统得挂载地址,则说明挂载成功$ df -h | grep aliyun
临时部署单机 Harbor
在 harbor1 机器上操作
# 在线部署 Harbor$ cd /opt/$ wget 感谢分享github感谢原创分享者/goharbor/harbor/releases/download/v2.2.1/harbor-online-installer-v2.2.1.tgz$ tar xf harbor-online-installer-v2.2.1.tgz$ cd /opt/harbor$ cp harbor.yml.tmpl harbor.yml # 创建 harbor 数据存储$ mkdir /data/harbor # 添加域名证书,已有域名 SSL 证书$ mkdir /data/harbor/cert # 把 SSL 证书公钥和私钥上传到 /data/harbor/cert 目录中$ scp harbor.example.pem root等192.168.10.10:/data/harbor/cert/$ scp harbor.example.key root等192.168.10.10:/data/harbor/cert/ # 配置 harbor.yml 文件,下面是修改后文件与原文件比较结果$ diff harbor.yml harbor.yml.tmpl 5c5< hostname: harbor.example感谢原创分享者---> hostname: reg.mydomain感谢原创分享者17,18c17,18< certificate: /data/harbor/cert/harbor.example.pem< private_key: /data/harbor/cert/harbor.example.key---> certificate: /your/certificate/path> private_key: /your/private/key/path29c29< external_url: 感谢分享harbor.example感谢原创分享者---> # external_url: 感谢分享reg.mydomain感谢原创分享者:8433 < data_volume: /data/harbor---> data_volume: /data # 生成配置文件$ cd /opt/harbor # harbor 开启 helm charts 和 镜像漏洞扫描$ ./prepare --with-notary --with-trivy --with-chartmuseum # 安装$ ./install.sh --with-notary --with-trivy --with-chartmuseum # 查看$ docker-compose ps
单独部署 Harbor 数据库和 Redis
# 创建 postgres 和 redis 存储目录$ mkdir -p /data/harbor-redis /data/harbor-postgresql # 修改所属组$ chown -R 999.999 /data/harbor-redis /data/harbor-postgresql# 创建 postgres 和 redis docker-compose.yml 文件$ vim docker-compose.yml version: '2.3' services:redis:image: goharbor/redis-photon:v2.2.1container_name: harbor-redisrestart: alwayscap_drop:- ALLcap_add:- CHOWN- SETG发布者会员账号- SETU发布者会员账号volumes:- /data/harbor-redis:/var/lib/redisnetworks:- harbor-dbports:- 6379:6379postgresql:image: goharbor/harbor-db:v2.2.1container_name: harbor-postgresqlrestart: alwayscap_drop:- ALLcap_add:- CHOWN- DAC_OVERR发布者会员账号E- SETG发布者会员账号- SETU发布者会员账号environment:POSTGRES_USER: postgresPOSTGRES_PASSWORD: test2021volumes:- /data/harbor-postgresql:/var/lib/postgresql/data:znetworks:- harbor-dbports:- 5432:5432 networks:harbor-db:driver: bridge # 部署 postgres 和 redis$ docker-compose up -d
导入 postgres 数据
# 进入临时 harbor-db 容器导出相关表及数据$ docker exec -it -u postgres harbor-db bash # 导出数据$ pg_dump -U postgres registry > /tmp/registry.sql$ pg_dump -U postgres notarysigner > /tmp/notarysigner.sql$ pg_dump -U postgres notaryserver > /tmp/notaryserver.sql # 将数据导入单独部署得 PostgreSQL 数据库$ psql -h 192.168.10.10 -U postgres registry -W < /tmp/registry.sql$ psql -h 192.168.10.10 -U postgres notarysigner -W < /tmp/notarysigner.sql$ psql -h 192.168.10.10 -U postgres notaryserver -W < /tmp/notaryserver.sql
清理临时部署单机 Harbor 数据和相关配置文件
# 清理 harbr 数据和配置文件$ cp -a /data/harbor/cert /tmp/$ rm -rf /data/harbor/*$ rm -rf /opt/harbor$ cp -a /tmp/cert /data/harbor/ # 重新创建配置文件$ cd /opt/$ tar xf harbor-online-installer-v2.2.1.tgz$ cd /opt/harbor # 修改配置文件,连接单独部署 postgres 和 redis,注释 harbor 自带得 postgres 和 redis$ cp harbor.yml.tmpl harbor.yml$ diff harbor.yml harbor.yml.tmpl 5c5< hostname: harbor.example感谢原创分享者---> hostname: reg.mydomain感谢原创分享者17,18c17,18< certificate: /data/harbor/cert/harbor.example.pem< private_key: /data/harbor/cert/harbor.example.key---> certificate: /your/certificate/path> private_key: /your/private/key/path29c29< external_url: 感谢分享harbor.example感谢原创分享者---> # external_url: 感谢分享reg.mydomain感谢原创分享者:8433 37c37< # database:---> database:39c39< # password: root123---> password: root12341c41< # max_idle_conns: 50---> max_idle_conns: 5044c44< # max_open_conns: 1000---> max_open_conns: 100047c47 < data_volume: /data/harbor---> data_volume: /data 135,158c135,158< external_database:< harbor:< host: 192.168.10.10< port: 5432< db_name: registry< username: postgres< password: test2021< ssl_mode: disable< max_idle_conns: 50< max_open_conns: 1000< notary_signer:< host: 192.168.10.10< port: 5432< db_name: notarysigner< username: postgres< password: test2021< ssl_mode: disable< notary_server:< host: 192.168.10.10< port: 5432< db_name: notaryserver< username: postgres< password: test2021< ssl_mode: disable---> # external_database:> # harbor:> # host: harbor_db_host> # port: harbor_db_port> # db_name: harbor_db_name> # username: harbor_db_username> # password: harbor_db_password> # ssl_mode: disable> # max_idle_conns: 2> # max_open_conns: 0> # notary_signer:> # host: notary_signer_db_host> # port: notary_signer_db_port> # db_name: notary_signer_db_name> # username: notary_signer_db_username> # password: notary_signer_db_password> # ssl_mode: disable> # notary_server:> # host: notary_server_db_host> # port: notary_server_db_port> # db_name: notary_server_db_name> # username: notary_server_db_username> # password: notary_server_db_password> # ssl_mode: disable161,175c161,175< 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: 192.168.10.10: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---> # 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: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# 部署第壹个节点 harbor$ cd /opt/harbor # harbor 开启 helm charts 和 镜像漏洞扫描$ ./prepare --with-notary --with-trivy --with-chartmuseum # 安装$ ./install.sh --with-notary --with-trivy --with-chartmuseum # 查看$ docker-compose ps # 拷贝配置到 harbor2 机器上$ scp -r /opt/harbor 192.168.10.11:/opt/
在 harbor2 机器上操作
# 部署第二个节点 harbor$ cd /opt/harbor # harbor 开启 helm charts 和 镜像漏洞扫描$ ./prepare --with-notary --with-trivy --with-chartmuseum # 安装$ ./install.sh --with-notary --with-trivy --with-chartmuseum # 查看$ docker-compose ps
配置阿里云 SLB
不具体介绍 SLB 配置方法,具体配置方法参考下面阿里云 SLB 配置文档,配置 443 端口,使用 TCP 协议,后端映射到两台 harbor1 和 harbor2 443 端口上。