前文回顧:
本系列將介紹如何基於 ACK Fluid 支持和優化混合雲的數據訪問場景,相關文章請參考:
《基於 ACK Fluid 的混合雲優化數據訪問(一):場景與架構》
《基於 ACK Fluid 的混合雲優化數據訪問(二):搭建彈性計算實例與第三方存儲的橋樑》
《基於 ACK Fluid 的混合雲優化數據訪問(三):加速第三方存儲的讀訪問,降本增效並行》
在前一篇文章《基於 ACK Fluid 的混合雲優化數據訪問(三):加速第三方存儲的讀訪問,降本增效並行》中,介紹如何加速第三方存儲訪問,實現更好的性能,更低的成本同時降低對專線穩定性的依賴。
還有一些客戶的場景下,出於歷史原因和容器存儲接口開發維護的成本,並沒有選擇使用標準的 CSI 接口,而是使用非容器化的手段,比如自動化腳本。但是一旦擁抱雲,就需要考慮如何和基於標準接口的雲服務對接的問題。
而本文將重點介紹如何通過 ACK Fluid 實現第三方存儲主機目錄掛載 Kubernetes 化,更加標準並加速提效。
概述
有許多企業由於歷史原因和技術雲下存儲選擇沒有支持 CSI 協議,只支持以主機目錄的方式通過 ansible 等運維工具掛載,一方面存在與 Kubernetes 標準化平臺的對接的挑戰,另一方面也需要應對與上篇文章類似的性能和成本的問題:
- 缺少標準化,上雲困難:主機目錄掛載的模式由於無法被 Kubernetes 感知和調度,很難被容器化工作負載使用和管理。
- 缺少數據隔離性:由於整個目錄都被掛載到主機上,並被所有的工作負載訪問,導致數據全局可見。
- 數據訪問在成本,性能和可用性上有何場景 2 相同的需求,因此不再贅述。
ACK Fluid 提供了基於 JindoRuntime 的 PV 主機目錄通用加速能力[1],直接支持主機目錄掛載可以原生,簡單,快速,安全的獲得通過分佈式緩存實現數據訪問加速能力。
1. 將傳統架構遷移到雲原生適配架構:將主機目錄掛載模式變化爲 Kubernetes 可以管理的 CSI 協議下的 PV 存儲卷,方便通過標準化協議與公共雲相結合。
2. 傳統架構遷移低成本:只需要實現主機目錄掛載可以立即使用,無需額外開發;只需要在部署時刻將 Hostpath 協議轉換成 PV 存儲卷。
3. 數據可隔離:通過 Fluid 的子數據集模式可以隔離不同用戶對於線下存儲不同目錄的可見性。
4. 可以提供和《基於 ACK Fluid 的混合雲優化數據訪問(三):加速第三方存儲的讀訪問,降本增效並行》一樣的性能,成本,自動化和無緩存數據落盤的優點。
總結:ACK Fluid 爲雲上計算訪問第三方存儲的主機目錄掛載方式提供了開箱即用,高性能,低成本,自動化和無數據落盤的收益。
演示
1. 前提條件
- 已創建 ACK Pro 版集羣,且集羣版本爲 1.18 及以上。具體操作,請參見創建 ACK Pro 版集羣[2]。
- 已安裝雲原生 AI 套件並部署 ack-fluid 組件。重要:若您已安裝開源 Fluid,請卸載後再部署 ack-fluid 組件。
- 未安裝雲原生 AI 套件:安裝時開啓 Fluid 數據加速。具體操作,請參見安裝雲原生 AI 套件[3]。
- 已安裝雲原生 AI 套件:在容器服務管理控制檯的雲原生 AI 套件頁面部署 ack-fluid。
- 已通過 kubectl 連接 ACK 集羣。具體操作,請參見通過 kubectl 工具連接集羣[4]。
- 已創建需要訪問存儲系統對應的 PV 存儲卷和 PVC 存儲卷聲明。在 Kubernetes 環境中,不同的存儲系統有不同的存儲卷創建方式,爲保證存儲系統與 Kubernetes 集羣的連接穩定,請根據對應存儲系統的官方文檔進行準備。
2. 準備主機目錄掛載點
本示例中通過 sshfs 模擬第三方存儲通過 fluid 轉化爲數據卷聲明,並且對其實現訪問加速。
2.1 首先登錄三臺機器 192.168.0.1,192.168.0.2,192.168.0.3, 分別安裝 sshfs 服務,在本例子中以 CentOS 爲例,執行如下命令。
$ sudo yum install sshfs -y
2.2 登錄 sshfs 服務器 192.168.0.1,執行如下命令,在 /mnt 目錄下創建一個新的子目錄作爲主機目錄掛載點,並且創建一個測試文件。
$ mkdir /mnt/demo-remote-fs
$ cd /mnt/demo-remote-fs
$ dd if=/dev/zero of=/mnt/demo-remote-fs/allzero-demo count=1024 bs=10M
2.3 執行如下命令,爲 sshfs 的客戶端 192.168.0.2 和 192.168.0.3 兩個節點創建相應的主機目錄。
$ mkdir /mnt/demo-remote-fs
$ sshfs 192.168.0.1:/mnt/demo-remote-fs /mnt/demo-remote-fs
$ ls /mnt/demo-remote-fs
2.4 執行如下命令,爲 192.168.0.2 和 192.168.0.3 節點打標籤。標籤 demo-remote-fs=true 用於設置 JindoRuntime 的 Master 和 Worker 組件的節點調度約束條件。
$ kubectl label node 192.168.0.2 demo-remote-fs=true$
kubectl label node 192.168.0.3 demo-remote-fs=true
2.5 選擇 192.168.0.2 執行如下命令,訪問數據,評估文件訪問性能,拷貝 10G 文件的時間需要 1m5.889s。
$ ls -lh /mnt/demo-remote-fs/
total 10G
-rwxrwxr-x 1 root root 10G Aug 13 10:07 allzero-demo
$ time cat /mnt/demo-remote-fs/allzero-demo > /dev/null
real 1m5.889s
user 0m0.086s
sys 0m3.281s
3. 創建 Fluid Dataset 和 JindoRuntime
使用如下 YAML,創建 dataset.yaml 文件。
下方 dataset.yaml 配置文件中包含兩個待創建的 Fluid 資源對象,分別是 Dataset 和 JindoRuntime。
- Dataset:所需掛載的主機目錄信息。
- JindoRuntime:待啓動的 JindoFS 分佈式緩存系統配置,包括緩存系統 Worker 組件副本數,以及每個 Worker 組件最大可用的緩存容量等。
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: hostpath-demo-dataset
spec:
mounts:
- mountPoint: local:///mnt/demo-remote-fs
name: data
path: /
accessModes:
- ReadOnlyMany
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
name: hostpath-demo-dataset
spec:
master:
nodeSelector:
demo-remote-fs: "true"
worker:
nodeSelector:
demo-remote-fs: "true"
fuse:
nodeSelector:
demo-remote-fs: "true"
replicas: 2
tieredstore:
levels:
- mediumtype: MEM
path: /dev/shm
quota: 10Gi
high: "0.99"
low: "0.99"
配置文件中資源對象的詳細參數說明如下。
3.1 執行如下命令,創建 Dataset 和 JindoRuntime 資源對象。
$ kubectl create -f dataset.yaml
3.2 執行如下命令,查看 Dataset 的部署情況。
$ kubectl get dataset hostpath-demo-dataset
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
hostpath-demo-dataset 10.00GiB 0.00B 20.00GiB 0.0% Bound 47s
3.3 Dataset 處於 Bound 狀態,表明 JindoFS 緩存系統已在集羣內正常啓動,應用 Pod 可正常訪問 Dataset 中定義的數據。
4. 創建 DataLoad 執行緩存預熱
由於首次訪問無法命中數據緩存,可能導致應用 Pod 的數據訪問效率較低。Fluid 提供了 DataLoad 緩存預熱操作提升首次數據訪問的效率。
4.1 創建 dataload.yaml 文件,代碼示例如下。
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: dataset-warmup
spec:
dataset:
name: hostpath-demo-dataset
namespace: default
loadMetadata: true
target:
- path: /
replicas: 1
上述資源對象的詳細參數說明如下所示。
4.2 執行如下命令,創建 DataLoad 對象。
$ kubectl create -f dataload.yaml
4.3 執行如下命令,查看 DataLoad 狀態。
$ kubectl get dataload dataset-warmup
預期輸出:
NAME DATASET PHASE AGE DURATION
dataset-warmup hostpath-demo-dataset Complete 96s 1m2s
4.4 執行如下命令,查看數據緩存狀態。
$ kubectl get dataset
預期輸出:
NAME UFS TOTAL SIZE CACHED CACHE CAPACITY CACHED PERCENTAGE PHASE AGE
hostpath-demo-dataset 10.00GiB 10.00GiB 20.00GiB 100.0% Bound 157m
DataLoad 緩存預熱操作完成後,數據集的已緩存數據量 CACHED 已更新爲整個數據集的大小,代表整個數據集已被緩存,緩存百分比 CACHED PERCENTAGE 爲 100.0%。
5. 查看數據預熱後的訪問性能
5.1 使用如下 YAML,創建 pod.yaml 文件,並修改 YAML 文件中的 claimName 名稱與本例子中已創建的 Dataset 名稱相同。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
command:
- "bash"
- "-c"
- "sleep inf"
volumeMounts:
- mountPath: /data
name: data-vol
volumes:
- name: data-vol
persistentVolumeClaim:
claimName: hostpath-demo-dataset # 名稱需要與Dataset相同。
5.2 執行如下命令,創建應用 Pod。
kubectl create -f pod.yaml
5.3 執行如下命令,登錄 Pod 訪問數據。
$ kubectl exec -it nginx bash
預期輸出,可以拷貝 10G 文件的時間需要 0m8.629s,是 sshfs 直接遠程拷貝耗時(1m5.889s)的 1/8:
root@nginx:/# ls -lh /data
total 10G
-rwxrwxr-x 1 root root 10G Aug 13 10:07 allzero-demo
root@nginx:/# time cat /data/allzero-demo > /dev/null
real 0m8.629s
user 0m0.031s
sys 0m3.594s
5.4 清理應用 Pod
$ kubectl delete po nginx
相關鏈接:
[1] PV 主機目錄通用加速能力
[2] 創建 ACK Pro 版集羣
[3] 安裝雲原生 AI 套件
[4] 通過 kubectl 工具連接集羣
作者:車漾
點擊立即免費試用雲產品 開啓雲上實踐之旅!
本文爲阿里雲原創內容,未經允許不得轉載。