关于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,一经查实,立即删除!

相关文章

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

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

【DC-9靶场渗透】

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

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

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

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

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

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

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

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 函数式编程进阶:map、filter、reduce 介绍map 函数作用和语法使用 map 函数Lambda 函数的配合应用 filter 函数作用和语法使用 filter 函数Lambda 函数的结合运用 reduce 函数作用和语法使用 reduce 函数典型应用场景 介绍 在函数式编程中,map、…

【QT】opcuaServer 的构建

【QT】opcuaServer 的构建 前言opcuaServer实现测试 前言 在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现 中,我们已经介绍了如何在QT 中创建opucaClient 。在本期的博文中,我们基于之前的部署环境,介绍一下如何构建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 拥有丰富的扩展方法,且都有统一的特点:简单和即学即用。当我们要实现某个功能之前,可以提前去搜一搜这个功能包是否已经存在,这样也能帮助我剩下很多时间。那么要去哪里找到这些扩展包呢,这里推荐两个方…

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

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

ROE是什么?如何用ROE来分析企业?

ROE是什么? ROE,即净资产收益率(Return on Equity),又称作股东权益报酬率、权益利润率,是净利润与平均股东权益的百分比,也称为净值报酬率、权益报酬率、权益利润率、净资产利润率,…

网络选择流程分析(首选网络类型切换流程)

首先是界面,我在此平台的界面如下: 对应的入口源码位置在Settings的UniEnabledNetworkModePreferenceController中,当然其他平台可能在PreferredNetworkModePreferenceController中,流程上都是大同小异 然后点击切换按钮会调用到UniEnabledNetworkModePreferenceControlle…

用的到的linux-删除文件-Day3

前言: 上一节,我们讲到了怎么去移动文件,其中使用到两大类的脚本命令即cp和mv。各两种命令都可以完成移动,但是cp是复制粘贴的方式,可以选择原封不动的复制粘贴过来,即不修改文件及文件夹的创建时间等&…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(五)NodeJS入门——http模块

044_http模块_创建HTTP服务端 hello,大家好,那这个小节我们来使用 nodejs 创建一个 http 的服务,有了这个 http 服务之后,我们就可以处理浏览器所发送过来的请求,并且还可以给这个浏览器返回响应。 顺便说一下&#x…

【Linux】线程Pthread的概念 | NPTL线程库函数

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;Linux系列专栏&#xff1a;Linux基础 &#x1f525; 给大家…

华为、清华等开源超高清、精准文生图模型,0.5秒极速生成!

华为诺亚方舟实验室、清华大学信息科技学院、大连理工、香港大学和Hugging Face的研究人员&#xff0c;联合开源了超高清文生图模型——PIXART-δ。 研究人员将潜在一致性模型&#xff08;LCM&#xff09;和创新控制架构ControlNet-Transformer集成在PIXART-δ中&#xff0c;在…

【LeetCode: 73. 矩阵置零 + 矩阵】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用Python语言生成区块链地址

# 单次运行 import binascii import sha3 from ecdsa import SigningKey, SECP256k1priv SigningKey.generate(curveSECP256k1) # 生成私钥 pub priv.get_verifying_key() # 生成公钥keccak sha3.keccak_256() keccak.update(pub.to_string()) # keccak_256哈希运算 addr…

vue配置开发环境和生产环境

在与src文件夹同级的地方增加两个文件 .env.development .env.production配置development和production两个文件 在.env.development中写&#xff1a; NODE_ENV development VUE_APP_NUM dev //VUE_APP_自己取名字在.env.production中写&#xff1a; NODE_ENV production…