Dragonfly 在 Kubernetes 多集群环境下分发文件和镜像

智能镜像分发工具dragonfly的安装和使用 一、概述 最近在研究k8s,有时候会遇到镜像拉取缓慢的问题,尤其是必须在多个主机上复制镜像分发时效率较低,之后查阅资料发现这个dragonfly是通过p2p技术解决镜像传输和分发的问题的,在这里将我的学习过程做一个记录。 Dragonfly一个开源的基于P2P镜像及文件分发系统,由阿里巴巴开源的云原生镜像分发系统 Dragonfly,面向以 Kubernetes 为核心的分布式应用编排系统,前瞻性地解决了云原生镜像分发的下列三大难题: 效率:借助 P2P 与 CDN 技术,缩减镜像传输时间,提升分发效率, 阅读详情

94e0d01ba0fb7b516db10c57ea0c535e.gif

文|戚文博(花名:百蓦)

Dragonfly Maintainer

蚂蚁集团软件工程师

24a2a759edc5e634eefe4135f7c30e5d.jpeg

主要负责「基于 P2P 的文件分发以及镜像加速系统」。

本文 2036 字 阅读 8 分钟

Dragonfly 提供高效、稳定、安全的基于 P2P 技术的文件分发和镜像加速系统,并且是云原生架构中镜像加速领域的标准解决方案以及最佳实践。现在为云原生计算机基金会(CNCF)托管作为孵化级(Incubating)项目。

文章主要阐述如何在多集群环境下部署 Dragonfly。一个 Dragonfly 集群管理一个单独网络环境的集群,如果有两个集群是相互隔离的网络环境,就需要有两个 Dragonfly 集群管理各自的集群。

推荐用户在多 Kubernetes 集群场景下,使用一个 Dragonfly 集群管理一个 Kubernetes 集群,二者 1:1 关系。并且使用一个中心化的 Manager 服务去管理多个 Dragonfly 集群。因为对于 Dragonfly,一个 Dragonfly 集群中的所有 Peers 只能在当前 Dragonfly 集群内 P2P 传输数据,所以一定要保证一个 Dragonfly 集群中的所有 Peers 网络是互通的。那么如果一个 Dragonfly 集群管理一个 Kubernetes 集群,那么代表集群内的 Peers 只在 Kubernetes 集群维度进行 P2P 传输数据。

b583f7e322f24c0a593951a5b4ba0080.png

准备 Kubernetes 集群

如果没有可用的 Kubernetes 集群进行测试,推荐使用 Kind[1]。

创建 Kind 多节点集群配置文件 kind-config.yaml,配置如下:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
    extraPortMappings:
      - containerPort: 30950
        hostPort: 8080
    labels:
      cluster: a
  - role: worker
    labels:
      cluster: a
  - role: worker
    labels:
      cluster: b
  - role: worker
    labels:
      cluster: b

使用配置文件创建 Kind 集群:

kind create cluster --config kind-config.yaml

切换 Kubectl 的 context 到 Kind 集群:

kubectl config use-context kind-kind

Kind 加载 Dragonfly 镜像

下载 Dragonfly latest 镜像:

docker pull dragonflyoss/scheduler:latest
docker pull dragonflyoss/manager:latest
docker pull dragonflyoss/dfdaemon:latest

Kind 集群加载 Dragonfly latest 镜像:

kind load docker-image dragonflyoss/scheduler:latest
kind load docker-image dragonflyoss/manager:latest
kind load docker-image dragonflyoss/dfdaemon:latest

创建 Dragonfly 集群 A

创建 Dragonfly 集群 A,应该使用 Helm 在当前集群内安装中心化的 Manager、Scheduler、Seed Peer、Peer。

基于 Helm Charts 创建

Dragonfly 集群 A

创建 Helm Charts 的 Dragonfly 集群 A 的配置文件 charts-config-cluster-a.yaml,配置如下:

containerRuntime:
  containerd:
    enable: true
    injectConfigPath: true
    registries:
      - 'https://ghcr.io'


scheduler:
  image: dragonflyoss/scheduler
  tag: latest
  nodeSelector:
    cluster: a
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066


seedPeer:
  image: dragonflyoss/dfdaemon
  tag: latest
  nodeSelector:
    cluster: a
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066


dfdaemon:
  image: dragonflyoss/dfdaemon
  tag: latest
  nodeSelector:
    cluster: a
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066


manager:
  image: dragonflyoss/manager
  tag: latest
  nodeSelector:
    cluster: a
  replicas: 1
  metrics:
    enable: true
  config:
    verbose: true
    pprofPort: 18066


jaeger:
  enable: true

使用配置文件部署 Helm Charts 的 Dragonfly 集群 A:

$ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/
$ helm install --wait --create-namespace --namespace cluster-a dragonfly dragonfly/dragonfly -f charts-config-cluster-a.yaml
NAME: dragonfly
LAST DEPLOYED: Mon Aug  7 22:07:02 2023
NAMESPACE: cluster-a
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the scheduler address by running these commands:
  export SCHEDULER_POD_NAME=$(kubectl get pods --namespace cluster-a -l "app=dragonfly,release=dragonfly,component=scheduler" -o jsonpath={.items[0].metadata.name})
  export SCHEDULER_CONTAINER_PORT=$(kubectl get pod --namespace cluster-a $SCHEDULER_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  kubectl --namespace cluster-a port-forward $SCHEDULER_POD_NAME 8002:$SCHEDULER_CONTAINER_PORT
  echo "Visit http://127.0.0.1:8002 to use your scheduler"


2. Get the dfdaemon port by running these commands:
  export DFDAEMON_POD_NAME=$(kubectl get pods --namespace cluster-a -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o jsonpath={.items[0].metadata.name})
  export DFDAEMON_CONTAINER_PORT=$(kubectl get pod --namespace cluster-a $DFDAEMON_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  You can use $DFDAEMON_CONTAINER_PORT as a proxy port in Node.


3. Configure runtime to use dragonfly:
  https://d7y.io/docs/getting-started/quick-start/kubernetes/




4. Get Jaeger query URL by running these commands:
  export JAEGER_QUERY_PORT=$(kubectl --namespace cluster-a get services dragonfly-jaeger-query -o jsonpath="{.spec.ports[0].port}")
  kubectl --namespace cluster-a port-forward service/dragonfly-jaeger-query 16686:$JAEGER_QUERY_PORT
  echo "Visit http://127.0.0.1:16686/search?limit=20&lookback=1h&maxDuration&minDuration&service=dragonfly to query download events"

检查 Dragonfly 集群 A 是否部署成功:

$ kubectl get po -n cluster-a
NAME                                 READY   STATUS    RESTARTS      AGE
dragonfly-dfdaemon-7t6wc             1/1     Running   0             3m18s
dragonfly-dfdaemon-r45bk             1/1     Running   0             3m18s
dragonfly-jaeger-84dbfd5b56-fmhh6    1/1     Running   0             3m18s
dragonfly-manager-75f4c54d6d-tr88v   1/1     Running   0             3m18s
dragonfly-mysql-0                    1/1     Running   0             3m18s
dragonfly-redis-master-0             1/1     Running   0             3m18s
dragonfly-redis-replicas-0           1/1     Running   1 (2m ago)    3m18s
dragonfly-redis-replicas-1           1/1     Running   0             96s
dragonfly-redis-replicas-2           1/1     Running   0             45s
dragonfly-scheduler-0                1/1     Running   0             3m18s
dragonfly-seed-peer-0                1/1     Running   1 (37s ago)   3m18s

创建 Manager REST 服务的

NodePort Service 资源

创建 Manager REST 服务的配置文件 manager-rest-svc.yaml,配置如下:

apiVersion: v1
kind: Service
metadata:
  name: manager-rest
  namespace: cluster-a
spec:
  type: NodePort
  ports:
    - name: http
      nodePort: 30950
      port: 8080
  selector:
    app: dragonfly
    component: manager
    release: dragonfly

使用配置文件创建 Manager REST 服务的 Service 资源:

kubectl apply -f manager-rest-svc.yaml -n cluster-a

访问 Manager 控制台

使用默认用户名 root,密码 dragonfly 访问 localhost:8080 的 Manager 控制台地址,并且进入控制台。

dad65968faa34e5ac498ab6b1dc67435.png

7ba977ec33bc9cb0bae508b093f06e88.png

在 Dragonfly Manager 部署成功后,默认情况下 Dragonfly Manager 在第一次启动的时候,如果没有任何集群,那么会自动创建集群 A 的记录。用户可以点击 Manager 控制台看到集群 A 的详细信息。

e0646aa9b09aef3f946f45ecd1e8d25c.png

创建 Dragonfly 集群 B

创建 Dragonfly 集群 B,需要在 Manager 控制台首先创建 Dragonfly 集群记录,然后再使用 Helm 安装 Scheduler、Seed Peer 和 Peer。

Manager 控制台创建

Dragonfly 集群 B 的记录

点击 ADD CLUSTER 按钮创建集群 B 的记录,注意 IDC 设置为 cluster-2 使其能够跟后面 Peer 配置文件中 IDC 值为 cluster-2 的 Peer 相匹配。

3ff6397ac95e3d0e173b53b8a5776c5e.png

创建 Dragonfly 集群 B 记录成功。

c9dc04e994c1cc909f9b05e1445e299f.png

使用 Scopes 配置区分

不同 Dragonfly 集群

Cluster 管辖的 Scopes 信息。Peer 会根据 Dfdaemon 启动的配置文件 host.idc、host.location 以及 host.advertiseIP 的内容上报给 Manager。然后 Manager 选择跟 Cluster Scopes 中 IDC、Location 以及 CIDRs 匹配的 Cluster。被选中的 Cluster 会提供自身的 Scheduler Cluster 和 Seed Peer Cluster 对当前 Peer 进行服务。这样可以通过 Scopes 来区分不同 Cluster 服务的 Peer 群,在多集群场景中非常重要。Peer 的配置文件可以参考文档 dfdaemon config[2]。

如果 Peer 的 Scopes 信息和 Dragonfly 集群匹配,那么会优先使用当前 Dragonfly 集群的 Scheduler 和 Seed Peer 提供服务。也就是说当前 Dragonfly 集群内的 Peer 只能在集群内部进行 P2P 传输数据。如果没有匹配的 Dragonfly 集群,那么使用默认的 Dragonfly 集群提供服务。

Location: Cluster 需要为该 Location 的所有 Peer 提供服务。当对 Peer 配置中的 Location 与 Cluster 中的 Location 配时,Peer 将优先使用 Cluster 的 Scheduler 和 Seed Peer。用“|”分隔,例如“地区|国家|省|城市”。

IDC: Cluster 需要服务 IDC 内的所有 Peer。当 Peer 配置中的 IDC 与 Cluster 中的 IDC 匹配时,Peer 将优先使用 Cluster 的 Scheduler 和 Seed Peer。IDC 在 Scopes 内的优先级高于 Location。

CIDRs: Cluster 需要为 CIDR 中的所有 Peer 提供服务。当 Peer 启动时,将在 Peer 配置中使用 Advertise IP,如果 Peer 配置中的 Advertise IP 为空, 则 Peer 将自动获取 Expose IP 作为 Advertise IP。当 Peer 上报的 IP 与 Cluster 中的 CIDR 匹配时,Peer 将优先使用 Cluster 的 Scheduler 和 Seed Peer。CIDR 在 Scopes 内的优先级高于 IDC。

基于 Helm Charts 创建

Dragonfly 集群 B

创建 Helm Charts 文件的内容可以在 Manager 控制台对应的 Dragonfly 集群信息详情中查看。

4ff3ca8c51a21bb079c7483c930803be.png

  • Scheduler.config.manager.schedulerClusterID 是 Manager 控制台的 cluster-2 集群信息中的 Scheduler cluster ID 值。

  • Scheduler.config.manager.addr 是 Manager 的 GRPC 服务地址。

  • seedPeer.config.scheduler.manager.seedPeer.clusterID 是 Manager 控制台的 cluster-2 集群信息中的 Seed peer cluster ID 值。

  • seedPeer.config.scheduler.manager.netAddrs[0].addr 是 Manager 的 GRPC 服务地址。

  • dfdaemon.config.host.idc 是 Manager 控制台的 cluster-2 集群信息中的 IDC 值。

  • dfdaemon.config.scheduler.manager.netAddrs[0].addr 是 Manager 的 GRPC 服务地址。

  • externalManager.host 是 Manager 的 GRPC 服务的 Host。

  • externalRedis.addrs[0] 是 Redis 的服务地址。

创建 Helm Charts 的 Dragonfly 集群 B 的配置文件 charts-config-cluster-b.yaml,配置如下:

containerRuntime:
  containerd:
    enable: true
    injectConfigPath: true
    registries:
      - 'https://ghcr.io'


scheduler:
  image: dragonflyoss/scheduler
  tag: latest
  nodeSelector:
    cluster: b
  replicas: 1
  config:
    manager:
      addr: dragonfly-manager.cluster-a.svc.cluster.local:65003
      schedulerClusterID: 2


seedPeer:
  image: dragonflyoss/dfdaemon
  tag: latest
  nodeSelector:
    cluster: b
  replicas: 1
  config:
    scheduler:
      manager:
        netAddrs:
          - type: tcp
            addr: dragonfly-manager.cluster-a.svc.cluster.local:65003
        seedPeer:
          enable: true
          clusterID: 2


dfdaemon:
  image: dragonflyoss/dfdaemon
  tag: latest
  nodeSelector:
    cluster: b
  config:
    host:
      idc: cluster-2
    scheduler:
      manager:
        netAddrs:
          - type: tcp
            addr: dragonfly-manager.cluster-a.svc.cluster.local:65003


manager:
  enable: false


externalManager:
  enable: true
  host: dragonfly-manager.cluster-a.svc.cluster.local
  restPort: 8080
  grpcPort: 65003


redis:
  enable: false


externalRedis:
  addrs:
    - dragonfly-redis-master.cluster-a.svc.cluster.local:6379
  password: dragonfly


mysql:
  enable: false


jaeger:
  enable: true

使用配置文件部署 Helm Charts 的 Dragonfly 集群 B:

$ helm install --wait --create-namespace --namespace cluster-b dragonfly dragonfly/dragonfly -f charts-config-cluster-b.yaml
NAME: dragonfly
LAST DEPLOYED: Mon Aug  7 22:13:51 2023
NAMESPACE: cluster-b
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the scheduler address by running these commands:
  export SCHEDULER_POD_NAME=$(kubectl get pods --namespace cluster-b -l "app=dragonfly,release=dragonfly,component=scheduler" -o jsonpath={.items[0].metadata.name})
  export SCHEDULER_CONTAINER_PORT=$(kubectl get pod --namespace cluster-b $SCHEDULER_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  kubectl --namespace cluster-b port-forward $SCHEDULER_POD_NAME 8002:$SCHEDULER_CONTAINER_PORT
  echo "Visit http://127.0.0.1:8002 to use your scheduler"


2. Get the dfdaemon port by running these commands:
  export DFDAEMON_POD_NAME=$(kubectl get pods --namespace cluster-b -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o jsonpath={.items[0].metadata.name})
  export DFDAEMON_CONTAINER_PORT=$(kubectl get pod --namespace cluster-b $DFDAEMON_POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  You can use $DFDAEMON_CONTAINER_PORT as a proxy port in Node.


3. Configure runtime to use dragonfly:
  https://d7y.io/docs/getting-started/quick-start/kubernetes/




4. Get Jaeger query URL by running these commands:
  export JAEGER_QUERY_PORT=$(kubectl --namespace cluster-b get services dragonfly-jaeger-query -o jsonpath="{.spec.ports[0].port}")
  kubectl --namespace cluster-b port-forward service/dragonfly-jaeger-query 16686:$JAEGER_QUERY_PORT
  echo "Visit http://127.0.0.1:16686/search?limit=20&lookback=1h&maxDuration&minDuration&service=dragonfly to query download events"

检查 Dragonfly 集群 B 是否部署成功:

$ kubectl get po -n dragonfly-system
NAME                                READY   STATUS    RESTARTS   AGE
dragonfly-dfdaemon-q8bsg            1/1     Running   0          67s
dragonfly-dfdaemon-tsqls            1/1     Running   0          67s
dragonfly-jaeger-84dbfd5b56-rg5dv   1/1     Running   0          67s
dragonfly-scheduler-0               1/1     Running   0          67s
dragonfly-seed-peer-0               1/1     Running   0          67s

创建 Dragonfly 集群 B 成功。

dc50216db2afaab80e10666e5844eb74.png

使用 Dragonfly 在多集群环境下分发镜像

集群 A 中 Containerd 通过

Dragonfly 首次回源拉镜像

在 kind-worker Node 下载 ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5 镜像:

docker exec -i kind-worker /usr/local/bin/crictl pull ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5

暴露 Jaeger 16686 端口:

kubectl --namespace cluster-a port-forward service/dragonfly-jaeger-query 16686:16686

进入 Jaeger 页面 http://127.0.0.1:16686/search,搜索 Tags 值为 http.url="/v2/dragonflyoss/dragonfly2/scheduler/blobs/sha256:82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399?ns=ghcr.io" Tracing:

020a8be599a4c6b9082eae61f57e4421.jpeg

Tracing 详细内容:

5d544950f5e15878ccd6df43720ca6ed.jpeg

集群 A 内首次回源时,下载 82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399 层需要消耗时间为 1.47s。

集群 A 中 Containerd 下载镜像命中

Dragonfly 远程 Peer 的缓存

在 kind-worker2 Node 下载 ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5 镜像:

docker exec -i kind-worker2 /usr/local/bin/crictl pull ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5

暴露 Jaeger 16686 端口:

kubectl --namespace cluster-a port-forward service/dragonfly-jaeger-query 16686:16686

进入 Jaeger 页面 http://127.0.0.1:16686/search,搜索 Tags 值为 http.url="/v2/dragonflyoss/dragonfly2/scheduler/blobs/sha256:82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399?ns=ghcr.io" Tracing:

eebff4854c66642c69b6e87bd9e4783c.jpeg

Tracing 详细内容:

7857f1fdf98f25136495774485cc933f.jpeg

集群 A 中命中远程 Peer 缓存时,下载 82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399 层需要消耗时间为 37.48ms。

集群 B 中 Containerd 通过

Dragonfly 首次回源拉镜像

在 kind-worker3 Node 下载 ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5 镜像:

docker exec -i kind-worker3 /usr/local/bin/crictl pull ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5

暴露 Jaeger 16686 端口:

kubectl --namespace cluster-b port-forward service/dragonfly-jaeger-query 16686:16686

进入 Jaeger 页面 http://127.0.0.1:16686/search ,搜索 Tags 值为 http.url="/v2/dragonflyoss/dragonfly2/scheduler/blobs/sha256:82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399?ns=ghcr.io" Tracing:

226ef4148cb6eeea45552050466a1299.jpeg

Tracing 详细内容:

cd63eb2a3a3c0cf2f45738898f6bc6ef.jpeg

集群 B 中命中远程 Peer 缓存时,下载 82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399 层需要消耗时间为 4.97s。

集群 B 中 Containerd 下载镜像命中

Dragonfly 远程 Peer 的缓存

在 kind-worker4 Node 下载 ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5 镜像:

docker exec -i kind-worker4 /usr/local/bin/crictl pull ghcr.io/dragonflyoss/dragonfly2/scheduler:v2.0.5

暴露 Jaeger 16686 端口:

kubectl --namespace cluster-b port-forward service/dragonfly-jaeger-query 16686:16686

进入 Jaeger 页面 http://127.0.0.1:16686/search ,搜索 Tags 值为 http.url="/v2/dragonflyoss/dragonfly2/scheduler/blobs/sha256:82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399?ns=ghcr.io" Tracing:

289a6ba1c3e29461379a11522956fd15.jpeg

Tracing 详细内容:

4765a9af2cdfd68f2f7d693011b37388.jpeg

集群 B 中命中远程 Peer 缓存时,下载 82cbeb56bf8065dfb9ff5a0c6ea212ab3a32f413a137675df59d496e68eaf399 层需要消耗时间为 14.53ms。

Dragonfly Star 一下✨:
https://github.com/dragonflyoss/Dragonfly2

相关链接

[1]Kind:https://kind.sigs.k8s.io/

[2]dfdaemon config:https://d7y.io/zh/docs/next/reference/configuration/dfdaemon/

[3]Dragonfly 官网:https://d7y.io/

[4]Dragonfly Github 仓库:https://github.com/dragonflyoss/Dragonfly2

[5]Dragonfly Slack Channel(#dragonfly on CNCF Slack):https://cloud-native.slack.com/?redir=%2Fmessages%2Fdragonfly%2F

[6]Dragonfly Discussion Group: dragonfly-discuss@googlegroups.com

[7]Dragonfly Twitter(@dragonfly_oss):https://twitter.com/dragonfly_oss

[8]Nydus Github 仓库: https://github.com/dragonflyoss/image-service

[9]Nydus 官网: https://nydus.dev/

cacd722d63345f80e9c808dbacc6e3c9.png

扫描二维码查看 Dragonfly GitHub 页面

推荐阅读

f913d4a790c8595e342adb259cabe07d.png

Dragonfly 发布 v2.1.0 版本!

5c9e46f4cd6b753bbf5557507ce844b3.png

Dragonfly 中 P2P 传输协议优化

c7c7e8c962b3d77188240ea1a967dc99.png

蚂蚁 SOFAServerless 微服务新架构的探索与实践

f8134300fc95e20f159b374dd66ed150.jpeg

超越边界:FaaS 的应用实践和未来展望

55a67b4ed7ad497ba96f23f331c6e60d.jpeg

使用DragonFly进行智能镜像分发 Dragonfly 是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高文件传输的效率和速率,最大限度地利用网络带宽,尤其是在分发大量数据时,例如应用分发、缓存分发、日志分发和镜像分发。 在阿里巴巴,Dragonfly 每个月会被调用 20 亿次,分发的数据量高达 3.4PB。Dragonfly 已成为阿里巴巴基础设施中的重要一环。 尽管容器技术大部分时候简化了运维工作,但是它也带来了一些挑战:例如镜像分发的效率问题,尤其是必须在多个主机上复制镜像分发时。 Dragonfly 在这种场景下能够完美支持 阅读详情

相关推荐

Dragonfly实战:如何用P2P技术给K8s集群镜像分发提速3倍(附避坑指南)

本文详细介绍了如何利用Dragonfly的P2P技术为Kubernetes集群的镜像分发实现3倍以上的提速。通过深入解析其SuperNode、Dfget等核心组件架构,并结合生产环境部署、性能调优及监控告警的实战指南,帮助运维人员有效规避常见陷阱,显著提升大规模容器化部署的效率与稳定性。

weixin_28839549的博客 214

docker安装部署dragonfly2镜像加速服务

​ Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。​ 现阶段 Dragonfly 基于 Dragonfly1.x 演进而来,在保持 Dragonfly1.x 原有核心能力的基础上,Dragonfly 在系统架构设计、产品能力、使用场景等几大方向上进行了全面升级。

ll535299的博客 2596

Dragonfly与Harbor集成:构建高效P2P私有镜像分发方案

本文详细介绍了如何通过Dragonfly与Harbor集成构建高效的P2P私有镜像分发方案,解决传统中心化分发的带宽浪费、单点故障和跨国传输慢等问题。通过核心架构解析、深度集成实战和性能调优,展示了P2P技术在镜像分发中的显著优势,包括带宽节省、下载时间缩短和高可用性提升。

weixin_42526166的博客 318

dragonfly k8s 部署

在dragonfly客户端执行 (填写旧redis地址)修改nodeport。

Sunnyang123的博客 394

Dragonfly P2P镜像分发实战:从单机到多机部署全解析

本文详细解析了Dragonfly P2P镜像分发工具从单机到多机集群的完整部署流程。通过实战演示,阐述了如何利用其P2P技术解决大规模Docker镜像分发时的效率瓶颈,显著减轻镜像仓库压力并节省网络带宽。文章涵盖了SuperNode与Dfclient的配置、与私有仓库集成、性能调优及生产环境注意事项,为构建高效容器镜像分发网络提供全面指导。

weixin_28836989的博客 340

Dragonfly 部署

重启 docker 后,如果 redis 和 mysql 容器启动不了,其他容器也会无法启动,频繁重启,docker 日志报错如下。启动 redis mysql 容器后,再分别重启无法启动的 pod 即可解决。安装好 docker 和 docker-compose。如果输出类似如下的日志,代表成功。或者直接进入 peer 容器查看。正常后启动的容器如下。

weixin_40548182的博客 563

如何使用 Harbor 和 Dragonfly 优化 Kubernetes 集群镜像拉取速度

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !本篇文章则分享在大规模的 Kubernetes 集群中,通过 Harbor 与 Dragonfly 来优化镜像的拉取速度。Dragonfly(蜻蜓)简介项目地址:https://github.com/dragonflyoss/Dragonfly2官方文档: https://d7y.io/zh/docs/ ...

easylife206的专栏 1299

安装matlab_Matlab+yalmip+cplex安装教程及算例

数学建模/科研学习推荐学习软件:Matlab+yalmip+cplex安装教程及算例其实绝大多数本科生都是在用Matlab和LINGO求解优化问题,Matlab可以求解一般优化问题,但是当优化问题规模比较大或者在应对一些非线性问题时候,Matlab会出现求解时间长,求解效率低,甚至难以求解等问题。Matlab+yalmip+cplex是Matlab通过调用商业软件cplex求解,求解时间短,这里简...

weixin_28939637的博客 5006

Docker 环境基于 Dragonfly 的 Kubernetes 多集群镜像分发实践

文|唐荦彦深信服高级开发工程师主要负责 SASE 云化架构以及基础设施建设本文 3056 字,阅读 6 分钟01你将在本文学到什么?多 K8S 集群镜像分发方案Dragonfly 的理解Harbor 的预热机制Dragonfly 的使用以及排障02K8S 多集群镜像分发问题在边缘云架构的生产环境下,演进过程中,一开始的镜像分发方案如下:每个边缘集群都存在节点的 Harbor 仓库,进行缓存...

金融级分布式架构 1050

【数据分享】2012-2022年全国及各城市POI(兴趣点)数据(超20G)

POI(一般作为Point of Interest的缩写,也有Point of Information的说法),通常称作兴趣点,泛指互联网电子地图中的点类数据,基本包含名称、地址、坐标、类别四个属性;随着互联网电子地图服务与LBS应用的普及,POI无论从概念范畴,还是从信息纵深都有了长足发展,互联网各个风口或火山口都和POI有一定关系,如O2O、电商、社交、互联网金融、共享经济等。

J_Giser的博客 2738

AI大模型探索之路-认知篇1-全景透视:揭秘AIGC技术的进化之路

随着人工智能技术的突飞猛进,内容创作方式的发生了革命性的转变;从早期专业人员主导的内容生产,到现如今生成式人工智(AIGC)能创作时代;本篇文章主要讲解AIGC技术的演变历程。

寻道AI,探索AI无限可能! 1649

Dragonfly2实战教程:如何为Kubernetes集群配置智能负载均衡和文件分发

Dragonfly2是一个开源的CDN加速和负载均衡器,专为云原生应用程序设计,能够显著提升内容分发效率并降低网络延迟。本教程将详细介绍如何在Kubernetes环境中部署和配置Dragonfly2,实现智能负载均衡和高效文件分发。 ## 🚀 项目核心优势 Dragonfly2基于P2P技术构建,具有以下关键特性: - **高性能和可扩展性**:支持大规模集群部署 - **智能负载均衡**

gitblog_00215的博客 943

图像处理之边缘检测[微分算子、Canny算子和LOG算子]

LOG算子是在经典算子的基础上发展起来的边缘检测算子,根据信噪比求得检测边缘的最优滤波器。边缘总是以强度突变的形式出现,可以定义为图像局部特性的不连续性,如灰度的突变和纹理结构的突变等。图像的边缘包含了物体形状的重要信息,它不仅在分析图像时大幅度地减少了要处理的信息量,而且还保护了目标的边界结构。对于复杂的图像,采用Roberts算子不能较好地得到图像的边缘,而需要采用更加复杂的3X3的算子比如Prewitt算子。对于离散的图像f(x,y),边缘检测算子是用图像的垂直和水平差分来逼近梯度算子,即。

qq_44111805的博客 9837

Dragonfly与Kubernetes集成:在容器环境中实现镜像加速的终极方案

在当今云原生时代,**Kubernetes容器编排**已成为企业应用部署的标准,然而随着集群规模的扩大,镜像拉取效率问题日益凸显。Dragonfly作为一款开源的**P2P镜像分发系统**,通过与Kubernetes深度集成,为大规模容器环境提供了**高效的镜像加速解决方案**,彻底解决了传统单点下载带来的瓶颈问题。 ## 🚀 为什么需要容器镜像加速? 随着微服务架构的普及,单个应用可能包含

gitblog_00443的博客 791

AMBA-CHI协议详解(十五)

Write transactions事务描述以及请求属性,cache line状态转换。

Crazzy_M的博客 650

CNCF Dragonfly 毕业啦!基于P2P的镜像和文件分发系统快速入门,在线体验

Dragonfly专注于解决基于Kubernetes的云原生环境下大规模镜像与文件分发难题。该项目利用点对点(P2P)技术,提供高效、稳定且安全的数据分发与加速能力,旨在成为云原生架构中的标准解决方案,支持文件、容器镜像、OCI制品、AI模型权重、缓存、日志及依赖项的大规模分发。

藏云阁技术社区 1669

WOFOST作物模型(3):敏感性分析

使用TAGP(Total Above Ground Production),地上总产量TSUM1,temperature sum from emergence to anthesis,萌发至开花所需温度TSUM2,temperature sum from anthesis to maturity,开花至成熟所需温度SPAN,life span of leaves growing at 35 Celsius,生长温度为35度时的叶龄。

所有专家都曾始于新手 1146

Dragonfly跨云文件分发终极指南:实现多云环境高效适配

Dragonfly是一款开源的**P2P文件分发系统**,专为**多云环境**和**容器镜像分发**而设计。通过智能的**P2P技术**和**超级节点调度**,Dragonfly能够显著提升文件分发速度,降低带宽成本,并实现跨云平台的高效适配。无论您是在**Kubernetes集群**中部署容器,还是在**混合云架构**中传输大文件,Dragonfly都能提供稳定可靠的**分布式文件分发**解决方

gitblog_00533的博客 825

随机优化 (Stochastic Optimization) 算法详解及案例分析

随机优化是一种用于处理包含随机变量的优化问题的方法。其目标是通过考虑随机变量的概率分布,找到一个在期望意义下最优的解。

闲人编程的博客 4181

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

P2P镜像分发:Harbor+Dragonfly优化k8s集群镜像拉取速度(二)

Dragonfly(蜻蜓)是一款开源的基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。是由CNCF(云原生计算基金会)作为孵化级项目(阿里)。

渡江客涂鸦板 1464

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Dragonfly:革命性云原生P2P文件分发系统完整指南

在当今云原生时代,大规模文件分发已成为企业数字化转型的关键挑战。Dragonfly作为一款革命性的云原生P2P文件分发系统,通过智能对等网络技术彻底改变了传统的文件传输方式,为开发者提供了高效、可靠的解决方案。🚀 ## 什么是Dragonfly? Dragonfly是一款开源的智能P2P文件分发和镜像加速系统,专门为云原生环境设计。它通过建立对等网络,让多个节点可以同时从多个源下载文件,大幅

gitblog_07903的博客 630

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Dragonfly与Harbor集成:企业级镜像加速终极指南 [特殊字符]

Dragonfly作为业界领先的P2P文件分发系统,与Harbor企业级镜像仓库的无缝集成,为企业用户提供了前所未有的镜像分发加速体验。通过智能P2P网络技术,Dragonfly能够显著降低镜像拉取时间,同时减轻Harbor服务器的带宽压力。 ## 为什么需要Dragonfly与Harbor集成? 🤔 在Kubernetes集群和容器化环境中,镜像分发是日常运维的关键环节。随着业务规模的扩大

gitblog_00918的博客 1116

Dragonfly在Kubernetes中的终极部署指南:10个简单步骤实现镜像加速

想要在Kubernetes集群中实现极速的容器镜像分发吗?Dragonfly作为阿里巴巴开源的高性能P2P文件分发系统,正是解决大规模容器部署中镜像拉取瓶颈的终极方案。本指南将带您完成Dragonfly在Kubernetes环境中的完整部署,让您的容器镜像分发速度提升10倍!🚀 ## 🎯 为什么选择Dragonfly? 在Kubernetes集群中,当多个节点同时拉取相同的容器镜像时,传统

gitblog_00827的博客 571

【镜像分发效率提升10倍】:深度解析Harbor与Dragonfly协同架构

提升镜像分发效率10倍的实战方案,详解Docker镜像仓库同步工具在多集群环境中的高效协同。结合Harbor与Dragonfly实现自动化镜像同步与分发,降低带宽消耗,加速部署流程,大规模容器场景下稳定可靠,值得收藏。

BytePerch的博客 774

Dragonfly 开源项目教程

Dragonfly 开源项目教程 Dragonfly项目地址:https://gitcode.com/gh_mirrors/dragonfly6/Dragonfly 项目介绍 Dragonfly 是由阿里巴巴开发的一个开源分布式文件分发系统,旨在解决大规模文件分发和镜像分发的问题。它通过 P2P 技术优化文件传输,提高分发效率,减少带宽消耗。Dragonfly 支持 Docker 镜像和普通文件...

gitblog_00512的博客 777
上一篇: 活动推荐|9 月 7 日外滩大会开源论坛
下一篇: 直播预告|SOFAChannel#35《SOFABoot 4.0 — 迈向 JDK 17 新时代》
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值