harbor高可用部署
文章转载自:https://blog.csdn.net/networken/article/details/119704025
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实例信息:
备注:如果在私有云环境部署,可自建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用户下:
notaryserver
notarysigner
registry
配置NAS实例
创建NAS实例后,在两台ECS实例上都执行挂载:
# 安装NFS客户端
yum install nfs-utils
# 执行以下命令,提高同时发起的NFS请求数量
echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
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
EOF
mkdir /data
mount -a
# 验证挂载是否成功
[root@harbor001 ~]# df -h | grep aliyun
217d3488b8-mtr10.cn-shenzhen.nas.aliyuncs.com:/ 10P 0 10P 0% /data
生成域名证书
域名证书可以手动自签证书,但自签发的证书不会被 Chrome 等浏览器信任,这里采用 Let’s Encrypt 生成免费的、可被浏览器信任的证书,常用的 Let’s Encrypt 生成工具主要有 acme.sh 及 certbot 两种,本次使用 acme.sh 自动从 letsencrypt 生成证书。
使用acme.sh时有http及dns两种验证方式,dns验证又分为手动和自动,这里使用阿里云域名解析,支持使用dns方式自动连接到阿里云API申请证书:
curl https://get.acme.sh | sh
yum install -y socat
export 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/cert
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
查看安装到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.com
http:
port: 80
https:
port: 443
certificate: /data/harbor/cert/registry.cloudcele.com.crt
private_key: /data/harbor/cert/registry.cloudcele.com.key
data_volume: /data/harbor
external_database:
harbor:
host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.com
port: 1921
db_name: registry
username: postgres
password: Postgres@2021
ssl_mode: disable
max_idle_conns: 2
max_open_conns: 0
notary_signer:
host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.com
port: 1921
db_name: notarysigner
username: postgres
password: Postgres@2021
ssl_mode: disable
notary_server:
host: pgm-wz9541r7evq0auo6168200.pg.rds.aliyuncs.com
port: 1921
db_name: notaryserver
username: postgres
password: Postgres@2021
ssl_mode: disable
external_redis:
host: r-wz9fpfgjon0p4kci80.redis.rds.aliyuncs.com:6379
password: Redis123
registry_db_index: 1
jobservice_db_index: 2
chartmuseum_db_index: 3
trivy_db_index: 5
idle_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-store
Login 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
harbor高可用部署的更多相关文章
- kubernetes1.7.6 ha高可用部署
写在前面: 1. 该文章部署方式为二进制部署. 2. 版本信息 k8s 1.7.6,etcd 3.2.9 3. 高可用部分 etcd做高可用集群.kube-apiserver 为无状态服务使用hap ...
- NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署
NoSQL数据库Mongodb副本集架构(Replica Set)高可用部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. MongoDB 是一个基于分布式文件存储的数据库.由 C ...
- LVS+Keepalived高可用部署
一.LVS+Keepalived高可用部署 一.keepalived节点部署 1.安装keepalived yum install keepalived ipvsadm -y mkdir -p /op ...
- Rancher Server HA的高可用部署实验-学习笔记
转载于https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署实验-学习笔记 一.机器 ...
- eql高可用部署方案
运行环境 服务器两台(后面的所有配置案例都是以10.96.0.64和10.96.0.66为例) 操作系统CentOS release 6.2 必须要有共同的局域网网段 两台服务器都要安装keepali ...
- MooseFS及其高可用部署
MooseFS的工作原理分析 MooseFS(下面统一称为MFS)由波兰公司Gemius SA于2008年5月30日正式推出的一款Linux下的开源存储系统,是OpenStack开源云计算项目的子项目 ...
- Redis高可用部署及监控
Redis高可用部署及监控 目录 一.Redis Sentinel简介 二.硬件需求 三.拓扑结构 .单M-S结构 .双M-S结构 .优劣对比 四.配置部 ...
- 006.SQLServer AlwaysOn可用性组高可用部署
一 数据库镜像部署准备 1.1 数据库镜像支持 有关对 SQL Server 2012 中的数据库镜像的支持的信息,请参考:https://docs.microsoft.com/zh-cn/previ ...
- kubernetes 1.15.1 高可用部署 -- 从零开始
这是一本书!!! 一本写我在容器生态圈的所学!!! 重点先知: 1. centos 7.6安装优化 2. k8s 1.15.1 高可用部署 3. 网络插件calico 4. dashboard 插件 ...
随机推荐
- Java中运算符和方法的区别
1.多数情况下,运算符是程序语言里固有的.比如+,-,*,/.可以直接被编译为机器语言而无需再调用其它方法编译. 2.运算符在被定义时会被规定运算的优先级.如4+3*3,会得到13.而不是21. 3. ...
- ESXI启用本地登录和SSH服务连接功能,使用Xshell连接
1.选中Troubleshoot Options进行SSH服务配置 2.开启本地登录功能 3.开启远程连接功能 4.本地登录修改SSH服务允许基于密码登录 默认无法用密码登录ssh服务,只支持基于ke ...
- 第k小 来源:牛客网
题目 链接:https://ac.nowcoder.com/acm/contest/28886/1003 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K, ...
- (转)git使用收集
由于最近项目开始弃SVN用git,特意整理下git命令.原文链接为http://www.jb51.net/article/55442.htm git branch 查看本地所有分支git status ...
- odoo 14 python 单元测试步骤
# odoo 14 python 单元测试步骤 # 一.在模块根目录创建tests目录 # 二.在tests目录下创建__init__.py文件 # 三.继承TransactionCase(Singl ...
- 云图说丨初识华为云微服务引擎CSE
摘要:微服务引擎(Cloud Service Engine,CSE),是用于微服务应用的云中间件,为用户提供注册发现.服务治理.配置管理等高性能和高韧性的企业级云服务能力 本文分享自华为云社区< ...
- Java连接数据库从入门到入土
Java连接数据库 一.最原始的连接数据库 是没有导入任何数据源的:只导入了一个数据库驱动:mysql-connector-java-8.0.27.jar 首先是编写db.proterties文件 d ...
- 利用图像二维熵实现视频信号丢失检测(Signal Loss Detection)
1 图像二维熵 图像二维熵作为一种特征评价尺度能够反映出整个图像所含平均信息量的高低,熵值(H)越大则代表图像所包含的信息越多,反之熵值(H)越小,则图像包含的信息越少.对于图像信息量,可以简单地认为 ...
- 最新30系显卡搭建paddle飞浆环境|含CUDA下载安装
下载CUDA 通过这个链接可以下载任意CUDA版本:CUDA Toolkit Archive | NVIDIA Developer 我下载的是这一个:https://developer.downloa ...
- Eclipse里项目名有红叉,但是项目里的每一个文件都没有红叉
原因一:导入的文件被删除了. 解决方法:右击项目名,在弹出的菜单中,选择"Bulid Path"-->"configure build path"--&g ...