harbor1.4.0高可用部署

作者:刘宽,原文链接:https://blog.csdn.net/liukuan73/article/details/79634524

1.Harbor简介

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

镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。

docker的registry是用本地存储或者s3都是可以的,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。

1.1 Harbor架构

这里写图片描述

主要组件包括:

  • Proxy:对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务;
  • UI(Core Service):对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能:
    • UI:一个web管理页面ui;
    • API:Harbor暴露的API服务;
    • Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现;
    • Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull命令issuing一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token。
  • Registry:对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。
  • Admin Service:对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置;
  • Job Sevice:对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log;
  • Log Collector:对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起;
  • Volnerability Scanning:对应启动组件clair。负责镜像扫描
  • Notary:对应启动组件notary。负责镜像认证
  • DB:对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据。

备注:

2.Harbor HA部署(双docker-compose方式)

harbor官方从1.4.0版本开始支持ha部署模式,详情可见:https://github.com/vmware/harbor/blob/master/docs/high_availability_installation_guide.md

2.1 HA架构

对harbor中的组件根据有/无状态进行划分
无状态组件:

  • Proxy
  • UI
  • Registry
  • Adminserver
  • Jobservice
  • Logs
  • Clair
  • Notary(但是harbor目前不支持ha场景的Notary)

有状态组件:

  • Harbor database(MariaDB)
  • Clair database(PostgresSQL)
  • Notary database(MariaDB)
  • Redis

ha基本思路就是:

  • 部署两套harbor跑Adminserver、UI、Proxy、Log Collector、Registry、Jobservice、Clair这7个无状态组件;前端用keepalived暴露vip。
  • 数据库用一套,数据库可以通过高可用集群方式保障数据高可用;
  • 多个registry的后端使用同一块共享存储(如NFS);
  • 多个UI使用同一个redis共享session;
  • notary在目前还不支持高可用部署;

这里写图片描述

2.2 部署

2.2.1 启动有状态服务

说明:
官方文档为方便验证,有状态组件仅仅简单地用容器启动单实例,如下:

docker run --name redis-server -p 6379:6379 -d redis
docker run -d --restart=always -e MYSQL_ROOT_PASSWORD=123456 -v /dcos/harbor-ha/mariadb:/var/lib/mysql:z -p 3306:3306 --name mariadb vmware/mariadb-photon:10.2.10
docker run -d -e POSTGRES_PASSWORD="123456" -p 5432:5432 postgres:9.6

而我是通过helm来部署redis-ha、mariadb、postgresql应用,helm的使用方法请见:http://blog.csdn.net/liukuan73/article/details/79319900

<1>创建持久化存储
pvc所使用的storageclass:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: two-replica-glusterfs-sc
provisioner: kubernetes.io/glusterfs
reclaimPolicy: Retain
parameters:
  gidMax: "50000"
  gidMin: "40000"
  resturl: http://10.142.21.23:30088
  volumetype: replicate:2
  restauthenabled: "true"
  restuser: "admin"
  restuserkey: "123456"
#  secretNamespace: "default"
#  secretName: "heketi-secret"

为mariadb创建pvc:

vim mariadb.pvc-sc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mariadb-pvc
spec:
  storageClassName: two-replica-glusterfs-sc
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi

kubectl create -f mariadb.pvc-sc.yaml

为postgresql创建pvc:

vim postgresql.pvc-sc.yaml

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgresql-pvc
s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值