diff --git a/docs/getting-started/installation/helm-charts.md b/docs/getting-started/installation/helm-charts.md index f5793f7e..7331e090 100644 --- a/docs/getting-started/installation/helm-charts.md +++ b/docs/getting-started/installation/helm-charts.md @@ -44,39 +44,47 @@ Switch the context of kubectl to kind cluster: kubectl config use-context kind-kind ``` -## Kind loads Dragonfly image {#kind-loads-dragonfly-image} - -Pull Dragonfly latest images: - -```shell -docker pull dragonflyoss/scheduler:latest -docker pull dragonflyoss/manager:latest -docker pull dragonflyoss/dfdaemon:latest -``` - -Kind cluster loads Dragonfly latest images: - -```shell -kind load docker-image dragonflyoss/scheduler:latest -kind load docker-image dragonflyoss/manager:latest -kind load docker-image dragonflyoss/dfdaemon:latest -``` - ## Create Dragonfly cluster based on helm charts {#create-dragonfly-cluster-based-on-helm-charts} Create the Helm Charts configuration file `values.yaml`, and set the container runtime to `containerd`. Please refer to the [configuration](https://artifacthub.io/packages/helm/dragonfly/dragonfly#values) documentation for details. ```yaml -containerRuntime: - containerd: +manager: + replicas: 1 + image: + repository: dragonflyoss/manager + tag: latest + +scheduler: + replicas: 1 + image: + repository: dragonflyoss/scheduler + tag: latest + +seedClient: + replicas: 1 + image: + repository: dragonflyoss/client + tag: latest + +client: + image: + repository: dragonflyoss/client + tag: latest + dfinit: enable: true - injectConfigPath: true - registries: - - 'https://docker.io' - -jaeger: - enable: true + image: + repository: dragonflyoss/dfinit + tag: latest + config: + containerRuntime: + containerd: + configPath: /etc/containerd/config.toml + registries: + - hostNamespace: docker.io + serverAddr: https://index.docker.io + capabilities: ['pull', 'resolve'] ``` Create a Dragonfly cluster using the configuration file: @@ -87,7 +95,7 @@ Create a Dragonfly cluster using the configuration file: $ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/ $ helm install --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly -f values.yaml NAME: dragonfly -LAST DEPLOYED: Mon Mar 4 16:23:15 2024 +LAST DEPLOYED: Thu Apr 18 19:26:39 2024 NAMESPACE: dragonfly-system STATUS: deployed REVISION: 1 @@ -106,11 +114,6 @@ NOTES: 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 dragonfly-system get services dragonfly-jaeger-query -o jsonpath="{.spec.ports[0].port}") - kubectl --namespace dragonfly-system 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" ``` @@ -119,23 +122,17 @@ Check that Dragonfly is deployed successfully: ```shell $ kubectl get po -n dragonfly-system -NAME READY STATUS RESTARTS AGE -dragonfly-dfdaemon-2j57h 1/1 Running 0 92s -dragonfly-dfdaemon-fg575 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-9cd6m 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-m9nkj 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-x2nzg 1/1 Running 0 92s -dragonfly-mysql-0 1/1 Running 0 92s -dragonfly-redis-master-0 1/1 Running 0 92s -dragonfly-redis-replicas-0 1/1 Running 0 92s -dragonfly-redis-replicas-1 1/1 Running 0 55s -dragonfly-redis-replicas-2 1/1 Running 0 34s -dragonfly-scheduler-0 1/1 Running 0 92s -dragonfly-scheduler-1 1/1 Running 0 20s -dragonfly-scheduler-2 0/1 Running 0 10s -dragonfly-seed-peer-0 1/1 Running 0 92s -dragonfly-seed-peer-1 1/1 Running 0 31s -dragonfly-seed-peer-2 0/1 Running 0 11s +NAME READY STATUS RESTARTS AGE +dragonfly-client-gvspg 1/1 Running 0 34m +dragonfly-client-kxrhh 1/1 Running 0 34m +dragonfly-manager-864774f54d-6t79l 1/1 Running 0 34m +dragonfly-mysql-0 1/1 Running 0 34m +dragonfly-redis-master-0 1/1 Running 0 34m +dragonfly-redis-replicas-0 1/1 Running 0 34m +dragonfly-redis-replicas-1 1/1 Running 0 32m +dragonfly-redis-replicas-2 1/1 Running 0 32m +dragonfly-scheduler-0 1/1 Running 0 34m +dragonfly-seed-client-0 1/1 Running 5 (21m ago) 34m ``` ## Containerd downloads images through Dragonfly {#containerd-downloads-images-through-dragonfly} @@ -154,13 +151,13 @@ You can execute the following command to check if the `alpine:3.19` image is dis ```shell # Find pod name. -export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) +export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=client" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) -# Find peer id. -export PEER_ID=$(kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep "alpine" /var/log/dragonfly/daemon/core.log | awk -F'"peer":"' '{print $2}' | awk -F'"' '{print $1}' | head -n 1) +# Find task id. +export TASK_ID=$(kubectl -n dragonfly-system exec ${POD_NAME} -- sh -c "grep -hoP 'library/alpine.*task_id=\"\K[^\"]+' /var/log/dragonfly/dfdaemon/* | head -n 1") # Check logs. -kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep ${PEER_ID} /var/log/dragonfly/daemon/core.log | grep "peer task done" +kubectl -n dragonfly-system exec -it ${POD_NAME} -- sh -c "grep ${TASK_ID} /var/log/dragonfly/dfdaemon/* | grep 'download task succeeded'" ``` @@ -169,14 +166,11 @@ The expected output is as follows: ```shell { - "level": "info", - "ts": "2024-03-05 12:06:31.244", - "caller": "peer/peertask_conductor.go:1349", - "msg": "peer task done, cost: 2751ms", - "peer": "10.244.1.2-54896-5c6cb404-0f2b-4ac6-a18f-d74167a766b4", - "task": "0bff62286fe544f598997eed3ecfc8aa9772b8522b9aa22a01c06eef2c8eba66", - "component": "PeerTask", - "trace": "31fc6650d93ec3992ab9aad245fbef71" +2024-04-19T02:44:09.259458Z INFO +download_task: dragonfly-client/src/grpc/dfdaemon_download.rs:276: download task succeeded +host_id="172.18.0.3-kind-worker" +task_id="a46de92fcb9430049cf9e61e267e1c3c9db1f1aa4a8680a048949b06adb625a5" +peer_id="172.18.0.3-kind-worker-86e48d67-1653-4571-bf01-7e0c9a0a119d" } ``` @@ -187,36 +181,20 @@ The expected output is as follows: Pull `alpine:3.19` image in `kind-worker` node: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 -``` - -Expose jaeger's port `16686`: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -Visit the Jaeger page in [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search), Search for tracing with Tags -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"`: - -![download-back-to-source-search-tracing](../../resource/getting-started/installation/download-back-to-source-search-tracing.png) - -Tracing details: - -![download-back-to-source-tracing](../../resource/getting-started/installation/download-back-to-source-tracing.png) - -When pull image back-to-source for the first time through Dragonfly, it takes `2.82s` to download the -`ceba1302dd4fbd8fc7fd7a135c8836c795bc3542b9b134597eba13c75d2d2cb0` layer. +When pull image back-to-source for the first time through Dragonfly, it takes `28.82s` to download the `alpine:3.19` image. ### Containerd pull image hits the cache of remote peer {#containerd-pull-image-hits-the-cache-of-remote-peer} -Delete the dfdaemon whose Node is `kind-worker` to clear the cache of Dragonfly local Peer. +Delete the client whose Node is `kind-worker` to clear the cache of Dragonfly local Peer. ```shell # Find pod name. -export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) +export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=client" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) # Delete pod. kubectl delete pod ${POD_NAME} -n dragonfly-system @@ -230,29 +208,14 @@ Delete `alpine:3.19` image in `kind-worker` node: docker exec -i kind-worker /usr/local/bin/crictl rmi alpine:3.19 ``` -Pull `alpine:3.19` image in `kind-worker2` node: - -```shell -docker exec -i kind-worker2 /usr/local/bin/crictl pull alpine:3.19 -``` - -Expose jaeger's port `16686`: +Pull `alpine:3.19` image in `kind-worker` node: ```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -Visit the Jaeger page in [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search), Search for tracing with Tags -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"`: - -![hit-remote-peer-cache-search-tracing](../../resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png) - -Tracing details: - -![hit-remote-peer-cache-tracing](../../resource/getting-started/installation/hit-remote-peer-cache-tracing.png) - -When pull image hits cache of remote peer, it takes `341.72ms` to download the -`ceba1302dd4fbd8fc7fd7a135c8836c795bc3542b9b134597eba13c75d2d2cb0` layer. +When pull image hits cache of remote peer, it takes `12.524s` to download the +`alpine:3.19` image. ### Containerd pull image hits the cache of local peer {#containerd-pull-image-hits-the-cache-of-local-peer} @@ -265,26 +228,11 @@ docker exec -i kind-worker /usr/local/bin/crictl rmi alpine:3.19 Pull `alpine:3.19` image in `kind-worker` node: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -Expose jaeger's port `16686`: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 -``` - -Visit the Jaeger page in [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search), Search for tracing with Tags -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"`: - -![hit-local-peer-cache-search-tracing](../../resource/getting-started/installation/hit-local-peer-cache-search-tracing.png) - -Tracing details: - -![hit-local-peer-cache-tracing](../../resource/getting-started/installation/hit-local-peer-cache-tracing.png) - -When pull image hits cache of local peer, it takes `5.38ms` to download the -`ceba1302dd4fbd8fc7fd7a135c8836c795bc3542b9b134597eba13c75d2d2cb0` layer. +When pull image hits cache of local peer, it takes `7.432s` to download the +`alpine:3.19` image. ## Preheat image {#preheat-image} @@ -317,7 +265,62 @@ curl --location --request POST 'http://127.0.0.1:8080/oapi/v1/jobs' \ The command-line log returns the preheat job id: ```shell -{"id":1,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"task_id":"group_e9a1bc09-b988-4403-bf56-c4dc295b6a76","bio":"","type":"preheat","state":"PENDING","args":{"filteredQueryParams":"","headers":null,"password":"","platform":"","tag":"","type":"image","url":"https://registry-1.docker.io/v2/library/alpine/manifests/3.19","username":""},"result":null,"user_id":0,"user":{"id":0,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"email":"","name":"","avatar":"","phone":"","state":"","location":"","bio":"","configs":null},"seed_peer_clusters":null,"scheduler_clusters":[{"id":1,"created_at":"2024-03-12T08:39:20Z","updated_at":"2024-03-12T08:39:20Z","is_del":0,"name":"cluster-1","bio":"","config":{"candidate_parent_limit":4,"filter_parent_limit":15},"client_config":{"load_limit":200},"scopes":{},"is_default":true,"seed_peer_clusters":null,"schedulers":null,"peers":null,"jobs":null}]} +{ + id: 1, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + task_id: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + bio: '', + type: 'preheat', + state: 'PENDING', + args: { + filteredQueryParams: 'Expires\u0026Signature', + headers: null, + password: '', + pieceLength: 4194304, + platform: '', + tag: '', + type: 'image', + url: 'https://index.docker.io/v2/library/alpine/manifests/3.19', + username: '', + }, + result: null, + user_id: 0, + user: { + id: 0, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + email: '', + name: '', + avatar: '', + phone: '', + state: '', + location: '', + bio: '', + configs: null, + }, + seed_peer_clusters: null, + scheduler_clusters: [ + { + id: 1, + created_at: '2024-04-19T02:24:44Z', + updated_at: '2024-04-19T02:24:44Z', + is_del: 0, + name: 'cluster-1', + bio: '', + config: { candidate_parent_limit: 4, filter_parent_limit: 15 }, + client_config: { load_limit: 200 }, + scopes: {}, + is_default: true, + seed_peer_clusters: null, + schedulers: null, + peers: null, + jobs: null, + }, + ], +} ``` Polling the preheating status with job id: @@ -331,29 +334,93 @@ curl --request GET 'http://127.0.0.1:8080/oapi/v1/jobs/1' \ If the status is `SUCCESS`, the preheating is successful: ```shell -{"id":1,"created_at":"2024-03-14T08:01:05Z","updated_at":"2024-03-14T08:01:29Z","is_del":0,"task_id":"group_e64477bd-3ec8-4898-bd4d-ce74f0f66564","bio":"","type":"preheat","state":"SUCCESS","args":{"filteredQueryParams":"Expires\u0026Signature","headers":null,"password":"liubo666.","platform":"","tag":"","type":"image","url":"https://index.docker.io/v2/library/alpine/manifests/3.19","username":"zhaoxinxin03"},"result":{"CreatedAt":"2024-03-14T08:01:05.08734184Z","GroupUUID":"group_e64477bd-3ec8-4898-bd4d-ce74f0f66564","JobStates":[{"CreatedAt":"2024-03-14T08:01:05.08734184Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_36d16ee6-dea6-426a-94d9-4e2aaedba97e"},{"CreatedAt":"2024-03-14T08:01:05.092529257Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_253e6894-ca21-4287-8cc7-1b2f5bcd52f5"}],"State":"SUCCESS"},"user_id":0,"user":{"id":0,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"email":"","name":"","avatar":"","phone":"","state":"","location":"","bio":"","configs":null},"seed_peer_clusters":[],"scheduler_clusters":[{"id":1,"created_at":"2024-03-14T07:37:01Z","updated_at":"2024-03-14T07:37:01Z","is_del":0,"name":"cluster-1","bio":"","config":{"candidate_parent_limit":4,"filter_parent_limit":15},"client_config":{"load_limit":200},"scopes":{},"is_default":true,"seed_peer_clusters":null,"schedulers":null,"peers":null,"jobs":null}]} +{ + id: 1, + created_at: '2024-04-19T02:42:06Z', + updated_at: '2024-04-19T02:42:27Z', + is_del: 0, + task_id: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + bio: '', + type: 'preheat', + state: 'SUCCESS', + args: { + filteredQueryParams: 'Expires\u0026Signature', + headers: null, + password: '', + pieceLength: 4194304, + platform: '', + tag: '', + type: 'image', + url: 'https://index.docker.io/v2/library/alpine/manifests/3.19', + username: '', + }, + result: { + CreatedAt: '2024-04-19T02:42:06.202315051Z', + GroupUUID: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + JobStates: [ + { + CreatedAt: '2024-04-19T02:42:06.202315051Z', + Error: '', + Results: [], + State: 'SUCCESS', + TTL: 0, + TaskName: 'preheat', + TaskUUID: 'task_064d25a2-e3e7-4be8-8ca9-cad6bd94ad16', + }, + { + CreatedAt: '2024-04-19T02:42:06.20404751Z', + Error: '', + Results: [], + State: 'SUCCESS', + TTL: 0, + TaskName: 'preheat', + TaskUUID: 'task_7b921739-2b17-475b-87ac-7afc69d917d8', + }, + ], + State: 'SUCCESS', + }, + user_id: 0, + user: { + id: 0, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + email: '', + name: '', + avatar: '', + phone: '', + state: '', + location: '', + bio: '', + configs: null, + }, + seed_peer_clusters: [], + scheduler_clusters: [ + { + id: 1, + created_at: '2024-04-19T02:24:44Z', + updated_at: '2024-04-19T02:24:44Z', + is_del: 0, + name: 'cluster-1', + bio: '', + config: { candidate_parent_limit: 4, filter_parent_limit: 15 }, + client_config: { load_limit: 200 }, + scopes: {}, + is_default: true, + seed_peer_clusters: null, + schedulers: null, + peers: null, + jobs: null, + }, + ], +} ``` Pull `alpine:3.19` image in `kind-worker` node: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 -``` - -Expose jaeger's port `16686`: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -Visit the Jaeger page in [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search), Search for tracing with Tags -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"`: - -![hit-preheat-cache-search-tracing](../../resource/getting-started/installation/hit-preheat-cache-search-tracing.png) - -Tracing details: - -![hit-preheat-cache-tracing](../../resource/getting-started/installation/hit-preheat-cache-tracing.png) - -When pull image hits preheat cache, it takes `854.54ms` to download the -`ceba1302dd4fbd8fc7fd7a135c8836c795bc3542b9b134597eba13c75d2d2cb0` layer. +When pull image hits preheat cache, it takes `11.030s` to download the +`alpine:3.19` image. diff --git a/docs/resource/getting-started/installation/download-back-to-source-search-tracing.png b/docs/resource/getting-started/installation/download-back-to-source-search-tracing.png deleted file mode 100644 index 2f1d97ef..00000000 Binary files a/docs/resource/getting-started/installation/download-back-to-source-search-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/download-back-to-source-tracing.png b/docs/resource/getting-started/installation/download-back-to-source-tracing.png deleted file mode 100644 index bfa0e9d7..00000000 Binary files a/docs/resource/getting-started/installation/download-back-to-source-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png b/docs/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png deleted file mode 100644 index 96d1d955..00000000 Binary files a/docs/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-local-peer-cache-tracing.png b/docs/resource/getting-started/installation/hit-local-peer-cache-tracing.png deleted file mode 100644 index e01078bb..00000000 Binary files a/docs/resource/getting-started/installation/hit-local-peer-cache-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-preheat-cache-search-tracing.png b/docs/resource/getting-started/installation/hit-preheat-cache-search-tracing.png deleted file mode 100644 index cdafa2a5..00000000 Binary files a/docs/resource/getting-started/installation/hit-preheat-cache-search-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-preheat-cache-tracing.png b/docs/resource/getting-started/installation/hit-preheat-cache-tracing.png deleted file mode 100644 index c7db12fc..00000000 Binary files a/docs/resource/getting-started/installation/hit-preheat-cache-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png b/docs/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png deleted file mode 100644 index 461ddf24..00000000 Binary files a/docs/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png and /dev/null differ diff --git a/docs/resource/getting-started/installation/hit-remote-peer-cache-tracing.png b/docs/resource/getting-started/installation/hit-remote-peer-cache-tracing.png deleted file mode 100644 index 4dda835b..00000000 Binary files a/docs/resource/getting-started/installation/hit-remote-peer-cache-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation/helm-charts.md b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation/helm-charts.md index 5c9b2e12..8fec2704 100644 --- a/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation/helm-charts.md +++ b/i18n/zh/docusaurus-plugin-content-docs/current/getting-started/installation/helm-charts.md @@ -44,38 +44,46 @@ kind create cluster --config kind-config.yaml kubectl config use-context kind-kind ``` -## Kind 加载 Dragonfly 镜像 - -下载 Dragonfly Latest 镜像: - -```shell -docker pull dragonflyoss/scheduler:latest -docker pull dragonflyoss/manager:latest -docker pull dragonflyoss/dfdaemon:latest -``` - -Kind 集群加载 Dragonfly Latest 镜像: - -```shell -kind load docker-image dragonflyoss/scheduler:latest -kind load docker-image dragonflyoss/manager:latest -kind load docker-image dragonflyoss/dfdaemon:latest -``` - ## 基于 Helm Charts 创建 Dragonfly 集群 创建 Helm Charts 配置文件 `values.yaml`,并且设置容器运行时为 containerd。详情参考[配置文档](https://artifacthub.io/packages/helm/dragonfly/dragonfly#values)。 ```yaml -containerRuntime: - containerd: +manager: + replicas: 1 + image: + repository: dragonflyoss/manager + tag: latest + +scheduler: + replicas: 1 + image: + repository: dragonflyoss/scheduler + tag: latest + +seedClient: + replicas: 1 + image: + repository: dragonflyoss/client + tag: latest + +client: + image: + repository: dragonflyoss/client + tag: latest + dfinit: enable: true - injectConfigPath: true - registries: - - 'https://docker.io' - -jaeger: - enable: true + image: + repository: dragonflyoss/dfinit + tag: latest + config: + containerRuntime: + containerd: + configPath: /etc/containerd/config.toml + registries: + - hostNamespace: docker.io + serverAddr: https://index.docker.io + capabilities: ['pull', 'resolve'] ``` 使用配置文件部署 Dragonfly Helm Charts: @@ -86,7 +94,7 @@ jaeger: $ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/ $ helm install --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly -f values.yaml NAME: dragonfly -LAST DEPLOYED: Mon Mar 4 16:23:15 2024 +LAST DEPLOYED: Thu Apr 18 19:26:39 2024 NAMESPACE: dragonfly-system STATUS: deployed REVISION: 1 @@ -105,35 +113,23 @@ NOTES: 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 dragonfly-system get services dragonfly-jaeger-query -o jsonpath="{.spec.ports[0].port}") - kubectl --namespace dragonfly-system 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 是否部署成功: -```shell +````shell $ kubectl get po -n dragonfly-system -NAME READY STATUS RESTARTS AGE -dragonfly-dfdaemon-2j57h 1/1 Running 0 92s -dragonfly-dfdaemon-fg575 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-9cd6m 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-m9nkj 1/1 Running 0 92s -dragonfly-manager-6dbfb7b47-x2nzg 1/1 Running 0 92s -dragonfly-mysql-0 1/1 Running 0 92s -dragonfly-redis-master-0 1/1 Running 0 92s -dragonfly-redis-replicas-0 1/1 Running 0 92s -dragonfly-redis-replicas-1 1/1 Running 0 55s -dragonfly-redis-replicas-2 1/1 Running 0 34s -dragonfly-scheduler-0 1/1 Running 0 92s -dragonfly-scheduler-1 1/1 Running 0 20s -dragonfly-scheduler-2 1/1 Running 0 10s -dragonfly-seed-peer-0 1/1 Running 0 92s -dragonfly-seed-peer-1 1/1 Running 0 31s -dragonfly-seed-peer-2 1/1 Running 0 11s +NAME READY STATUS RESTARTS AGE +dragonfly-client-gvspg 1/1 Running 0 34m +dragonfly-client-kxrhh 1/1 Running 0 34m +dragonfly-manager-864774f54d-6t79l 1/1 Running 0 34m +dragonfly-mysql-0 1/1 Running 0 34m +dragonfly-redis-master-0 1/1 Running 0 34m +dragonfly-redis-replicas-0 1/1 Running 0 34m +dragonfly-redis-replicas-1 1/1 Running 0 32m +dragonfly-redis-replicas-2 1/1 Running 0 32m +dragonfly-scheduler-0 1/1 Running 0 34m +dragonfly-seed-client-0 1/1 Running 5 (21m ago) 34m ``` ## containerd 通过 Dragonfly 下载镜像 @@ -142,7 +138,7 @@ dragonfly-seed-peer-2 1/1 Running 0 11s ```shell docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 -``` +```` ### 验证镜像下载成功 @@ -152,13 +148,13 @@ docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ```shell # 获取 Pod Name -export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) +export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=client" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) -# 获取 Peer ID -export PEER_ID=$(kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep "alpine" /var/log/dragonfly/daemon/core.log | awk -F'"peer":"' '{print $2}' | awk -F'"' '{print $1}' | head -n 1) +# 获取 Task ID +export TASK_ID=$(kubectl -n dragonfly-system exec ${POD_NAME} -- sh -c "grep -hoP 'library/alpine.*task_id=\"\K[^\"]+' /var/log/dragonfly/dfdaemon/* | head -n 1") # 查看下载日志 -kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep ${PEER_ID} /var/log/dragonfly/daemon/core.log | grep "peer task done" +kubectl -n dragonfly-system exec -it ${POD_NAME} -- sh -c "grep ${TASK_ID} /var/log/dragonfly/dfdaemon/* | grep 'download task succeeded'" ``` @@ -167,14 +163,11 @@ kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep ${PEER_ID} /var/log/dra ```shell { - "level": "info", - "ts": "2024-03-05 12:06:31.244", - "caller": "peer/peertask_conductor.go:1349", - "msg": "peer task done, cost: 2751ms", - "peer": "10.244.1.2-54896-5c6cb404-0f2b-4ac6-a18f-d74167a766b4", - "task": "0bff62286fe544f598997eed3ecfc8aa9772b8522b9aa22a01c06eef2c8eba66", - "component": "PeerTask", - "trace": "31fc6650d93ec3992ab9aad245fbef71" +2024-04-19T02:44:09.259458Z INFO +download_task: dragonfly-client/src/grpc/dfdaemon_download.rs:276: download task succeeded +host_id="172.18.0.3-kind-worker" +task_id="a46de92fcb9430049cf9e61e267e1c3c9db1f1aa4a8680a048949b06adb625a5" +peer_id="172.18.0.3-kind-worker-86e48d67-1653-4571-bf01-7e0c9a0a119d" } ``` @@ -185,35 +178,20 @@ kubectl -n dragonfly-system exec -it ${POD_NAME} -- grep ${PEER_ID} /var/log/dra 在 `kind-worker` Node 下载 `alpine:3.19` 镜像。 ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -暴露 Jaeger `16686` 端口: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 -``` - -进入 Jaeger 页面 [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search),搜索 Tags 值为 -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"` -Tracing: - -![download-back-to-source-search-tracing](../../resource/getting-started/installation/download-back-to-source-search-tracing.png) -Tracing 详细内容: - -![download-back-to-source-tracing](../../resource/getting-started/installation/download-back-to-source-tracing.png) - -集群内首次回源时,下载 `ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3` 层需要消耗时间为 `2.82s`。 +集群内首次回源时,下载 `alpine:3.19` 镜像需要消耗时间为 `28.82s`。 ### containerd 下载镜像命中 Dragonfly 远程 Peer 的缓存 -删除 Node 为 `kind-worker` 的 dfdaemon, 为了清除 Dragonfly 本地 Peer 的缓存。 +删除 Node 为 `kind-worker` 的 client, 为了清除 Dragonfly 本地 Peer 的缓存。 ```shell # 获取 Pod Name -export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=dfdaemon" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) +export POD_NAME=$(kubectl get pods --namespace dragonfly-system -l "app=dragonfly,release=dragonfly,component=client" -o=jsonpath='{.items[?(@.spec.nodeName=="kind-worker")].metadata.name}' | head -n 1 ) # 删除 Pod kubectl delete pod ${POD_NAME} -n dragonfly-system @@ -230,26 +208,10 @@ docker exec -i kind-worker /usr/local/bin/crictl rmi alpine:3.19 在 `kind-worker` Node 下载 `alpine:3.19` 镜像: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 -``` - -暴露 Jaeger `16686` 端口: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -进入 Jaeger 页面 [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search),搜索 Tags 值为 -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"` -Tracing: - -![hit-remote-peer-cache-search-tracing](../../resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png) - -Tracing 详细内容: - -![hit-remote-peer-cache-tracing](../../resource/getting-started/installation/hit-remote-peer-cache-tracing.png) - -命中远程 Peer 缓存时,下载 `ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3` 层需要消耗时间为 `341.72ms`。 +命中远程 Peer 缓存时,下载 `alpine:3.19` 镜像需要消耗时间为 `12.524s`。 ### containerd 下载镜像命中 Dragonfly 本地 Peer 的缓存 @@ -262,26 +224,10 @@ docker exec -i kind-worker /usr/local/bin/crictl rmi alpine:3.19 在 `kind-worker` Node 下载 `alpine:3.19` 镜像: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -暴露 Jaeger `16686` 端口: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 -``` - -进入 Jaeger 页面 [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search),搜索 Tags 值为 -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"` -Tracing: - -![hit-local-peer-cache-search-tracing](../../resource/getting-started/installation/hit-local-peer-cache-search-tracing.png) - -Tracing 详细内容: - -![hit-local-peer-cache-tracing](../../resource/getting-started/installation/hit-local-peer-cache-tracing.png) - -命中本地 Peer 缓存时下载 `ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3` 层需要消耗时间为 `5.38ms`。 +命中本地 Peer 缓存时下载 `alpine:3.19` 镜像需要消耗时间为 `7.432s`。 ## 预热镜像 @@ -314,7 +260,62 @@ curl --location --request POST 'http://127.0.0.1:8080/oapi/v1/jobs' \ 命令行日志返回预热任务 ID: ```shell -{"id":1,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"task_id":"group_e9a1bc09-b988-4403-bf56-c4dc295b6a76","bio":"","type":"preheat","state":"PENDING","args":{"filteredQueryParams":"","headers":null,"password":"","platform":"","tag":"","type":"image","url":"https://registry-1.docker.io/v2/library/alpine/manifests/3.19","username":""},"result":null,"user_id":0,"user":{"id":0,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"email":"","name":"","avatar":"","phone":"","state":"","location":"","bio":"","configs":null},"seed_peer_clusters":null,"scheduler_clusters":[{"id":1,"created_at":"2024-03-12T08:39:20Z","updated_at":"2024-03-12T08:39:20Z","is_del":0,"name":"cluster-1","bio":"","config":{"candidate_parent_limit":4,"filter_parent_limit":15},"client_config":{"load_limit":200},"scopes":{},"is_default":true,"seed_peer_clusters":null,"schedulers":null,"peers":null,"jobs":null}]} +{ + id: 1, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + task_id: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + bio: '', + type: 'preheat', + state: 'PENDING', + args: { + filteredQueryParams: 'Expires\u0026Signature', + headers: null, + password: '', + pieceLength: 4194304, + platform: '', + tag: '', + type: 'image', + url: 'https://index.docker.io/v2/library/alpine/manifests/3.19', + username: '', + }, + result: null, + user_id: 0, + user: { + id: 0, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + email: '', + name: '', + avatar: '', + phone: '', + state: '', + location: '', + bio: '', + configs: null, + }, + seed_peer_clusters: null, + scheduler_clusters: [ + { + id: 1, + created_at: '2024-04-19T02:24:44Z', + updated_at: '2024-04-19T02:24:44Z', + is_del: 0, + name: 'cluster-1', + bio: '', + config: { candidate_parent_limit: 4, filter_parent_limit: 15 }, + client_config: { load_limit: 200 }, + scopes: {}, + is_default: true, + seed_peer_clusters: null, + schedulers: null, + peers: null, + jobs: null, + }, + ], +} ``` 使用预热任务 ID 轮训查询任务是否成功: @@ -328,29 +329,92 @@ curl --request GET 'http://127.0.0.1:8080/oapi/v1/jobs/1' \ 如果返回预热任务状态为 `SUCCESS`,表示预热成功: ```shell -{"id":1,"created_at":"2024-03-14T08:01:05Z","updated_at":"2024-03-14T08:01:29Z","is_del":0,"task_id":"group_e64477bd-3ec8-4898-bd4d-ce74f0f66564","bio":"","type":"preheat","state":"SUCCESS","args":{"filteredQueryParams":"Expires\u0026Signature","headers":null,"password":"liubo666.","platform":"","tag":"","type":"image","url":"https://index.docker.io/v2/library/alpine/manifests/3.19","username":"zhaoxinxin03"},"result":{"CreatedAt":"2024-03-14T08:01:05.08734184Z","GroupUUID":"group_e64477bd-3ec8-4898-bd4d-ce74f0f66564","JobStates":[{"CreatedAt":"2024-03-14T08:01:05.08734184Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_36d16ee6-dea6-426a-94d9-4e2aaedba97e"},{"CreatedAt":"2024-03-14T08:01:05.092529257Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_253e6894-ca21-4287-8cc7-1b2f5bcd52f5"}],"State":"SUCCESS"},"user_id":0,"user":{"id":0,"created_at":"0001-01-01T00:00:00Z","updated_at":"0001-01-01T00:00:00Z","is_del":0,"email":"","name":"","avatar":"","phone":"","state":"","location":"","bio":"","configs":null},"seed_peer_clusters":[],"scheduler_clusters":[{"id":1,"created_at":"2024-03-14T07:37:01Z","updated_at":"2024-03-14T07:37:01Z","is_del":0,"name":"cluster-1","bio":"","config":{"candidate_parent_limit":4,"filter_parent_limit":15},"client_config":{"load_limit":200},"scopes":{},"is_default":true,"seed_peer_clusters":null,"schedulers":null,"peers":null,"jobs":null}]} +{ + id: 1, + created_at: '2024-04-19T02:42:06Z', + updated_at: '2024-04-19T02:42:27Z', + is_del: 0, + task_id: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + bio: '', + type: 'preheat', + state: 'SUCCESS', + args: { + filteredQueryParams: 'Expires\u0026Signature', + headers: null, + password: '', + pieceLength: 4194304, + platform: '', + tag: '', + type: 'image', + url: 'https://index.docker.io/v2/library/alpine/manifests/3.19', + username: '', + }, + result: { + CreatedAt: '2024-04-19T02:42:06.202315051Z', + GroupUUID: 'group_2bed5b1e-1e36-41d9-b74c-4fd1e10c69ef', + JobStates: [ + { + CreatedAt: '2024-04-19T02:42:06.202315051Z', + Error: '', + Results: [], + State: 'SUCCESS', + TTL: 0, + TaskName: 'preheat', + TaskUUID: 'task_064d25a2-e3e7-4be8-8ca9-cad6bd94ad16', + }, + { + CreatedAt: '2024-04-19T02:42:06.20404751Z', + Error: '', + Results: [], + State: 'SUCCESS', + TTL: 0, + TaskName: 'preheat', + TaskUUID: 'task_7b921739-2b17-475b-87ac-7afc69d917d8', + }, + ], + State: 'SUCCESS', + }, + user_id: 0, + user: { + id: 0, + created_at: '0001-01-01T00:00:00Z', + updated_at: '0001-01-01T00:00:00Z', + is_del: 0, + email: '', + name: '', + avatar: '', + phone: '', + state: '', + location: '', + bio: '', + configs: null, + }, + seed_peer_clusters: [], + scheduler_clusters: [ + { + id: 1, + created_at: '2024-04-19T02:24:44Z', + updated_at: '2024-04-19T02:24:44Z', + is_del: 0, + name: 'cluster-1', + bio: '', + config: { candidate_parent_limit: 4, filter_parent_limit: 15 }, + client_config: { load_limit: 200 }, + scopes: {}, + is_default: true, + seed_peer_clusters: null, + schedulers: null, + peers: null, + jobs: null, + }, + ], +} ``` 在 `kind-worker` Node 下载 `alpine:3.19` 镜像: ```shell -docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 +time docker exec -i kind-worker /usr/local/bin/crictl pull alpine:3.19 ``` -暴露 Jaeger `16686` 端口: - -```shell -kubectl --namespace dragonfly-system port-forward service/dragonfly-jaeger-query 16686:16686 -``` - -进入 Jaeger 页面 [http://127.0.0.1:16686/search](http://127.0.0.1:16686/search),搜索 Tags 值为 -`http.url="https://index.docker.io/v2/library/alpine/blobs/sha256:ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3?ns=docker.io"` -Tracing: - -![hit-preheat-cache-search-tracing](../../resource/getting-started/installation/hit-preheat-cache-search-tracing.png) - -Tracing 详细内容: - -![hit-preheat-cache-tracing](../../resource/getting-started/installation/hit-preheat-cache-tracing.png) - -命中预热缓存时,下载 `ace17d5d883e9ea5a21138d0608d60aa2376c68f616c55b0b7e73fba6d8556a3` 层需要消耗时间为 `854.54ms`。 +命中预热缓存时,下载 `alpine:3.19` 镜像需要消耗时间为 `11.030s`。 diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-search-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-search-tracing.png deleted file mode 100644 index 2f1d97ef..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-search-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-tracing.png deleted file mode 100644 index bfa0e9d7..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/download-back-to-source-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png deleted file mode 100644 index 96d1d955..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-search-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-tracing.png deleted file mode 100644 index e01078bb..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-local-peer-cache-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-search-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-search-tracing.png deleted file mode 100644 index cdafa2a5..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-search-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-tracing.png deleted file mode 100644 index c7db12fc..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-preheat-cache-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png deleted file mode 100644 index 461ddf24..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-search-tracing.png and /dev/null differ diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-tracing.png b/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-tracing.png deleted file mode 100644 index 4dda835b..00000000 Binary files a/i18n/zh/docusaurus-plugin-content-docs/current/resource/getting-started/installation/hit-remote-peer-cache-tracing.png and /dev/null differ