暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Harbor镜像仓库高可用配置与使用

2118


01

Harbor是什么


它是构建企业级私有docker镜像的仓库的开源解决方案,它对原生Docker Registry实现了更高级封装(由国内Vmware团队开发),它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计、镜像同步复制、漏洞扫描等。


02

功能特性


RBAC访问控制,用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限;

镜像复制功能,镜像可以在多个Registry实例中复制,尤其适合于负载均衡、高可用、混合云和多云的场景;

图形化用户界面,用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间;

AD/LDAP支持,Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理;

审计管理,所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

国际化,已拥有英文、中文、德文、日文和俄文的本地化版本,更多的语言将会添加进来;

RESTful API,RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易;

部署简单,提供在线和离线两种安装工具。(来源于网络)


03

Harbor安装方式


使用k8s插件(Add-on)的形式,或者使用helm,需要创建一些存储卷或者使用存储类(ceph、nfs)来完成,依赖于kubernetes,在集群内部,更为灵活;


使用docker-compose的形式,只需要docker 运行时引擎,使用本地的磁盘,更为可控,不受kubernetes集群影响;


注意:生产环境中,在满足线上要求的情况下,能少用一些组件,能少一些耦合就越好,事情并非绝对,这里给出使用docker-compose来管理的方式,这种方式也是官方提供的一种;


04

Harbor资源规划


中小型企业私有镜像仓库是一般是为了在docker build成功后,上传镜像仓库,k8s部署时下载使用,这里就有一个问题,相同业务镜像版本数要求,通常情况下不会太多,可以根据公司实际情况进行磁盘空间规划。


服务器规划

主机名IP磁盘要求(根据需求规划)操作系统版本
harbor01192.168.16.113RAID5 (生产是10T左右)4.4.207-1.el7.elrepo.x86_64
harbor02192.168.16.114RAID5 (生产是10T左右)4.4.207-1.el7.elrepo.x86_64
nginx192.168.16.112无要求4.4.207-1.el7.elrepo.x86_64

软件版本

软件名称版本下载链接
harbor-offline-installer-v1.9.4.tgzv1.9.4https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz
docker-compose1.25.4curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


05

Harbor架构图



06

Harbor组件说明


harbor-log:运行rsyslog进程的容器,为了监控Harbor运行状况,负责收集其他组件的log,供日后分析;

harbor-portal:提供图形化界面,使用图形化界面帮助用户管理registry上的镜像(image),并对用户进行授权,信息配置等;

redis:用于存储session;

harbor-db:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据;

registryctl :处理docker push/pull 命令行工具;

registry:官方的Docker registry ,负责储存Docker镜像;

harbor-core: 核心组件包;

nginx:使用Nginx做反向代理;

harbor-jobservice:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中;


07

Harbor安装


两台主组分别进行如下安装即可;


1. 确保安装docker 运行时环境并运行

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo &&yum makecache && yum -y install docker-ce
systemctl start docker.service


2. 下载docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o usr/local/bin/docker-compose


3. 下载离线安装包

https://github.com/goharbor/harbor/releases/download/v1.9.4/harbor-offline-installer-v1.9.4.tgz


4. 解压并安装

tar -zxf  harbor-offline-installer-v1.9.4.tgz && cd harbor
修改配置文件harbor.yml
只需要简单修改下主机名即可,修改为本机IP hostname: x.x.x.x

运行sh install.sh


5. 安装成功

。。。
[Step 3]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-portal ... done
Creating registry ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done

✔ ----Harbor has been installed and started successfully.----

Now you should be able to visit the admin portal at http://100.73.16.113.
For more details, please visit https://github.com/goharbor/harbor .


6. 配置说明

配置选项选项说明
hostname: 目标主机的主机名或IP,用于访问Portal和注册表服务,
它应该是目标计算机的IP地址或完全限定的域名(FQDN)
http:
  port: 80http的端口号
harbor_admin_password: Harbor12345管理员的初始密码,默认用户名/密码为admin/Harbor12345,可以在Portal中修改
database:
  password: root123用于db_auth的数据库的root密码
  max_idle_conns: 50连接空闲数
  max_open_conns: 100最大连接数
data_volume: /data存储镜像数据的位置
clair:
  updaters_interval: 12设置Clair更新的间隔,该值为0则不允许更新,默认为12小时
jobservice:
  max_job_workers: 10镜像复制作业工作者数目,增加此数量可以在系统中执行更多并发复制作业,但是,由于每个工作者都消耗一定量的网络/CPU/ IO资源,请根据主机的硬件资源仔细选择该属性的值
notification:
  webhook_job_max_retry: 10设置webhook最大重试次数
chart:
  absolute_url: disabled如果设置为启用chart将使用绝对网址,否则将其设置为禁用,图表将使用相对网址
log:
  level: info日志级别
  local:
    rotate_count: 50日志文件在被删除之前被轮换为log_rotate_count次数。如果count为0,则删除
    rotate_size: 200M 仅当日志文件大于log_rotate_size字节时才会轮换日志文件
    location: /var/log/harbor日志路径
_version: 1.9.0版本
proxy:
  http_proxy:配置http代理,例如http://my.proxy.com:3128
  https_proxy:配置https代理,例如http://my.proxy.com:3128
  no_proxy:不设置配置代理,例如127.0.0.1,localhost,core,registry
  components:组件列表
    - core
    - jobservice
    - clair

以上配置为默认配置,还有一些额外配置可供选择;并且数据库和redis均可以由DBA同学额外提供,不使用默认容器形式,这里未提供,在离线安装时,会自动安装,并设置密码相关配置;


08

镜像复制配置


1. 两台机器均类似配置,登录192.168.16.113,默认用户名和密码admin/Harbor12345,请自行修改即可。



2. 删除libary项目,新建项目kubernetes,并公开(网络可达,即可下载,docker pull,不需要验证,这里可以设置磁盘配额等信息;


3.  仓库管理-->新建目标

目标是指,把本地仓库镜像复制到其它镜像仓库的配置,这里配置的远程仓库地址;


4. 同步管理-->新建规则

目的Registry即第3步中创建的远程目标,触发模式,可以选择事件驱动

、手动、定时均可以,根据需求自定义;


5. 类似配置另外一台,把目标指向对端的另一台即可;


09

镜像上传测试


给镜像打tag,上传镜像仓库,无论上传哪一个镜像仓库,另外的镜像仓库会很快的复制过来;


10

配置Nginx


注意nginx安装时要支持4层代理,配置如下

# 核心代码
upstream backend {
server 192.168.16.113:80;
server 192.168.16.114:80 backup;
}
server {
listen *:80;
proxy_connect_timeout 1s;
proxy_pass backend;
}


nginx服务器的地址是192.168.16.112,这样我们就可以使用域名的形式;


11

总结


Harbor还有很多功能(ladp认证、安全扫描、权限划分等)没有进行测试,这里只是讲到了镜像复制,提供企业级Harbor镜像仓库高可用方案。





分享使我快乐


往期分享


通俗易懂理解Kubernetes核心组件及原理

kubernetes v1.17.x 二进制安装文档 



文章转载自Linux点滴运维实践,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论