关于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.mzph.cn/news/671441.shtml

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

相关文章

@ 代码随想录算法训练营第6周(C语言)|Day39(动态规划)

代码随想录算法训练营第6周(C语言)|Day39(动态规划) Day39、动态规划(包含题目 ● 62.不同路径 ● 63. 不同路径 II ) 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点…

opencv案例实战:条码区域分割

前言 识别二维码是一个日常生活中常见的应用,而识别之前,需要先分割出条形码的区域来获取条形码。我们可以使用OpenCV便捷的获取条码的区域。 逐步分析 为了了解数据处理的过程,我们逐步分析并显示处理过程 查看图像 在读入时,传入参数cv2.IMREAD_GRAYSCALE可以直接按…

2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年陕西省安全员C证证考试题库及陕西省安全员C证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大…

【DC-9靶场渗透】

文章目录 前言 一、确定靶机地址 二、信息收集 三、寻找漏洞 四、进一步漏洞挖掘 五、关键文件 六、ssh爆破 七、提权 总结 前言 马上过年了,年前再做一下DC靶场最后一个靶机。 一、确定靶机地址 1、可使用arp-scan命令 靶机地址为:172.16.10…

C语言---------对操作符的进一步认识

操作符中有⼀些操作符和⼆进制有关系,我们先学习了⼀下⼆进制的和进制转换的知识。 1.原码、反码和补码。 有符号整数的三种表⽰⽅法均有符号位和数值位两部分, 2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。 符号…

GDB调试命令大全

GDB调试命令大全 启动运行设置/查看断点(breakpoint)设置/查看观察点(watchpoint)设置/查看捕捉点(catchpoint)维护停止点维护条件停止点停止点设置运行命令断点菜单恢复程序运行和单步调试信号产生信号量线程 转载自: https://www.cnblogs.com/gqtcgq/p/7511974.h…

树的三种遍历方式-算法

题目 树的三种遍历方式&#xff0c;前序&#xff0c;中序&#xff0c;后续 解题 通过递归 public static List<Integer> preorderTraversal(TreeNode treeNode) {List<Integer> result new ArrayList<>();if (treeNode null) {return result;}List<…

python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…

【Android-Compose】手势检测实现按下、单击、双击、长按事件,以及避免频繁单击事件的简单方法

目录&#xff1a; 1 不需要双击事件 规避频繁单击事件2 需要双击事件&#xff08;常规写法&#xff09;3 后记&#xff1a;不建议使用上面的代码自定义按钮 1 不需要双击事件 规避频繁单击事件 var firstClickTime by remember { mutableStateOf(System.currentTimeMillis()…

vue实现查询搜索框下拉字典

字典表 前端页面显示 依据这个字典表实现动态查询 初始化数组 首先先在全局变量里定义一个数据存放查询出来的数据 data() {return {dicts: []};},生命周期 查询的时候是声明周期开始的时候&#xff0c;原本增删改查页面在生命周期开始的时候就查询了页面的数据获得了列表值…

ElasticSearch-SpringBoot整合ElasticSearch

六、SpringBoot整合ElasticSearch 1、浏览官方文档 1、查找跟ES客户端相关的文档 使用Java REST Client 选择Java Hight Level REST Client 2、创建项目的准备 1.找到原生的依赖 2.找到对象 3.分析这个类里面的方法 3、正式创建项目 1.创建工程 2.导入依赖 注意依赖版本…

Python 函数式编程进阶:map、filter、reduce

Python 函数式编程进阶&#xff1a;map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中&#xff0c;map、…

【QT】opcuaServer 的构建

【QT】opcuaServer 的构建 前言opcuaServer实现测试 前言 在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现 中&#xff0c;我们已经介绍了如何在QT 中创建opucaClient 。在本期的博文中&#xff0c;我们基于之前的部署环境&#xff0c;介绍一下如何构建opcuaS…

springboot与Elasticsearch版本兼容对比

首先 大家在下载 Elasticsearch 时 最好先弄清楚版本 因为 如果 Spring Boot 版本 不兼容 Elasticsearch 那就是到头一场空了 Elasticsearch 版本 6.x 可以兼容 Spring Boot 2.x Elasticsearch 版本 7.x 可以兼容 Spring Boot 2.x 3.x 4x Elasticsearch 版本 7.x 以及 8.x 可以…

Flask 入门4:Flask 模板

1. 前言 Flask 拥有丰富的扩展方法&#xff0c;且都有统一的特点&#xff1a;简单和即学即用。当我们要实现某个功能之前&#xff0c;可以提前去搜一搜这个功能包是否已经存在&#xff0c;这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢&#xff0c;这里推荐两个方…

MySQL重要进程

MySQL的主要进程包括以下几种&#xff1a; 1.mysqld&#xff08;也称mysqld_safe&#xff09;&#xff1a;这是MySQL服务器的守护进程。它负责接收客户端连接、处理查询并管理数据库文件等操作。可通过命令行或配置文件来指定其运行参数。 2.mysqladmin&#xff1a;用于管理M…

模拟队列(数组实现)

题目 实现一个队列&#xff0c;队列初始为空&#xff0c;支持四种操作&#xff1a; push x – 向队尾插入一个数x&#xff1b;pop – 从队头弹出一个数&#xff1b;empty – 判断队列是否为空&#xff1b;query – 查询队头元素。 现在要对队列进行M个操作&#xff0c;其中的…

5G智能卷烟工厂数字孪生可视化平台,推进烟草行业数字化转型

5G智能卷烟工厂数字孪生可视化平台&#xff0c;推进烟草行业数字化转型。随着5G技术的不断发展&#xff0c;智能卷烟工厂数字孪生可视化平台成为了推进烟草行业数字化转型的重要手段。该平台将5G技术与数字孪生技术相结合&#xff0c;实现了对卷烟生产全过程的实时监控、数据分…

JAVA面试题之四谈谈你对RPC框架的理解

面试题之四 谈谈你对RPC框架的理解 难度指数&#xff1a;4星 考察频率&#xff1a;55-60% 开发年限&#xff1a;3年以上 一.RPC是什么&#xff1f; 远程过程调用&#xff1a;Remote Procedure call.可以跨进程&#xff0c;跨越同一个计算机的多个进程、多个JVM或多台计算…