harbo

举报
yd_224301282 发表于 2023/08/14 14:34:06 2023/08/14
【摘要】 harbo harbo简介Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部...

harbo

harbo简介

Harbor 是一个用于存储和分发Docker镜像的企业级Registry服务器。

作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

  • 基于角色的访问控制:用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制:镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面:用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持:Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
  • 部署简单:提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备。

harbo架构

1、主从同步架构

Harbor 官方默认提供主从复制的方案来解决镜像同步问题,通过复制的方式,可以实时将测试环境harbor仓库的镜像同步到生产环境harbor,类似于如下流程:

img

在实际生产运维的中,往往需要把镜像发布到几十或上百台集群节点上。这时,单个Registry已经无法满足大量节点的下载需求,因此要配置多个Registry实例做负载均衡。手工维护多个Registry实例上的镜像,将是十分繁琐的事情。Harbor可以支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题:

img

只要往一台Harbor上发布,镜像就会像“仙女散花”般地同步到多个Registry中,高效可靠。

如果是地域分布较广的集群,还可以采用层次型发布方式,比如从集团总部机房同步到分公司1机房,再从分公司1机房同步到分公司2机房:

img

然而单靠主从同步,仍然解决不了harbor主节点的单点问题。继续看下面Harbor架构。

2、双主复制说明

双主复制其实就是复用主从同步实现两个harbor节点之间的双向同步,来保证数据的一致性,然后在两台harbor前端顶一个负载均衡器将进来的请求分流到不同的实例中去,只要有一个实例中有了新的镜像,就是自动的同步复制到另外的的实例中去,这样实现了负载均衡,也避免了单点故障,在一定程度上实现了Harbor的高可用性:

img

这个方案有一个问题就是有可能两个Harbor实例中的数据不一致。假设如果一个实例A挂掉了,这个时候有新的镜像进来,那么新的镜像就会在另外一个实例B中,后面即使恢复了挂掉的A实例,Harbor实例B也不会自动去同步镜像,这样只能手动的先关掉Harbor实例B的复制策略,然后再开启复制策略,才能让实例B数据同步,让两个实例的数据一致。

另外,这里还需要多吐槽一句:在实际生产使用中,主从复制十分的不靠谱!所以这里推荐使用下面要说的这种架构方案。

3、多实例共享后端存储

共享后端存储算是一种比较标准的方案,就是多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置LB进来的请求,可以分流到不同的实例中去处理,这样就实现了负载均衡,也避免了单点故障。

img

如果最终生产环境集群中服务器较多,依赖做完LB的Harbor也无法完全达到需求时,可以使用如下架构,部署下级Harbor节点从主节点同步镜像,然后再分发给生产服务器。

img

这个方案在实际生产环境中部署需要考虑三个问题:

  • 1、共享存储的选取,Harbor的后端存储目前支持AWS S3、Openstack Swift, Ceph等,在下节文章在讲解如何部署这种高可用架构,后端存储使用阿里云极速性NAS。
  • 2、Session在不同的实例上共享,这个现在其实已经不是问题了,在最新的harbor中,默认session会存放在redis中,只需要将redis独立出来即可。可以通过redis sentinel或者redis cluster等方式来保证redis的可用性。不过单台Redis也可以,只是Redis没有高可用。
  • 3、Harbor多实例数据库问题,这个也只需要将harbor中的数据库拆出来独立部署即可。让多实例共用一个外部数据库,数据库的高可用也可以通过数据库的高可用方案保证。

参考:

https://www.51cto.com/article/661607.html

harbo共享存储架构实现

  1. 初始化linux配置
  • // 关闭防火墙和selinux
    systemctl stop firewalld && systemctl disable firewalld
    sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
    setenforce 0
    
    // 设置主机名,hosts解析
    hostnamectl set-hostname harbor-master.example.com
    echo "10.20.3.190 harbor-master.example.com" >> /etc/hosts
    echo "10.20.3.191 harbor-slave.example.com" >> /etc/hosts
    echo "10.20.3.192 db.example.com" >> /etc/hosts
    
  1. NFS部署
  • 部署nfs服务端

    •  yum -y install nfs-utils rpcbind
      
  • 编辑配置文件

    • vim /etc/exports
      /data *(rw,sync,no_root_squash,no_subtree_check,)		// NFS共享目录 NFS客户端地址 读写,参数
      
  • 启动rpcbind,nfs服务

    • systemctl restart rpcbind && systemctl enable rpcbind
      
      systemctl restart nfs && systemctl enable nfs
      
  • 部署nfs客户端,并启动服务

    • yum -y install nfs-utils
      
      systemctl restart rpcbind && systemctl enable rpcbind
      
  • 查看可挂载点

    • showmount -e 10.20.3.192
      
  • 客户端挂载远程nfs目录到本地

    • mount -t nfs 10.20.3.192:/data /harbor_data
      
  • 写入fstab文件,永久挂载

    • vim /etc/fstab
      
      10.20.3.192:/data /harbor_data nfs defaults 0 0
      
  1. 部署redis,postgres
  • redis文件,直接启动即可。

    • version: '3'
      
      services:
        redis:
          image: goharbor/redis-photon:v2.1.2
          container_name: redis
          restart: always
          cap_drop:
            - ALL
          cap_add:
            - CHOWN
            - SETGID
            - SETUID
          volumes:
            - /data/redis:/var/lib/redis 
          network_mode: host
      
  • postgres镜像采用9.6.20,指定数据库密码,docker启动即可。

    • docker run -d --name postgres -v /data/pg_data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:9.6.20
      
  • 进入postgres容器,创建yml文件里定义的数据库

    • postgres# CREATE DATABASE registry;
      
  1. 部署harbor
  • harbor机器上提前安装好docker,docker-compose,这里自行下载

    • docker官网:     https://docs.docker.com/engine/install/centos/
      
      compose官网: https://docs.docker.com/compose/install/
      
      harbor官网:      https://github.com/goharbor/harbor/releases
      
      这里harbor版本选择v2.1.2,解压到/usr/local下
      wget https://github.com/goharbor/harbor/releases/download/v2.1.2/harbor-offline-installer-v2.1.2.tgz
      tar -xf harbor-offline-installer-v2.1.2.tgz -C /usr/local/
      
  • 修改配置文件harbor.yml,数据卷改为nfs共享路径。同时修改数据库相关信息,确保harbor启动可以正常连接。

    • hostname: 10.20.3.190                                 #两台harbor配置主机名或IP,这里选用ip
      http:
        port: 8999               #harbor访问端口
      harbor_admin_password: Harbor12345       #harbor访问登录密码
      data_volume: /harbor_data
      clair:
        updaters_interval: 12
      trivy:
        ignore_unfixed: false
        skip_update: false
        insecure: false
      jobservice:
        max_job_workers: 10
      notification:
        webhook_job_max_retry: 10
      chart:
        absolute_url: disabled
      log:
        level: info
        local:
          rotate_count: 50
          rotate_size: 200M
          location: /var/log/harbor
      _version: 2.0.0
      external_database:
        harbor:
          host: 10.20.3.192
          port: 5432
          db_name: registry
          username: postgres
          password: postgres
          ssl_mode: disable
          max_idle_conns: 2
          max_open_conns: 0
      
        clair:
          host: 10.20.3.192
          port: 5432
          db_name: clair
          username: postgres
          password: postgres
          ssl_mode: disable
        notary_signer:
          host: 10.20.3.192
          port: 5432
          db_name: notarysigner
          username: postgres
          password: postgres
          ssl_mode: disable
        notary_server:
          host: 10.20.3.192
          port: 5432
          db_name: notaryserver
          username: postgres
          password: postgres
          ssl_mode: disable
      external_redis:
        host: 10.20.3.192:6379
      proxy:
        http_proxy:
        https_proxy:
        no_proxy:
        components:
          - core
          - jobservice
          - clair
          - trivy
      
  • 重新生成配置文件,并启动harbor

    • # ./prepare
      
      # ./install.sh
      
  • 登录190harbor web,新建项目test,看191harbor上是否存在。同样在190服务器push镜像到harbor,看191harbor上是否显示。

参考:

https://blog.51cto.com/u_11195589/3881735

harbo角色管理

https://blog.csdn.net/fly910905/article/details/125959400

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。