Fluid是一個開源的Kubernetes原生的分布式資料集編排和加速引擎,主要服務於雲原生情境下的資料密集型應用,例如巨量資料應用、AI應用等。JindoRuntime來源於阿里雲EMR團隊JindoFS,是基於C++實現的支撐Dataset資料管理和緩衝的執行引擎,支援OSSObject Storage Service。Fluid通過管理和調度JindoRuntime實現資料集的可見度、Auto Scaling和資料移轉。本文介紹如何在註冊叢集中使用Fluid加速OSS檔案訪問。
實現原理
通過Fluid加速OSS檔案訪問的實現原理如下圖所示。
前提條件
已通過Container ServiceKubernetes版接入一個註冊的Kubernetes叢集。具體操作,請參見通過控制台建立註冊叢集、通過onectl建立註冊叢集。
已通過kubectl串連註冊叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
已開通阿里雲Object Storage Service服務,且Bucket已建立。具體操作,請參見開通OSS服務和建立儲存空間。
步驟一:安裝ack-fluid組件
通過onectl安裝
在本地安裝配置onectl。具體操作,請參見通過onectl管理註冊叢集。
執行以下命令,安裝ack-fluid組件。
onectl addon install ack-fluid --set pullImageByVPCNetwork=false
pullImageByVPCNetwork
:為選擇性參數,設定是否使用VPC網路拉取組件鏡像。預期輸出:
Addon ack-fluid, version **** installed.
通過控制台安裝
登入Container Service管理主控台,在左側導覽列選擇 。
在應用目錄頁面,搜尋並選中ack-fluid。
在頁面右上方,單擊一鍵部署。
在建立面板中,選擇叢集,命名空間和發布名稱可保持系統預設,然後單擊下一步。
選擇Chart 版本為當前最新版本,設定組件相關參數,然後單擊確定。
步驟二:準備OSS Bucket資料
步驟三:為本地叢集節點打上標籤
執行以下命令,為本地IDC叢集中的所有節點打上demo-oss=true
的標籤,該標籤用於設定JindoRuntime的Master和Worker組件的節點調度約束條件。
kubectl label node **** demo-oss=true
步驟四:建立Dataset和JindoRuntime
使用以下內容,建立mySecret.yaml檔案。
該檔案用於儲存OSS的fs.oss.accessKeyId和fs.oss.accessKeySecret,需要在建立Dataset之前建立。
apiVersion: v1 kind: Secret metadata: name: mysecret stringData: fs.oss.accessKeyId: **** fs.oss.accessKeySecret: ****
執行以下命令,部署mySecret檔案產生Secret。
kubectl create -f mySecret.yaml
Kubernetes會對已建立的Secret使用加密編碼,避免將其明文暴露。
使用以下內容,建立resource.yaml檔案。該YAML檔案包含Dataset和JindoRuntime兩部分內容。
Dataset:用於描述遠端儲存資料集和UFS的資訊。
JindoRuntime:用於啟動一個JindoFS的叢集來提供快取服務。
apiVersion: data.fluid.io/v1alpha1 kind: Dataset metadata: name: hadoop spec: mounts: - mountPoint: oss://<oss_bucket>/<bucket_dir> options: fs.oss.endpoint: <oss_endpoint> name: hadoop path: "/" encryptOptions: - name: fs.oss.accessKeyId valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeyId - name: fs.oss.accessKeySecret valueFrom: secretKeyRef: name: mysecret key: fs.oss.accessKeySecret --- apiVersion: data.fluid.io/v1alpha1 kind: JindoRuntime metadata: name: hadoop spec: # 保證緩衝運行時只運行在本地叢集的節點中。 master: nodeSelector: demo-oss: "true" worker: nodeSelector: demo-oss: "true" fuse: nodeSelector: demo-oss: "true" replicas: 2 tieredstore: levels: - mediumtype: HDD path: /mnt/disk1 quota: 100G high: "0.99" low: "0.8"
類別
參數
說明
Dataset
mountPoint
oss://<oss_bucket>/<bucket_dir>
為掛載UFS的路徑,路徑中不需要包含Endpoint資訊。fs.oss.endpoint
OSS Bucket的Endpoint資訊,公網或私網地址皆可。
JindoRuntime
replicas
建立JindoFS叢集的Worker數量。
mediumtype
緩衝類型。定義建立JindoRuntime模板範例時,JindoFS暫時僅支援HDD、SSD、MEM的其中一種緩衝類型。
path
儲存路徑。暫時只支援單個路徑。當選擇MEM做緩衝時,需指定一個本地路徑用於儲存Log等檔案。
quota
緩衝最大容量,單位為GB。
high
儲存容量上限大小。
low
儲存容量下限大小。
執行以下命令,建立JindoRuntime和Dataset。
kubectl create -f resource.yaml
執行以下命令,查看Dataset的部署情況。
kubectl get dataset hadoop
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 210MiB 0.00B 100.00GiB 0.0% Bound 1h
執行以下命令,查看JindoRuntime的部署情況。
kubectl get jindoruntime hadoop
預期輸出:
NAME MASTER PHASE WORKER PHASE FUSE PHASE AGE hadoop Ready Ready Ready 4m45s
執行以下命令,查看PV和PVC狀態。
kubectl get pv,pvc
預期輸出:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/hadoop 100Gi RWX Retain Bound default/hadoop 52m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/hadoop Bound hadoop 100Gi RWX 52m
預期輸出表明,Dataset和JindoRuntime已建立成功。
步驟五:建立容器應用體驗加速效果
您可以通過建立容器應用來使用JindoFS加速服務,或者提交機器學習作業來體驗相關功能。本文以建立一個容器應用多次訪問同一資料,並通過對比訪問時間為例展示JindoRuntime的加速效果。
使用以下內容,建立app.yaml檔案。
apiVersion: v1 kind: Pod metadata: name: demo-app spec: containers: - name: demo image: fluidcloudnative/serving volumeMounts: - mountPath: /data name: hadoop volumes: - name: hadoop persistentVolumeClaim: claimName: hadoop
執行以下命令,建立容器應用。
kubectl create -f app.yaml
執行以下命令,查看檔案大小。
kubectl exec -it demo-app -- bash du -sh /data/spark-3.0.1-bin-hadoop2.7.tgz
預期輸出:
209.7M /data/spark-3.0.1-bin-hadoop2.7.tgz
執行如下命令,查看檔案的拷貝時間。
time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /test
預期輸出:
real 1m2.374s user 0m0.000s sys 0m0.256s
預期輸出表明,檔案拷貝時間消耗了62s。
執行以下命令,查看此時Dataset的緩衝情況。
kubectl get dataset hadoop
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE hadoop 209.74MiB 209.74MiB 100.00GiB 100.0% Bound 1h
預期輸出表明,209.7 MiB的資料已經緩衝到了本地。
執行以下命令,刪除之前的容器應用,建立相同的容器應用。
說明此操作是為了避免其他因素(例如Page Cache)對結果造成影響。
kubectl delete -f app.yaml && kubectl create -f app.yaml
執行如下命令,查看檔案拷貝時間。
kubectl exec -it demo-app -- bash time cp /data/spark-3.0.1-bin-hadoop2.7.tgz /test
預期輸出:
real 0m3.454s user 0m0.000s sys 0m0.268s
預期輸出表明,檔案的拷貝時間為3s,拷貝時間縮短至原來的十八分之一。主要原因是由於檔案已經被JindoFS緩衝,所以第二次訪問所需時間遠小於第一次。
(可選)步驟六:清理環境
當不再使用資料加速功能時,您需要執行以下命令清理環境。
執行以下命令,刪除JindoRuntime和應用程式容器。
kubectl delete jindoruntime hadoop
執行以下命令,刪除Dataset。
kubectl delete dataset hadoop