Fluid是一個開源的Kubernetes原生分布式資料集編排和加速引擎,主要服務於雲原生情境下的資料密集型應用。Fluid可以通過管理和調度底層緩衝Runtime實現資料集的可見度、Auto Scaling和資料移轉。本文以JindoFS為例示範如何定時資料載入。
前提條件
已建立ACK託管叢集Pro版,且叢集版本為1.18及以上。具體操作,請參見建立ACK叢集Pro版。
已安裝雲原生AI套件並部署ack-fluid組件。
重要若您已安裝開源Fluid,請卸載後再部署ack-fluid組件。
需確保ack-fluid版本為1.0.3。
未安裝雲原生AI套件:安裝時開啟Fluid。具體操作,請參見安裝雲原生AI套件。
已安裝雲原生AI套件:在Container Service管理主控台的雲原生AI套件頁面部署ack-fluid。
已通過kubectl串連Kubernetes叢集。具體操作,請參見通過kubectl工具串連叢集。
步驟一:準備OSS Bucket的資料
執行以下命令,下載一份測試資料。
wget https://archive.apache.org/dist/hbase/2.5.2/RELEASENOTES.md安裝ossutil,並建立Bucket。具體操作,請參見安裝ossutil。
執行以下命令,將下載的測試資料上傳到阿里雲OSS對應的Bucket上。
ossutil64 cp RELEASENOTES.md oss://<bucket>/<path>/RELEASENOTES.md
步驟二:建立Dataset和JindoRuntime
建立一個
mySecret.yaml檔案,用於儲存OSS的accessKeyId和accessKeySecret。YAML樣本如下所示。apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: ****** # 請輸入accessKeyId。 fs.oss.accessKeySecret: ****** # # 請輸入accessKeySecret。執行以下命令,產生Secret。
kubectl create -f mySecret.yaml預期輸出:
secret/mysecret created建立一個
dataset.yaml檔案,用於建立Dataset。執行以下命令,通過部署
dateset.yaml建立JindoRuntime和Dataset。kubectl create -f dataset.yaml預期輸出:
dataset.data.fluid.io/demo created jindoruntime.data.fluid.io/demo created執行以下命令,查看Dataset的部署情況。
kubectl get dataset預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 0.00B 10.00GiB 0.0% Bound 2m7s
步驟三:建立支援定時啟動並執行Dataload
建立一個
dataload.yaml檔案。執行以下命令,通過部署
dataload.yaml來建立Dataload任務。kubectl apply -f dataload.yaml預期輸出:
dataload.data.fluid.io/cron-dataload created執行以下命令,查看Dataload狀態。
kubectl get dataload如下所示,當
PHASE的狀態為Complete時,表明資料已載入完成,可進入下一步操作。NAME DATASET PHASE AGE DURATION cron-dataload demo Complete 68s 8s執行以下命令,查看當前Dataset狀態。
kubectl get dataset預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 588.90KiB 10.00GiB 100.0% Bound 5m50s結果輸出表明,OSS中的檔案已經全部載入到緩衝。
步驟四:建立應用程式容器訪問OSS中的資料
建立一個
app.yaml檔案,使用應用程式容器訪問RELEASENOTES.md檔案。執行以下命令,建立應用程式容器。
kubectl create -f app.yaml預期輸出:
pod/nginx created等待應用程式容器就緒後,執行以下命令,查看OSS中的資料。
kubectl exec -it nginx -- ls -lh /data預期輸出:
total 589K -rwxrwxr-x 1 root root 589K Jul 31 04:20 RELEASENOTES.md執行以下命令,將字串
"hello, crondataload."寫入RELEASENOTES.md檔案中。echo "hello, crondataload." >> RELEASENOTES.md執行以下檔案,重新上傳
RELEASENOTES.md檔案到OSS。ossutil64 cp RELEASENOTES.md oss://<bucket-name>/<path>/RELEASENOTES.md按下確認鍵
y後,預期輸出:cp: overwrite "oss://<bucket-name>/<path>/RELEASENOTES.md"(y or N)? y Succeed: Total num: 1, size: 21. OK num: 1(upload 1 files). average speed 0(byte/s) 81.827978(s) elapsed執行以下命令,查看Dataload作業運行情況。
kubectl describe dataload cron-dataload預期輸出:
... Status: Conditions: Last Probe Time: 2023-08-24T06:44:08Z Last Transition Time: 2023-08-24T06:44:08Z Status: True Type: Complete Duration: 8s Last Schedule Time: 2023-08-24T06:44:00Z # 為上一次Dataload作業的調度時間。 Last Successful Time: 2023-08-24T06:44:08Z # 為上一次Dataload作業的完成時間。 Phase: Complete ...執行以下命令,查看當前Dataset狀態。
kubectl get dataset預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE demo 588.90KiB 1.15MiB 10.00GiB 100.0% Bound 10m預期輸出表明,更新後的檔案已經載入到了緩衝。
執行以下命令,在應用程式容器中查看更新後的檔案。
kubectl exec -it nginx -- tail /data/RELEASENOTES.md預期輸出:
hello, crondataload.輸出結果表明,應用程式容器已經可以訪問更新後的檔案。
(可選)步驟五:環境清理
若無需使用該資料加速功能時,請清理環境。
執行以下命令,刪除JindoRuntime和應用程式容器。
kubectl delete -f app.yaml
kubectl delete -f dataset.yaml預期輸出:
pod "nginx" deleted
dataset.data.fluid.io "demo" deleted
jindoruntime.data.fluid.io "demo" deleted