diff --git a/docs/getting-started/installation/helm-charts.md b/docs/getting-started/installation/helm-charts.md index f5793f7e..f749d0f6 100644 --- a/docs/getting-started/installation/helm-charts.md +++ b/docs/getting-started/installation/helm-charts.md @@ -51,7 +51,8 @@ Pull Dragonfly latest images: ```shell docker pull dragonflyoss/scheduler:latest docker pull dragonflyoss/manager:latest -docker pull dragonflyoss/dfdaemon:latest +docker pull dragonflyoss/client:latest +docker pull dragonflyoss/dfinit:latest ``` Kind cluster loads Dragonfly latest images: @@ -59,7 +60,8 @@ 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 +kind load docker-image dragonflyoss/client:latest +kind load docker-image dragonflyoss/dfinit:latest ``` ## Create Dragonfly cluster based on helm charts {#create-dragonfly-cluster-based-on-helm-charts} @@ -68,15 +70,41 @@ Create the Helm Charts configuration file `values.yaml`, and set the container r 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: @@ -85,9 +113,9 @@ Create a Dragonfly cluster using the configuration file: ```shell $ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/ -$ helm install --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly -f values.yaml +$ helm install --wait --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 +134,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 +142,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 +171,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 +186,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 +201,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 +228,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 +248,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 -``` - -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-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 +285,11 @@ 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_2717f455-ff0a-435f-a3a7-672828d15a2a","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 +303,18 @@ 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:06Z","is_del":0,"task_id":"group_2717f455-ff0a-435f-a3a7-672828d15a2a","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_2717f455-ff0a-435f-a3a7-672828d15a2a","JobStates":[{"CreatedAt":"2024-04-19T02:42:06.202315051Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_a3ca085c-d80d-41e5-9e91-18b910c6653f"},{"CreatedAt":"2024-04-18T08:51:55.326531846Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_b006e4dc-6ed3-4bc2-98f6-86b0234e2d6d"}],"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..46ed1048 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 @@ -46,20 +46,22 @@ kubectl config use-context kind-kind ## Kind 加载 Dragonfly 镜像 -下载 Dragonfly Latest 镜像: +下载 Dragonfly latest 镜像: ```shell docker pull dragonflyoss/scheduler:latest docker pull dragonflyoss/manager:latest -docker pull dragonflyoss/dfdaemon:latest +docker pull dragonflyoss/client:latest +docker pull dragonflyoss/dfinit:latest ``` -Kind 集群加载 Dragonfly 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 +kind load docker-image dragonflyoss/client:latest +kind load docker-image dragonflyoss/dfinit:latest ``` ## 基于 Helm Charts 创建 Dragonfly 集群 @@ -67,15 +69,41 @@ kind load docker-image dragonflyoss/dfdaemon:latest 创建 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: @@ -84,9 +112,9 @@ jaeger: ```shell $ helm repo add dragonfly https://dragonflyoss.github.io/helm-charts/ -$ helm install --create-namespace --namespace dragonfly-system dragonfly dragonfly/dragonfly -f values.yaml +$ helm install --wait --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 +133,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 +158,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 +168,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 +183,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 +198,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 -``` - -暴露 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: - -![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 +228,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 +244,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-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 +280,11 @@ 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_2717f455-ff0a-435f-a3a7-672828d15a2a","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 +298,17 @@ 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:06Z","is_del":0,"task_id":"group_2717f455-ff0a-435f-a3a7-672828d15a2a","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_2717f455-ff0a-435f-a3a7-672828d15a2a","JobStates":[{"CreatedAt":"2024-04-19T02:42:06.202315051Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_a3ca085c-d80d-41e5-9e91-18b910c6653f"},{"CreatedAt":"2024-04-18T08:51:55.326531846Z","Error":"","Results":[],"State":"SUCCESS","TTL":0,"TaskName":"preheat","TaskUUID":"task_b006e4dc-6ed3-4bc2-98f6-86b0234e2d6d"}],"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 -``` - -暴露 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-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