智能镜像分发工具dragonfly的安装和使用
一、概述最近在研究k8s,有时候会遇到镜像拉取缓慢的问题,尤其是必须在多个主机上复制镜像分发时效率较低,之后查阅资料发现这个dragonfly是通过p2p技术解决镜像传输和分发的问题的,在这里将我的学习过程做一个记录。Dragonfly一个开源的基于P2P镜像及文件分发系统,由阿里巴巴开源的云原生镜像分发系统 Dragonfly,面向以 Kubernetes 为核心的分布式应用编排系统,前瞻性地解
目录
一、概述
最近在研究k8s,有时候会遇到镜像拉取缓慢的问题,尤其是必须在多个主机上复制镜像分发时效率较低,之后查阅资料发现这个dragonfly是通过p2p技术解决镜像传输和分发的问题的,在这里将我的学习过程做一个记录。
Dragonfly一个开源的基于P2P镜像及文件分发系统,由阿里巴巴开源的云原生镜像分发系统 Dragonfly,面向以 Kubernetes 为核心的分布式应用编排系统,前瞻性地解决了云原生镜像分发的下列三大难题:
- 效率:借助 P2P 与 CDN 技术,缩减镜像传输时间,提升分发效率,加速业务应用交付;
- 流控:借助智能分析技术,动态平衡分发负载与业务运行态,实现流量动态控制,保障业务稳定运行;
- 安全:支持私有镜像仓库 HTTPS 协议,加密内容传输,确保信息安全
以上文字介绍来源于dragonfly官网,详细介绍可以查阅下面的链接
dragonfly官网地址:https://d7y.io/zh-cn/index.html
dragonfly的github源码地址:https://github.com/dragonflyoss/Dragonfly
二、前提条件
请确保您的机器上已经安装并启动 docker 容器引擎,docker容器引擎的安装可以参考这篇文章
使用阿里云镜像快速安装docker-ce
二、单机部署dragonfly
使用单机部署就是将dragonfly的客户端和服务端部署在同一台机器上面,我们可以快速的上手使用dragonfly。下面是部署步骤:
步骤 1:部署 Dragonfly 服务端(supernode)
启动supernode
docker run -d --name supernode --restart=always -p 8001:8001 -p 8002:8002 \
-v /data/dragonfly/supernode:/home/admin/supernode \
dragonflyoss/supernode:0.3.1 -Dsupernode.advertiseIp=127.0.0.1
注意:supernode.advertiseIp必须是客户端能够连通的ip,127.0.0.1仅在服务端和客户端同机情况下才可使用。
查看supernode运行情况
[root@iZwz9 ~]# docker ps |grep supernode
dc7be20113c9 dragonflyoss/supernode:0.3.0 "/bin/sh -c '/root/s…" 5 hours ago Up 5 hours 0.0.0.0:8001-8002->8001-8002/tcp supernode
查看启动日志
# 1、使用docker logs 查看容器日志
docker logs -f supernode
# 2、进入到宿主机的挂载目录查看日志
cd /data/dragonfly/supernode
查看目录
ls -al
drwxr-xr-x 2 root root 4096 Apr 2 2019 bin
drwxr-xr-x 2 root root 4096 Aug 7 01:52 logs
drwxr-xr-x 4 root root 4096 Aug 7 01:52 repo
步骤 2:部署 Dragonfly 客户端(dfclient)
启动Dragonfly 客户端
docker run -d --name dfclient -p 65001:65001 dragonflyoss/dfclient:0.3.1 --registry https://index.docker.io
提示:–registry参数指定镜像仓库地址,https://index.docker.io为官方镜像仓库,您也可以设置为其他仓库地址。
步骤 3:修改 Docker Daemon 配置
我们需要修改 Docker Daemon 配置,通过 mirror 方式来使用 Dragonfly 进行镜像的拉取。
如果大量都是私有registry的话,可以在/etc/docker/daemon.json 中配置dfdaemon和加速器,
如果是一半一半的话,可以一个–registry写私有的,一个–registry写公有的,
在配置文件 /etc/docker/daemon.json
中添加或更新如下配置项:
(下面数组中的第二个地址是我的阿里云镜像加速地址)
{
"registry-mirrors": ["http://127.0.0.1:65001", "https://kg6h91ac.mirror.aliyuncs.com"]
}
重启 Docker Daemon
。
systemctl restart docker
提示:如需进一步了解 /etc/docker/daemon.json,请参考 Docker 文档。
步骤 4:拉取镜像
通过以上步骤我们即完成了 Dragonfly 服务端与客户端的部署,并且设置了 Docker Daemon 通过 Dragonfly 来拉取官方镜像。
您可以如平时一样来拉取镜像,例如:
docker pull nginx:latest
步骤 5:验证
您可以通过执行以下命令,检验 nginx 镜像是否通过 Dragonfly 来传输完成。
docker exec dfclient grep 'downloading piece' /root/.small-dragonfly/logs/dfclient.log
如果以上命令有如下输出日志,则说明镜像下载通过 Dragonfly 来完成的
2020-08-07 07:02:59.377 INFO sign:31-1596783778.902 : downloading piece:{"taskID":"e9d9970fcc14e7fd9af90c58721ca6ea6a70c6d1564007ed959a844771751f50","superNode":"172.18.10.55","dstCid":"","range":"","result":502,"status":700,"pieceSize":0,"pieceNum":0}
三、多机部署
多机部署只需要在dragonfly客户端的机器上面设置supernode节点的地址即可,也就是需要添加一个配置文件dfget.yml
到/etc/dragonfly
目录下面。使用如下命令:
mdkir /etc/dragonfly
cat <<EOD > /etc/dragonfly/dfget.yml
nodes:
- dfsupernode(这里填写supernode的ip地址,需要客户端可以访问该ip地址)
EOD
验证镜像P2P分发
如果需要查看镜像是否通过其他 peer 节点来完成传输,可以执行以下命令:
docker exec dfclient grep 'downloading piece' /root/.small-dragonfly/logs/dfclient.log | grep -v cdnnode
如果以上命令没有输出结果,则说明镜像没有通过其他peer节点完成传输,否则说明通过其他peer节点完成传输。
更多推荐
所有评论(0)