关于harbor做HA

我起初是用helm在k8s上装的harbor,最近遇到如下故障:就是服务器硬件设备故障突然死机,恰巧是harbor容器所在的服务器,其他在这个服务器上运行的容器,由kubelet调度到其他正常的服务器上重启去了,但harbkor并没有被调度走。移动到其他服务器上的容器,需要重新连接harbor拉取镜像,但私有仓库挂了,镜像也就拉取失败,直接导致所有在这个宕机的服务器上运行的容器全部挂了,无法再次启动。所以就想着把harbor从k8s中替换出来,找两台固定的服务器做一个高可用HA,这样harbor再次失效的可能性就小一些。

我选择的HA架构是如下图所示,如果机器富裕,我感觉不用这种架构,把数据独立共享出来可能会更好一些。

 我这张图是下载网上的,这里没有用负载均衡Haproxy,只是用了Keepalived做了一个虚拟地址,然后把域名绑定到虚拟地址上,一旦一台harbor的主机宕机,虚拟地址自动漂移到另一台harbor上,可确保harbor始终在线,这里只要做好两台harbor的数据同步就可以了。如果不是两台主机同时挂,应该不会出现上述故障现象了。如下是操作步骤。

我选择的两台主机ip分别为11.12.3.97和11.12.3.98使用keepalived虚拟出来的地址是11.12.3.99,要确保这些ip地址不会冲突,且网络可达。

在主机上安装docker、docker-compose、python3、pip和keepalived,然后参考CSDN我之前写的这篇文章配置keepalived,停机测试虚拟地址是否可以正常漂移。在安装docker组件的时候要注意版本的问题,不然安装harbor会报错。我这里用的版本是:

docker: Docker version 25.0.1
docker-compose: Docker Compose version v2.24.4
python3: Python 3.8.10
pip: pip 23.3.2

然后去github.com/goharhor/harbor/tags上下载你想安装的harbor版本(如何github不好打开,可以用一下加速器软件,我这里用了Watt Toolkit 做加速),我的服务器是用的ubuntu,我下载的是harbor-offline-installer-v2.4.2.tgz

然后将压缩包解压 tar -zxvf ./harbor-offline-installer-v2.4.2.tgz -C /opt/

再参考官网配置证书Harbor docs | Configure HTTPS Access to Harbor

这里注意一点,使用docker安装harbor,它会在根目录创建一个data的目录,harbor容器是挂载到/data这个目录下,将所有数据在这个目录下持久化保存,官方文档中

这里的目录就是在安装harbor的主机上自行创建的目录,这里要注意/data/cert 目录的用户和用户组必须是10000 ,因为harbor默认访问的用户就是10000,拷贝到该目录下的文件也要

chown -R 10000.10000 /data/cert

不然harbor运行时会报没有权限访问证书的错误。

关于harbor的证书和docker配置可以参考CSDN我之前写的这篇文章。

这里需要注意一点,在配置/etc/docker/daemon.json

添加 "registry-mirrors": ["https://core.harbor.shell.com:443"],
         "insecure-registries": ["11.12.3.97","11.12.3.98","11.12.3.99"]

把地址都配进去,并且在创建证书的时候v3.ext文件中的DNS信息也要将这些地址都加上,证书创建完后,可以通过openssl x509 -text -noout -in core.harbor.shell.com.crt命令去验证,看是否有

  X509v3 Extended Key Usage: TLS Web Server AuthenticationX509v3 Subject Alternative Name: DNS:core.harbor.shell.com, DNS:core.harbor.shell, DNS:11.12.3.98, DNS:11.12.3.97,DNS:11.12.3.99

 证书配置完毕后,到/opt/harbor目录配置安装文件

mv harbor.yml.tmpl harbor.yml

 

这里端口号根据需求也可以配置,harbor_admin_password:这里是配置harbor登录的初始密码,用户名默认是admin

然后运行install.sh 进行harbor安装,如果中间变更了配置或者已经安装过后想修改,可以运行

sudo docker-compose down -v
sudo ./prepare

安装完毕可以通过 sudo docker-compose ps 查看容器是否都已经起来

启动正常后,可以通过浏览器输入11.12.3.99 地址打开harbor操作界面,配置了证书后,浏览器会自动跳转到https,如何想通过域名core.harbor.shell.com访问,需要在客户端的hosts中添加域名和虚拟ip地址的绑定信息。

现在,访问11.12.3.97和11.12.3.98 是打开了两个不同主机上运行的harbor,我的11.12.3.99虚拟地址在3.97上,所以需要配置3.98的数据同步,可以参考Haproxy 实现 harbor 高可用_harbor 高可用部署 haproxy-CSDN博客

 上面的同步是将虚拟地址上运行的harbor通过事件触发,同步到另一台harbor上,但是我这里按照上面的配置行不通,因为我咋3.99也就是3.97这台机器上配置

(98连97是正常的,这里注意自己配置的证书验证远程证书的对勾不能打,否则连接失败。 )

查看日志可以发现,报如下错误

2024-02-04T09:26:10Z [ERROR] [/lib/http/error.go:54]: {"errors":[{"code":"UNKNOWN","message":"unknown: Get \"https://11.12.3.98/api/version\": x509: cannot validate certificate for 11.12.3.98 because it doesn't contain any IP SANs"}]} 

而在另外一台机器上做相同配置连接另一台主机就可以配置成功,要是把keepalived的优先级颠倒一下,将3.99漂移到3.98上,和之前配置3.97的情况一样,可以配置成功,但是3.97就会报之前3.98的错误。所以我这里做同步是用pull的方式

这里配置的是定时每天12点执行同步,由3.98向3.97拉去镜像同步。这样,一旦3.97挂了,3.99的地址就会漂移到3.98上,此时容器拉取操作就是在同3.98这台服务器上的harbor交互。

这个方案存在一个问题,就是一旦3.97恢复,如果3.98的镜像和3.97镜像不一致,需要手动再做一下同步,在复制管理里添加一条规则

当3.97恢复,3.99漂移到3.97上,可以在3.98上手动执行该策略,实现3.98到3.97的镜像同步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452495.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ0481. 树的重心之砍树Link Cut Centroids

题目 思路 分类讨论。 首先当树只有一个重心的时候,我们删掉最小的边再加上原边即可. 再看有两个重心的情况. 显然这棵树必定是类似这样的: 即删掉 A 后,以B 为根的子树是剩下的最大连通块,反之亦然. 那就可以得到一个结论: 删掉边 (A,B) 后,两棵树的大小相等. 那我们只…

ElementUI Form:Upload 上传

ElementUI安装与使用指南 Upload 上传 点击下载learnelementuispringboot项目源码 效果图 el-upload.vue(Upload上传)页面效果图 el-upload.vue代码 import Vue from vue import VueRouter from vue-router import HomeView from ../views/HomeV…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&#xff0…

幻兽帕鲁服务器怎么搭建?Palworld多人联机教程

玩转幻兽帕鲁服务器,阿里云推出新手0基础一键部署幻兽帕鲁服务器教程,傻瓜式一键部署,3分钟即可成功创建一台Palworld专属服务器,成本仅需26元,阿里云服务器网aliyunfuwuqi.com分享2024年新版基于阿里云搭建幻兽帕鲁服…

openGauss学习笔记-213 openGauss 性能调优-总体调优思路

文章目录 openGauss学习笔记-213 openGauss 性能调优-总体调优思路213.1 调优思路概述213.2 调优流程 openGauss学习笔记-213 openGauss 性能调优-总体调优思路 213.1 调优思路概述 openGauss的总体性能调优思路为性能瓶颈点分析、关键参数调整以及SQL调优。在调优过程中&…

[职场] 老教师对年轻教师的肺腑之言 #媒体#笔记

老教师对年轻教师的肺腑之言 对学生 不要拖堂!不要拖堂!不要拖堂!临下课十分钟,学生已经心不在焉,更别说下课后了!有什么内容等下节课再说,不连贯没关系,反正拖堂讲课他们更听不进去…

算法学习——华为机考题库3(HJ21 - HJ25)

算法学习——华为机考题库3(HJ21 - HJ30) HJ21 简单密码 描述 现在有一种密码变换算法。 九键手机键盘上的数字与字母的对应: 1–1, abc–2, def–3, ghi–4, jkl–5, mno–6, pqrs–7, tuv–8 wxyz–9, 0–0,把密码…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

Linux权限【超详细】

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 扩展知识&#xff1a…

基于WordPress开发微信小程序2:决定开发一个wordpress主题

上一篇:基于WordPress开发微信小程序1:搭建Wordpress-CSDN博客 很快发现一个问题,如果使用别人的主题模板,多多少少存在麻烦,所以一咬牙,决定自己开发一个主题模板,并且开源在gitee上&#xff…

C#,墨瑟 德·布鲁因数(Moser de Bruijn)的算法与源代码

1 墨瑟 德布鲁因数(Moser de-Bruijn) 墨瑟 德布鲁因数(Moser de-Bruijn)序列是将数字4(例如,1、4、16、64等)的不同幂相加得到的序列。 计算公式: 1) S(2 * n) 4 * S(n) 2) S(2 …

前端JavaScript篇之JavaScript 类数组对象的定义?如何将类数组对象转换为真正的数组

目录 JavaScript 类数组对象的定义?如何将类数组对象转换为真正的数组如何将类数组对象转换为真正的数组 JavaScript 类数组对象的定义?如何将类数组对象转换为真正的数组 类数组对象指的是具有类似数组结构(类似于数组的属性或方法&#xf…