本文作者:念宗

kubernetes系列之镜像高可用方案[harbor]推荐

念宗 6年前 ( 2019-05-11 ) 5194 抢沙发
摘要: docker官方的镜像仓库方案docker registry,权限控制和UI都没有,不太适合生产环境。这里介绍一个开源的解决方案-harbor,由VMware公司中国团队为企业用户...

docker官方的镜像仓库方案docker registry,权限控制和UI都没有,不太适合生产环境。这里介绍一个开源的解决方案-harbor,由VMware公司中国团队为企业用户设计的Registry server开源项目,支持功能有:

  1. UI支持,还有中文

  2. 日志审计

  3. 基于角色的权限控制

  4. 支持注册、多项目

  5. 镜像复制,可以解决高可用问题

目前没有发现很突出的缺点


harbor项目地址:https://github.com/goharbor/harbor

官方安装说明:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

生产环境需要重点考虑几个问题:

  1. 频繁地大文件传输,单台server肯定是无法胜任的,需要把镜像复制到多台节点,好在harbor已经支持镜像复制;

  2. 高可用的问题,一个镜像节点挂了不影响整个集群服务

  3. 访问权限的控制

  4. 根据需要是否开启https

  5. maybe else...



harbor的部署

环境准备

  • 系统:CentOS Linux release 7.4.1708

  • Docker 17.12.0-ce ,Docker Compose

  • python2

  • IP:192.168.10.95

  • 域名:harbor.pyops.net,此域名需要dns 解析到198.13.48.154 作为私有仓库地址


1. 先安装docker-compose

因为harbor项目是通过docker-compose来编排的,项目的启动、配置变更等都依赖它。

wget -O /usr/bin/docker-compose https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64
chmod +x /usr/bin/docker-compose
具体版本可以到这里下载:https://github.com/goharbor/harbor/releases

2. harbor安装

harbor包下载:
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz
tar zxf harbor-offline-installer-v1.7.1.tgz -C /usr/local/
cd /usr/local/harbor
修改配置文件harbor.cfg,默认只要修改主机名就可以执行脚本了,否则脚本执行出错。主机名可以是IP地址
注意当前的版本密码不能设置12345过于简单,否则会一直验证失败。
执行harbor安装脚本:
./install.sh

启动/停止harbor:

cd /usr/local/harbor    # 进入harbor目录
docker-compose start    # 启动harbor容器
docker-compose stop     # 停止harbor容器
docker-compose down     # 停止harbor容器并将容器删除
docker-compose up -d    # 第一次启动使用,如果容器已经存在了,直接使用start来启动

docker-compose.yml配置里的一些路径、名称可以根据实际情况进行修改。比如:

volumes定义的宿主机的目录等等

服务起来后,可以尝试在浏览器中打开harbor ui地址:192.168.10.95

先创建一个项目如proj1[后面镜像上传和下载演示会用到],项目地址格式为:192.168.10.95/proj1/

项目访问级别:[公开]其实就是匿名访问权限,无需账号密码直接可以pull;


以上为harbor服务器端的安装步骤,可以正常启动服务了。而其他需要上传、下载harbor镜像的节点,需要有下面几个工作:

1. 上传镜像前需要给镜像重新打上特殊标签[带harbor服务器地址与路径]

2. docker启动服务脚本添加harbor服务器地址/usr/lib/systemd/system/docker.service

3. 上传镜像docker push ...


3. 在启动脚本中添加镜像服务器地址

--insecure-registry $harbor_srv

/usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.10.95
systemctl daemon-reload
systemctl restart docker
# 重启后通过命令行登录验证:
docker login 192.168.10.95
[root@node1 ~]# docker login 192.168.10.95
Username: admin
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

登录过一次之后就会保存在这个文件中,之后再登录不用输入用户密码了

4. 打标签docker tag

[root@node2 ~]# docker tag sshd-base:latest 192.168.10.95/proj1/sshd-base:latest
[root@node2 ~]# docker push 192.168.10.95/proj1/sshd-base:latest
注意push的ip或者名称要与安装harbor时harbor.cfg里的hostname一致,否则无法上传.上传后检测如果正常可以把刚刚新建标签的镜像删除。

在另外一个节点上测试刚刚上传的镜像:

[root@node1 ~]# docker pull 192.168.10.95/proj1/sshd-base
[root@node1 ~]# docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
192.168.10.95/proj1/sshd-base   latest              4729bcdfafc6        2 weeks ago         479MB


进阶

habor仓库镜像复制

复制是针对项目的,所以一定要先手动创建项目名称再去设置复制规则,harbor不会将项目名称进行复制,它只复制项目下面的镜像。


1. 两台harbor上都添加一个project:[proj1]
2. 仓库管理添加目标[远程仓库],harbor01上添加目标如下:[验证远程证书]不要勾选

image.png

harbor02上添加目标如下

image.png


3. 复制管理,新建复制规则
规则里有这么几个信息,[名称] - 可以随意起,[源项目] - 就是要复制的项目
[目标] - 远程仓库地址(前面仓库管理添加的目标)
[触发模式] - 根据需要选择
harbor01上添加规则如下:
harbor01上添加规则
harbor02上添加规则如下:
image.png
4. harbor客户端[使用harbor仓库镜像的docker节点]docker服务添加镜像仓库地址

启动参数:--insecure-registry=$ip 

有用到几台harbor地址就添加几个
[root@node1 ~]# cat /usr/lib/systemd/system/docker.service|grep ExecStart
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry=192.168.10.95 --insecure-registry=192.168.10.97

systemctl daemon-reload
systemctl restart docker

配置完后在node1上进行测验,上传一个镜像到其中一台harbor上,然后到另外一台harbor上看看是否同步镜像。


habor高可用部署

两台镜像server设置镜像同步后,可以根据需要是否分离push/pull,或者两台server同时都支持push/pull。然后结合LVS/HAPROXY实现负载均衡,基本上一个高可用的镜像仓库方案就实现了。


限于篇幅,对于如何结合LVS/HAPROXY/keepalived实现整个集群的负载均衡及高可用,还有harbor开启https跟kubernetes证书认证相结合,可以Google,也可以私信我。

文章版权及转载声明:

作者:念宗本文地址:http://pyops.net/?id=54发布于 6年前 ( 2019-05-11 )
文章转载或复制请以超链接形式并注明出处运维之道

分享到: 网站分享代码

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

发表评论

快捷回复:

验证码

评论列表 (暂无评论,5194人围观)参与讨论

还没有评论,来说两句吧...