CNFS檔案儲存體計算端分布式緩衝可提供多連結訪問、中繼資料快取、分布式資料緩衝等加速能力,並提供端側效能監控、QoS能力。本文介紹如何在ACK叢集中開啟CNFS NAS計算端分布式緩衝,並通過分布式緩衝功能加速讀取資料。
索引
前提條件
分布式緩衝支援的作業系統為Alibaba Cloud Linux 2,核心版本為v4.19.91-23至v4.19.91-26版本。
已建立Kubernetes叢集,Kubernetes版本為v1.20及以上,且儲存外掛程式選擇為CSI。具體操作,請參見建立Kubernetes託管版叢集。
CSI-Plugin和CSI-Provisioner組件版本不低於v1.22.11-abbb810e-aliyun。關於升級CSI-Plugin和CSI-Provisioner組件的操作,請參見安裝與升級CSI組件。
storage-operator組件版本不低於v1.22.86-041b094-aliyun。關於升級storage-operator組件的操作,請參見管理組件。
已通過kubectl工具串連Kubernetes叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
分布式緩衝關鍵效能指標
指標 | 測試情境① | 未開啟分布式緩衝 | 開啟分布式緩衝 |
中繼資料效能 | 100萬檔案目錄遍曆耗時 | 18min | 小於60s |
建立寫入4 KB檔案耗時 | 3000μs | 小於200μs | |
重複讀取4 KB檔案耗時 | 400μs | 小於100μs | |
吞吐效能 | 單節點讀寫吞吐效能② | 200~500 MB/s | 大於800 MB/s |
綜合情境效能 | 5000張150 KB圖片解壓縮耗時 | 52s | 約15s |
構建Redis專案耗時 | 27s | 約21s |
本文以上表格提供的資料僅為理論值(參考值),實際資料以您的作業環境為準。
註解①:測試資料的ECS機型為ecs.hfg6.4xlarge,測試環境的差異可能導致效能資料有一定偏差。
註解②:ECS網路頻寬和NAS檔案系統規格會影響單節點讀寫吞吐效能。
步驟一:使用分布式緩衝掛載NAS檔案系統
執行以下命令,在叢集中建立並部署csi-plugin的ConfigMap,安裝加速外掛程式。
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cnfs-client-properties: | nas-efc=true nas-efc-cache: | enable=true container-number=3 volume-type=memory volume-size=15Gi node-selector: | cache=true EOF
參數
說明
cnfs-client-properties
分布式緩衝的緩衝開關。當配置
cnfs-cache-properties. enable=true
時,表示開啟分布式緩衝。nfs-efc-cache.
container-number
當開啟分布式緩衝時需要配置。
緩衝的DaemonSet的容器數量,當緩衝有效能瓶頸時,可以增加容器數量。
nfs-efc-cache.
volume-type
當開啟分布式緩衝時需要配置。
緩衝容器EmptyDir使用的介質。
Disk:磁碟。
Memory:記憶體。
nfs-efc-cache.
volume-size
當開啟分布式緩衝時需要配置。表示快取資料卷Volume的總大小,單位:GiB。
cnfs-client-properties
安裝分布式緩衝的相關依賴,則需要配置
cnfs-client-properties. enable=true
。node-selector
緩衝的DaemonSet通過Label進行調度,如果不配置,則所有節點都會部署緩衝。
重要使用磁碟和記憶體時,會使用節點的資料盤和記憶體資源,請確保不影響業務運行。
本樣本部署了分布式緩衝的DaemonSet,緩衝中有3個Container,在緩衝Pod容器內每個Container掛載5 GiB的tmpfs卷,並且只調度到帶有
cache=true
標籤的節點上。
ConfigMap配置完成後,會根據已配置的ConfigMap自動部署緩衝的DaemonSet以及Service。
執行以下命令,重啟CSI-Plugin組件,安裝相關依賴。
kubectl get pod -nkube-system -owide | grep csi-plugin | awk '{print $1}' | xargs kubectl -nkube-system delete pod
執行以下命令,為CNFS的檔案儲存體開啟分布式緩衝。
建立一個CNFS託管NAS檔案系統,StatefulSet通過使用動態儲存裝置卷的方式掛載分布式緩衝,使用busybox鏡像,Pod啟動時會通過
dd
命令將1 G大小的檔案寫入/data
下面,1 G檔案後續用於測試緩衝是否生效。執行以下命令,確認分布式緩衝是否掛載成功。
kubectl exec cnfs-nas-sts-0 -- mount | grep /data
預期輸出:
xxx.cn-xxx.nas.aliyuncs.com:/nas-6b9d1397-6542-4410-816b-4dfd0633****:2fMaQdxU on /data type alifuse.aliyun-alinas-eac (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)
輸出顯示有掛載點,說明分布式緩衝已掛載成功。
執行以下命令,確認分布式緩衝的DaemonSet是否啟動。
kubectl get ds/cnfs-cache-ds -n kube-system -owide
預期輸出:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE CONTAINERS IMAGES SELECTOR cnfs-cache-ds 3 3 3 3 3 <none> 19d alinas-dadi-container registry-vpc.cn-shenzhen.aliyuncs.com/acs/nas-cache:20220420 app=cnfs-cache-ds
本樣本的叢集有3個節點,DaemonSet的3個Pod均處於可用狀態,說明分布式緩衝的DaemonSet已經啟動完成。
執行以下命令,確認分布式緩衝的Service是否實現服務發現。
kubectl get ep cnfs-cache-ds-service -n kube-system -owide
預期輸出:
NAME ENDPOINTS AGE cnfs-cache-ds-service 10.19.1.130:6500,10.19.1.40:6500,10.19.1.66:6500 19d
Service已經發現後端緩衝Pod對應的EndPoints為10.19.1.130、10.19.1.40、10.19.1.66,連接埠為6500。
步驟二:測試緩衝是否生效
執行以下命令,將寫入到
/data
中的1 G的tmpfile檔案複製到/
下,查看耗時時間。kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /
預期輸出:
real 0m 5.66s user 0m 0.00s sys 0m 0.75s
可以看到:未開啟分布式緩衝時,拷貝時間不變,保持約5s左右。
重複執行以下命令,查看耗時。
kubectl exec cnfs-nas-sts-0 -- time cp /data/1G.tmpfile /
預期輸出:
real 0m 0.79s user 0m 0.00s sys 0m 0.58s
可以看到:對多次訪問的檔案,拷貝讀加速提升了6~7倍。