harbor高可用简介

harbor目前有两种主流的高可用方案:

  • 双主复制,harbor自带的镜像复制功能
  • 多harbor实例共享后端存储


双主复制架构在遇到大镜像时有同步延迟,并且一个实例故障后需要手动重新开启复制策略才能再次同步,下面以阿里云环境为例,使用两台ECS实例+NFS后端共享存储方式部署高可用harbor,整体架构图如下:

该方案需要注意以下几点:

  1. 共享存储的选取,Harbor的后端存储目前支持本地文件系统、NFS、CephFS、azure、gcs、AWS s3,、swift 以及阿里云oss。
  2. Session在不同的实例上共享,在最新的harbor中,默认session会存放在redis中,只需要将redis独立出来即可,可以通过redis sentinel或者redis cluster等方式来保证redis的可用性。
  3. 由于PostgreSQL多个实例无法共享一份数据文件,需要将harbor中的数据库拆出来独立部署,让多实例共用一个外部数据库,并将Harbor中默认创建在PostgreSQL的所有表的结构、初始数据等导入进单独部署的PostgreSQL服务中,PostgreSQL数据的冗余可以使用PostgreSQL的同步策略来实现。

harbor高可用部署

在阿里云申请以下资源:

资源类型 数量 地域
ECS实例 2 华南1(深圳)-可用区D
NAS实例 1 华南1(深圳)-可用区D
RDS实例 1 华南1(深圳)-可用区D
Redis实例 1 华南1(深圳)-可用区D
SLB实例 1 华南1(深圳)-可用区D

两台ECS实例信息:

ECS主机名 私网IP 公网IP OS 地域
harbor001 172.18.8.242 120.79.96.163 CentOS8.4 华南1(深圳)-可用区D
harbor002 172.18.8.243 120.79.96.169 CentOS8.4 华南1(深圳)-可用区D

备注:如果在私有云环境部署,可自建PostgreSQL集群、Redis集群、NFS server,并使用nginx/haproxy/lvs+keepalived代替公网SLB负载均衡,如果使用对象存储作为后端,可选用minio代替s3。

配置SLB实例

创建1个SLB实例(代替上图nginx)及两组监听,用于四层转发,访问443端口转发到后端两台harbor ECS实例的443端口,访问80端口harbor默认会重定向到443端口,未启动后端harbor时当前监听应该处于异常状态:

自行准备域名,解析到SLB实例的公网IP:

registry.cloudcele.com --->  120.25.165.246

以阿里云域名为例:

配置RDS实例

创建PostgreSQL类型RDS实例,创建一个数据库用户,以超级管理员postgres为例:

然后手动创建三个空数据库,绑定到postgres用户下:

参考:https://goharbor.io/docs/master/install-config/harbor-ha-helm

notaryserver
notarysigner
registry

阿里云示例:

配置NAS实例

创建NAS实例后,在两台ECS实例上都执行挂载,安装NFS客户端:

sudo yum install nfs-utils

执行以下命令,提高同时发起的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文件系统,这里挂载到/data目录下

cat >> /etc/fstab <<EOF
217d3488b8-mtr10.cn-shenzhen.nas.aliyuncs.com:/ /data nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0
EOFmkdir /data
mount -a

验证挂载是否成功

[root@harbor001 ~]# df -h | grep aliyun
217d3488b8-mtr10.cn-shenzhen.nas.aliyuncs.com:/   10P     0   10P   0% /data

生成域名证书

参考:

https://github.com/acmesh-official/acme.sh
https://goharbor.io/docs/2.3.0/install-config/configure-https/

域名证书可以手动自签证书,但自签发的证书不会被 Chrome 等浏览器信任,这里采用 Let’s Encrypt 生成免费的、可被浏览器信任的证书,常用的 Let’s Encrypt 生成工具主要有 acme.sh 及 certbot 两种,本次使用 acme.sh 自动从 letsencrypt 生成证书。

使用acme.sh时有httpdns两种验证方式,dns验证又分为手动和自动,这里使用阿里云域名解析,支持使用dns方式自动连接到阿里云API申请证书:

curl https://get.acme.sh | sh
yum install -y socatexport Ali_Key=xxxxxxxxxxxxxxx
export Ali_Secret=xxxxxxxxxxxxxxx
acme.sh --issue --dns dns_ali -d registry.cloudcele.com

查看生成的证书

# ls -1 /root/.acme.sh/registry.cloudcele.com/
ca.cer
fullchain.cer
registry.cloudcele.com.cer
registry.cloudcele.com.conf
registry.cloudcele.com.csr
registry.cloudcele.com.csr.conf
registry.cloudcele.com.key

安装证书到harbor目录下

mkdir -p /data/harbor/certacme.sh --installcert -d registry.cloudcele.com \--key-file /data/harbor/cert/registry.cloudcele.com.key \--fullchain-file /data/harbor/cert/registry.cloudcele.com.crt

查看安装到harbor路径下的证书

[root@harbor001 ~]# ls -1 /data/harbor/cert/
registry.cloudcele.com.crt
registry.cloudcele.com.key

acme.sh申请的证书有效期90天,acme.sh安装的时候已经自动添加了一个计划任务每天自动更新证书,更新后重启使用证书的服务。 acme.sh自动添加的计划任务

[root@harbor001 ~]# crontab  -l | grep acme
55 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

该计划任务也会自动执行证书上一次的安装命令,为确保nginx使用最新的证书,重新执行一次安装证书命令让acme.ch将证书文件安装到正确的位置及重启nginx服务。

acme.sh --installcert -d registry.cloudcele.com \--key-file /data/harbor/cert/registry.cloudcele.com.key \--fullchain-file /data/harbor/cert/registry.cloudcele.com.crt \--reloadcmd "docker restart nginx"

开始安装harbor

前提:两台ECS实例已完成docker及docker-compose安装,以下所有操作在第一个harbor节点执行:

下载harbor

wget https://mirrors.tuna.tsinghua.edu.cn/github-release/goharbor/harbor/v2.3.1/harbor-offline-installer-v2.3.1.tgz
tar -zxvf harbor-offline-installer-v2.3.1.tgz -C /opt

切换到harbor安装目录

cd /opt/harbor
cp harbor.yml.tmpl harbor.yml

修改harbor配置文件,注意获取VPC实例内网连接地址、端口及密码信息,有变动的内容如下:

[root@harbor001 harbor]# vim harbor.yml
hostname: registry.cloudcele.comhttp:port: 80https:port: 443certificate: /data/harbor/cert/registry.cloudcele.com.crtprivate_key: /data/harbor/cert/registry.cloudcele.com.keydata_volume: /data/harborexternal_database:harbor:host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.comport: 1921db_name: registryusername: postgrespassword: Postgres@2021ssl_mode: disablemax_idle_conns: 2max_open_conns: 0notary_signer:host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.comport: 1921db_name: notarysignerusername: postgrespassword: Postgres@2021ssl_mode: disablenotary_server:host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.comport: 1921db_name: notaryserverusername: postgrespassword: Postgres@2021ssl_mode: disableexternal_redis:host: r-wz9fpfgjon0p4kci80.redis.rds.aliyuncs.com:6379password: Redis123registry_db_index: 1jobservice_db_index: 2chartmuseum_db_index: 3trivy_db_index: 5idle_timeout_seconds: 30

执行harbor安装

./install.sh

复制harbor安装目录到harbor002节点:

[root@harbor001 ~]# scp -r /opt/harbor/ 172.18.8.243:/opt

同样,连接到harbor002节点直接安装即可,无需其他操作:

[root@harbor002 ~]# cd /opt/harbor/
[root@harbor002 ~]# ./install.sh

访问harbor验证

浏览器访问harbor域名:https://registry.cloudcele.com

停掉第一个节点harbor实例,验证依然能够正常访问:

[root@harbor001 ~]# cd /opt/harbor/
[root@harbor001 harbor]# docker-compose down

harbor上传镜像

首先为docker客户端准备证书,从acme.sh目录下获取证书

[root@harbor001 ~]# cd /root/.acme.sh/registry.cloudcele.com/

复制以下三个文件到docker客户端目录/etc/docker/certs.d/registry.cloudcele.com/

ca.cer
registry.cloudcele.com.cer
registry.cloudcele.com.key

客户端创建目录,查看复制过来的证书文件:

# mkdir -p /etc/docker/certs.d/registry.cloudcele.com/# ls -1 /etc/docker/certs.d/registry.cloudcele.com/
ca.crt
registry.cloudcele.com.cert
registry.cloudcele.com.key

重启docker进程

systemctl restart docker

登录harbor仓库

# docker login registry.cloudcele.com
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-storeLogin Succeeded

上传docker镜像

[root@master ~]# docker push registry.cloudcele.com/library/nginx
Using default tag: latest
The push refers to repository [registry.cloudcele.com/library/nginx]
d9eb91d66e2a: Pushed
ae1f545e4c08: Pushed
c20672db3628: Pushed
4cbb728cd302: Pushing [=>                                                 ]  1.609MB/63.74MB
4cbb728cd302: Pushed
9eb82f04c782: Pushed
latest: digest: sha256:1a53eb723d17523512bd25c27299046cfa034cce309f4ed330c943a304513f59 size: 1362

拉取docker镜像

[root@master ~]# docker pull registry.cloudcele.com/library/nginx
Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:1a53eb723d17523512bd25c27299046cfa034cce309f4ed330c943a304513f59
Status: Image is up to date for registry.cloudcele.com/library/nginx:latest
registry.cloudcele.com/library/nginx:latest

参考:https://cloud.tencent.com/developer/article/1838838

harbor高可用部署相关推荐

  1. 基于共享存储的Harbor高可用-Docker部署方案

    部署规划 架构图 Redis也可以和Harbor集中部署.这样避免了在不使用Reids集群模式下单节点的故障. 使用此模式,目前测试对于Harbor的登录,镜像信息查看,在计算节点,镜像的推送和下载没 ...

  2. Pod在多可用区worker节点上的高可用部署

    一.      需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布 ...

  3. Windows Admin Center 高可用部署

    本文老王将为大家实作Windows Admin Center的高可用部署,相信有了高可用的架构支持将更进一步推进该产品的落地 环境介绍 08dc2 lan 10.0.0.2 255.0.0.0 16s ...

  4. LYNC2013部署系列PART10:后端高可用部署

    前言:本篇文章介绍lync后端服务器高可用的部署,后端服务器的作用就不介绍了,系列第2篇文章中有介绍,目前已部署好了2台SQL服务器,分别为lync2013be.contoso.com和lync201 ...

  5. Pod在多可用区worker节点上的高可用部署 1

    一.      需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布 ...

  6. Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑

    Mysql+Heartbeat+Drbd生产环境高可用部署若干问题解惑: ############################################################ # ...

  7. 节点部署_Pod在多可用区worker节点上的高可用部署

    一. 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可 ...

  8. Spark HA高可用部署、基于文件系统单点恢复、基于zookeeper的Standby Master、如何恢复到上一次活着master挂掉之前的状态 03

    1. Spark HA高可用部署 Spark Standalone集群时Master-Slaves架构的集群模式,和大部分的Master-Slaves结果集群一样,存在着Master单点故障的问题.如 ...

  9. rancher2.6.2 单机及高可用部署

    rancher2.6.2 单机及高可用部署 文章目录 rancher2.6.2 单机及高可用部署 前言 单机部署 高可用部署 k8s集成 前言 1.服务器准备 单机部署: 机器名 IP地址 部署内容 ...

  10. Exchange Server 2013 DAG高可用部署(一)-前期准备

    微软Exchange邮件服务器想必在当今这个信息产业发达的社会,大家都不陌生.我们的生活和工作现在已经离不开电子邮件,作为企业信息化的IT人员,如何给大家带来更高更好的邮件服务,这个应该是我们着重关注 ...

最新文章

  1. 【Curl】 获取网站下载速率(Bytes/s)
  2. 【机器学习基础】机器学习模型的度量选择(下)
  3. PyVmomi 初体验
  4. this.$nextTick()的使用场景
  5. 小博老师解析Java核心技术 ——JSwing绘图技术
  6. 【java】动态高并发时为什么推荐重入锁而不是Synchronized?
  7. 搭建 Harbor 1.10.6 高可用集群
  8. Eclipse连接hdfs
  9. Killing Parallel Query Session
  10. ios 高德地图加载瓦片地图_iOS 利用高德地图WMS服务
  11. 计算机恢复数据怎么恢复,电脑数据恢复,详细教您电脑数据如何恢复
  12. PHP 类似time控件功能,最新火车头免费伪原创插件,多功能秒杀市面上所有同类工具...
  13. 北京邮电大学计算机导论试题,2020年秋季《北京邮电大学网络教育》各种考试题目汇总.docx...
  14. html卷轴展开动画,Flash制作卷轴展开的动画
  15. 外包怎么了?请不要“妖魔化”它。
  16. 《博弈论》异或 博弈x^x第二手只能一定赢吗?
  17. 【鼠标右键点击桌面图标时,出现资源管理器未响应】
  18. 计算机考试准考证没有照片
  19. 0 嵌入式-ARM简介
  20. 浅析产品新手引导设计

热门文章

  1. 手机内置摄像头接线图解_坚果R2 手机官方壁纸
  2. VR技术在数据中心3D机房中的应用(下)
  3. 7-zip比较丑的图标修改
  4. gateway配合nacos路由报错:Unable to find instance for XXX
  5. 基于SSM的培训班管理系统
  6. libdmtx结合OpenCV识别DataMatrix二维码
  7. 优必选大型仿人服务机器人Walker X的核心技术突破
  8. NOI 4.3 1538: Gopher II(匈牙利算法求最大匹配)
  9. Windows共享Linux打印机,Ubuntu使用教程-使用Windows共享打印机进行打印
  10. 我在上海奋斗五年 从月薪3500到700万