基於 ACK Fluid 的混合雲優化數據訪問(四):將第三方存儲目錄掛載到 Kubernetes,提升效率和標準化

前文回顧:

本系列將介紹如何基於 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 主機目錄通用加速能力

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/accelerate-pv-storage-volume-data-access

[2] 創建 ACK Pro 版集羣

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/create-an-ack-managed-cluster-2#task-skz-qwk-qfb

[3] 安裝雲原生 AI 套件

https://help.aliyun.com/zh/ack/cloud-native-ai-suite/user-guide/deploy-the-cloud-native-ai-suite#task-2038811

[4] 通過 kubectl 工具連接集羣

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/obtain-the-kubeconfig-file-of-a-cluster-and-use-kubectl-to-connect-to-the-cluster#task-ubf-lhg-vdb

作者:車漾

點擊立即免費試用雲產品 開啓雲上實踐之旅!

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章