在計算與存儲分離的架構下,使用Fluid數據緩存技術,能夠有效解決在Kubernetes集群中訪問存儲系統數據時容易出現的高延遲及帶寬受限問題,從而提升數據處理效率。本文從性能維度、穩定性維度、讀寫一致性維度介紹如何使用Fluid數據緩存策略。
使用場景
緩存技術依賴局部性原理提升多次數據訪問的平均性能,許多數據密集型應用場景均存在這樣的局部性特征,例如:
AI模型訓練場景:AI模型訓練過程中,相同的數據集將被按輪次(Epoch)周期性讀取,用于AI模型的迭代收斂過程。
AI模型推理服務啟動場景:當發布或更新某AI模型推理服務時,大量推理服務實例被并發拉起,各推理服務實例并發讀取存儲系統中相同的模型文件,并加載到推理服務實例的GPU內存中。
大數據分析場景:在大數據分析過程中,部分數據會被一個或多個數據分析任務共同使用。例如:在使用SparkSQL分析用戶畫像和商品信息時,訂單數據將被這些分析任務共同使用。
因此,以上這些場景,均可以使用Fluid數據緩存技術提升數據處理效率。
性能維度的Fluid數據緩存優化策略
為了使用Fluid構建的數據緩存有效提升數據訪問的效率,您需要根據業務的性能需求以及預算成本合理配置Fluid數據緩存使用的ECS機型、緩存介質、緩存系統參數配置、緩存管理策略等。另外,還需要考慮客戶端數據讀取方式對性能的影響。您可以通過上述策略的綜合運用,有效提升Fluid數據緩存性能表現,本節將詳細介紹這幾種策略。
策略一:選擇緩存系統ECS機型
性能估算
分布式文件緩存系統能夠聚合多個節點上的存儲資源和帶寬資源,為上層應用提供更大的緩存容量和更高的可用帶寬。關于緩存容量、可用帶寬以及應用數據訪問的最大帶寬的理論上限值可根據以下公式估算:
緩存可用容量 = 每個分布式緩存Worker Pod提供的緩存容量 * 分布式緩存Worker Pod副本數
緩存可用帶寬 = 分布式緩存Worker Pod副本數 * min{Worker Pod所在ECS節點的最大可用帶寬, Worker Pod使用的緩存介質I/O吞吐}。另外,緩存可用帶寬不代表數據訪問過程中的實際帶寬,數據訪問過程的實際帶寬受客戶端ECS節點可用帶寬,以及數據訪問模式(順序讀、隨機讀)影響。
應用Pod數據訪問過程的理論最大帶寬 = min{應用Pod所在ECS節點的可用帶寬,緩存可用帶寬}。另外,當多個應用Pod并發訪問數據時,緩存可用帶寬將被這些應用Pod共享占用。
示例
例如,在ACK集群中擴容2臺ecs.g7nex.8xlarge
規格的ECS實例用于構建分布式緩存集群,分布式緩存集群包含2個緩存Worker Pod,每個Pod設置的緩存容量為100 GiB內存,兩個Pod分別運行于兩臺ECS實例上。應用Pod部署于一臺ecs.gn7i-c8g1.2xlarge
(8 vCPU,30 GiB內存,16 Gbps帶寬)規格的ECS實例,其緩存容量、可用帶寬以及最大帶寬的理論值如下所示:
緩存可用容量 = 100GiB * 2 = 200 GiB
緩存可用帶寬 = 2 * min{40 Gbps, 內存訪問I/O吞吐} = 80 Gbps
緩存命中時,應用Pod數據訪問最大可用帶寬 = min{80Gbps, 16Gbps} = 16 Gbps
推薦ECS機型規格
分布式緩存集群的可用帶寬取決于集群中各個ECS節點的最大可用帶寬和所使用的緩存介質,為提升分布式緩存系統性能,推薦您使用高帶寬的ECS實例規格,并使用內存或本地HDD或本地SSD盤作為緩存介質。推薦使用的ECS實例規格如下所示。
ECS實例規格族 | ECS實例規格 | ECS實例配置 |
網絡增強通用型實例規格族g7nex | ecs.g7nex.8xlarge | 32 vCPU, 128GiB內存, 40 Gbps帶寬 |
ecs.g7nex.16xlarge | 64 vCPU, 256 GiB內存, 80 Gbps帶寬 | |
ecs.g7nex.32xlarge | 128 vCPU, 512 GiB內存, 160 Gbps帶寬 | |
本地SSD型實例規格族i4g | ecs.i4g.16xlarge | 64 vCPU, 256 GiB內存, 2 * 1920 GB本地SSD盤存儲,32 Gbps帶寬 |
ecs.i4g.32xlarge | 128 vCPU, 512 GiB內存, 4 * 1920 GB本地SSD盤存儲, 64 Gbps帶寬 | |
網絡增強通用型實例規格族g7ne | ecs.g7ne.8xlarge | 32 vCPU, 128 GiB內存, 25 Gbps帶寬 |
ecs.g7ne.12xlarge | 48 vCPU, 192 GiB內存,40 Gbps帶寬 | |
ecs.g7ne.24xlarge | 96 vCPU, 384 GiB內存,80 Gbps帶寬 | |
通用型實例規格族g8i | ecs.g8i.24xlarge | 96 vCPU, 384 GiB內存, 50 Gbps帶寬 |
ecs.g8i.16xlarge | 64 vCPU, 256 GiB內存,32 Gbps帶寬 |
關于ECS實例的詳細信息,請參見實例規格族。
策略二:選擇緩存介質
分布式緩存集群的可用帶寬取決于集群中各個ECS節點的最大可用帶寬和所使用的緩存介質,為提升分布式緩存系統性能,推薦您使用高帶寬的ECS實例規格,并使用內存或本地SSD盤作為緩存介質。在Fluid中,可以通過配置Runtime資源對象的spec.tieredstore
參數來設置不同的緩存介質以及緩存容量。
使用ESSD云盤作為緩存介質往往無法滿足數據密集型應用場景的高性能數據訪問需求。例如:PL2云盤的單盤最大吞吐量為750 MB/s,這意味著如果僅使用一塊PL2云盤作為緩存介質,即使選擇可用帶寬大于750 MB/s的ECS機型,該ECS節點所能提供的緩存可用帶寬上限也僅為750 MB/s,浪費ECS節點的最大可用帶寬。
使用內存作為緩存介質
如果使用內存作為緩存介質,配置Runtime資源對象的spec.tieredstore
為如下配置:
spec:
tieredstore:
levels:
- mediumtype: MEM
volumeType: emptyDir
path: /dev/shm
quota: 30Gi # 為單個分布式緩存Worker副本所能提供的緩存容量。
high: "0.99"
low: "0.95"
使用本地存儲作為緩存介質
如果使用本地系統盤存儲作為緩存介質:
spec: tieredstore: levels: - mediumtype: SSD volumeType: emptyDir # 使用emptyDir確保緩存數據的生命周期與分布式緩存Worker Pod一致,避免緩存數據殘留。 path: /var/lib/fluid/cache quota: 100Gi # 為單個分布式緩存Worker副本所能提供的緩存容量。 high: "0.99" low: "0.95
如果使用額外掛載的SSD數據盤作為緩存介質:
spec: tieredstore: levels: - mediumtype: SSD volumeType: hostPath path: /mnt/disk1 # /mnt/disk1為宿主機的本地SSD盤掛載路徑。 quota: 100Gi # 為單個分布式緩存Worker副本所能提供的緩存容量。 high: "0.99" low: "0.95"
如果同時使用多塊SSD數據盤作為緩存介質:
spec: tieredstore: levels: - mediumtype: SSD volumeType: hostPath path: /mnt/disk1,/mnt/disk2 # /mnt/disk1和/mnt/disk2均為宿主機的數據盤掛載路徑。 quota: 100Gi # 單個分布式緩存Worker副本所能提供的緩存容量,容量將均分在多個緩存路徑上(例如:/mnt/disk1和/mnt/disk2各分配50Gi容量)。 high: "0.99" low: "0.95"
策略三:配置數據緩存與應用間調度親和性
當數據訪問請求命中緩存時,應用Pod從緩存系統中讀取數據。因此,如果應用Pod與緩存系統分別部署在不同的可用區內,應用需要跨可用區訪問緩存數據。如果希望降低跨可用區網絡波動對數據訪問過程的影響,需要考慮應用Pod與緩存系統相關Pod之間的調度親和性,具體而言:
緩存系統Worker Pod盡量親和部署在相同可用區內。
應用Pod與緩存系統Worker Pod盡量親和部署在相同可用區內。
將多個應用Pod與緩存系統Worker Pod部署在單一可用區內會降低應用和相關服務的容災能力,您可以根據自身業務SLA平衡選擇性能影響和服務可用性。
在Fluid中,可以通過配置Dataset資源對象的spec.nodeAffinity
,設置緩存系統Worker Pod的調度親和性,如下所示:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo-dataset
spec:
...
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: topology.kubernetes.io/zone
operator: In
values:
- <ZONE_ID> # 所在的可用區,例如cn-beijing-i。
上述配置將分布式緩存系統Worker Pod均部署在<ZONE_ID>可用區的ECS節點。
另外,Fluid可以在應用Pod中自動注入該應用Pod所需緩存的親和性信息,實現應用Pod與緩存系統Worker Pod盡量同可用區親和部署。更多信息,請參見數據緩存親和性調度優化。
策略四:大文件全量順序讀場景參數配置優化
許多數據密集型場景中涉及大文件全量順序讀的數據訪問模式,例如,基于TFRecord或Tar格式的數據集進行模型訓練、AI模型推理服務啟動時加載1個或多個模型參數文件、讀取Parquet文件格式進行分布式數據分析等。針對此類場景,可以使用更加激進的預讀策略,提升數據訪問性能,例如適當增大緩存系統預讀的并發度、預讀數據量等。
在Fluid中,不同分布式緩存運行時在預讀策略方面的配置需要有不同的參數配置,如下所示:
使用JindoRuntime作為緩存運行時
如果使用JindoRuntime作為緩存運行時,您需要配置spec.fuse.properties
參數,自定義Jindo Fuse的行為和性能。
kind: JindoRuntime
metadata:
...
spec:
fuse:
properties:
fs.oss.download.thread.concurrency: "200"
fs.oss.read.buffer.size: "8388608"
fs.oss.read.readahead.max.buffer.count: "200"
fs.oss.read.sequence.ambiguity.range: "2147483647" # 約2G。
fs.oss.download.thread.concurrency
:Jindo客戶端預讀的并發線程數,每個線程會用于預讀一個緩沖區。fs.oss.read.buffer.size
:單個buffer的大小。fs.oss.read.readahead.max.buffer.count
:Jindo客戶端單流預讀的最大buffer數量。fs.oss.read.sequence.ambiguity.range
:Jindo客戶端判定進程是否順序讀取文件的判定范圍。
更多Jindo性能調優高級參數,請參見JindoSDK高級參數配置。
使用JuiceFSRuntime作為緩存運行時
如果使用JuiceFSRuntime作為緩存運行時,您可以通過配置Runtime資源對象的spec.fuse.options
和spec.worker.options
分別設置FUSE組件和Worker組件的參數。
kind: JuiceFSRuntime
metadata:
...
spec:
fuse:
options:
buffer-size: "2048"
cache-size: "0"
max-uploads: "150"
worker:
options:
buffer-size: "2048"
max-downloads: "200"
max-uploads: "150"
master:
resources:
requests:
memory: 2Gi
limits:
memory: 8Gi
...
buffer-size:讀寫緩沖區大小。
max-downloads:預讀過程的下載并發度。
fuse cache-size:設置JuiceFS FUSE組件可用的本地緩存容量。
例如,通過設置JuiceFS FUSE組件可用的本地緩存容量為0,并設置FUSE組件內存requests
為較小值(例如2 GiB)。FUSE組件會在Linux文件系統內核中自動利用節點可用內存作為近地緩存(Page Cache),近地緩存未命中時直接讀取JuiceFS Worker分布式緩存中的數據,實現高效訪問。更多性能調優和參數細節,請參見JuiceFS官方文檔。
穩定性維度的Fluid數據緩存優化策略
為了確保Fluid數據緩存系統長期穩定運行,您需要根據業務實際需求,謹慎規避將含有大量文件的目錄作為數據緩存的掛載點,以防止單點過載;實施元數據持久化策略,利用持久化存儲(如ESSD云盤)加強系統韌性與故障恢復能力;合理配置FUSE Pod資源,確保資源供需平衡,避免資源競爭引起的不穩定;啟用FUSE自愈機制,自動響應故障。整合運用這些策略,以增強Fluid數據緩存的穩定性和可靠性。本節將詳細介紹如何運用以上這些策略。
策略一:避免掛載包含大量文件的目錄作為底層數據源
緩存系統需要維護掛載底層存儲目錄下全部文件的元信息,并記錄各文件的緩存狀態等額外元信息。如果緩存系統掛載了包含大量文件的底層存儲目錄(例如:大規模存儲系統的根目錄),緩存系統必須使用大量內存資源存儲相關元信息,并使用更多CPU資源處理相關的元信息訪問請求。
Fluid定義了Dataset的抽象概念,Dataset是面向上層特定應用,邏輯上是一組相關數據的集合。一個Dataset會對應啟動一個分布式緩存系統,并且一個Dataset應當僅為一個或某些相關的數據密集型任務提供數據訪問加速服務。因此,推薦您創建多個Dataset,并在每個Dataset中分別定義底層數據源的不同子目錄,具體子目錄級別與業務應用所需的數據集合相關,不同的業務應用可以使用不同的Dataset綁定的緩存系統訪問數據,這將使得各業務應用間有著更好的隔離性,保證系統穩定性和性能。Dataset配置示例如下:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo-dataset
spec:
...
mounts:
- mountPoint: oss://<BUCKET>/<PATH1>/<SUBPATH>/
name: sub-bucket
創建多個緩存系統可能導致額外的運維復雜性,可根據實際業務需求靈活選擇架構方案,例如:
如果所需緩存的數據集存儲在單一后端存儲系統中,且規模不大,文件數量不多,有較強的相關性,推薦創建單個Fluid Dataset和分布式緩存系統提供服務。
如果所需緩存的數據集規模較大、文件數量較多,推薦根據數據目錄的業務含義,分拆為多個Fluid Dataset和分布式緩存系統提供服務,應用Pod可聲明掛載一個或多個Fluid Dataset到指定目錄下。
如果所需緩存的數據集來自于多個用戶的不同的存儲系統,并且業務要求保證用戶間的數據隔離性。推薦為每個用戶或用戶的一系列數據相關的作業創建有著較短生命周期的Fluid Dataset,通過開發Kubernetes Operator靈活運維集群中多個Fluid Dataset。
策略二:使用元信息持久化提升緩存系統穩定性
許多分布式緩存系統采用Master-Worker的分布式架構,它們依賴于Master Pod組件維護掛載的后端存儲系統目錄的文件元信息,并記錄各文件的緩存狀態。當應用通過此類緩存系統訪問數據時,首先需要從Master Pod組件中獲取文件元信息,接著從底層文件存儲或緩存Worker組件中獲取數據。因此,緩存Master Pod組件的穩定性對緩存系統的高可用性至關重要。
如果使用JindoRuntime作為緩存運行時,在Fluid中推薦使用以下配置提升緩存Master Pod組件的可用性:
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
name: sd-dataset
spec:
...
volumes:
- name: meta-vol
persistentVolumeClaim:
claimName: demo-jindo-master-meta
master:
resources:
requests:
memory: 4Gi
limits:
memory: 8Gi
volumeMounts:
- name: meta-vol
mountPath: /root/jindofs-meta
properties:
namespace.meta-dir: "/root/jindofs-meta"
在上述YAML示例中,demo-jindo-master-meta
為提前創建的PVC,該PVC使用ESSD云盤作為存儲卷,這意味著Master Pod組件維護的元信息能夠持久化存儲,并能夠隨Pod遷移。更多信息,請參見通過配置JindoRuntime實現Master Pod組件狀態持久化存儲。
策略三:合理配置FUSE Pod資源
緩存系統客戶端程序運行于FUSE Pod中,FUSE Pod在節點上掛載FUSE文件系統,該文件系統將被掛載到應用Pod的指定路徑上,并暴露POSIX文件訪問接口。這使得應用Pod往往不需要修改應用代碼,即可像訪問本地存儲一樣訪問遠程存儲系統中的數據,并享受到緩存帶來的加速效果。FUSE程序維持了應用和緩存系統之間的數據通道,因此推薦對FUSE Pod所使用的資源進行配置。
在Fluid中,可以通過配置Runtime資源對象的spec.fuse.resources
設置FUSE Pod的資源使用。為避免因FUSE程序OOM導致的文件掛載點斷裂問題,推薦您對FUSE Pod不設置或設置較大的內存限制。例如,可以設置FUSE Pod的內存限制接近ECS節點的可分配內存大小。
spec:
fuse:
resources:
requests:
memory: 8Gi
# limits:
# memory: <ECS_ALLOCATABLE_MEMORY>
策略四:開啟FUSE自愈功能提升數據訪問客戶端可用性
FUSE程序維持了應用和緩存系統之間的數據通道。默認情況下,如果FUSE程序因某些預期之外的行為崩潰,即使FUSE程序重啟后恢復正常,應用容器也無法再通過該FUSE文件系統掛載點訪問數據。為解決該問題,應用容器必須重啟(重新觸發FUSE文件系統掛載點到應用Pod的綁定掛載邏輯)來恢復數據訪問,這將影響應用Pod的可用性。
Fluid提供了FUSE自愈機制,開啟該機制后應用容器無需重啟,即可在FUSE程序重啟后的一段時間后,自動恢復應用容器內FUSE掛載點的數據訪問。
在FUSE程序崩潰到重啟后的短暫時間內,應用Pod內掛載點仍然會處于不可訪問的狀態,這意味著應用必須自行處理此類I/O錯誤,避免應用崩潰,并包含重試邏輯。
如需開啟并使用FUSE自愈功能,請參見如何開啟FUSE自動恢復能力。FUSE自愈能力存在較多限制,推薦僅在某些具有明確需求且業務適合的應用場景選擇性開啟此能力,例如:交互式編程開發場景,即使用在線Notebook或其他環境交互式開發調試某些應用程序。
緩存讀寫一致性最佳實踐
緩存系統幫助應用提升了數據訪問的效率,但相對地也會引入緩存一致性問題。更強的一致性往往意味著性能損失或運維復雜度,因此推薦您根據需求選擇滿足業務場景需求的緩存讀寫一致性配置策略。本節介紹如何在多種場景下配置緩存讀寫一致性。
場景一:數據只讀且后端存儲數據無變化
應用案例:單次AI模型訓練過程中,讀取固定數據集中的數據樣例,執行AI模型的迭代訓練,訓練完成后數據緩存即被清理。
配置方案:該場景為Fluid默認支持的應用場景,Fluid Dataset使用默認配置或顯式設置為只讀即可。
配置示例:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo-dataset
spec:
...
# accessModes: ["ReadOnlyMany"] ReadOnlyMany為默認值
通過設置accessModes: ["ReadOnlyMany"]
確保數據集以只讀形式掛載,可以避免訓練過程中對數據集的意外修改,同時也簡化了數據管理和緩存策略。
場景二:數據只讀且后端存儲數據周期性規律變化
應用案例:緩存系統常駐于Kubernetes集群中,業務相關數據每日被采集并存儲到后端存儲系統中。每日凌晨需要定時執行數據分析任務,對當天新增的業務相關數據進行分析處理和匯總,匯總結果不通過緩存,直接寫入后端存儲系統。
配置方案:Fluid Dataset使用默認配置或顯式設置為只讀;按周期規律定時執行數據預熱,同步后端存儲系統數據變化。
配置示例:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo-dataset
spec:
...
# accessModes: ["ReadOnlyMany"] ReadOnlyMany為默認值。
---
apiVersion: data.fluid.io/v1alpha1
kind: DataLoad
metadata:
name: demo-dataset-warmup
spec:
...
policy: Cron
schedule: "0 0 * * *" # 每日0點執行數據預熱。
loadMetadata: true # 數據預熱時同步后端存儲系統數據變化。
target:
- path: /path/to/warmup # 指定了需要預熱的后端存儲系統路徑。
通過設置
accessModes: ["ReadOnlyMany"]
,確保數據集主要服務于讀取操作,即業務數據的寫入直接發生于后端存儲系統,而不會干擾到緩存層,保證了數據的一致性與完整性。通過設置
policy: Cron
和schedule: "0 0 * * *"
,確保了每天凌晨0點自動執行數據預熱操作,實現了數據的周期性預熱。同時,loadMetadata: true
確保了在預熱過程中元數據也會被同步。
場景三:數據只讀但后端存儲數據根據業務事件變化
應用案例:某模型推理服務允許上傳自定義的AI模型,并使用自定義模型執行推理。即上傳的AI模型不通過緩存,直接寫入后端存儲系統,模型上傳成功后,可以選擇該模型執行推理,并查看推理結果。
配置方案:Fluid Dataset使用默認配置或顯式設置為只讀;Runtime FUSE設置文件元信息超時時間為較小值;禁用緩存系統服務端的元信息緩存。
配置示例:
使用JindoRuntime作為緩存運行時:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: demo-dataset
spec:
mounts:
- mountPoint: <MOUNTPOINT>
name: data
path: /
options:
metaPolicy: ALWAYS # 通過設置metaPolicy: ALWAYS,禁用了服務端的元數據緩存。
---
apiVersion: data.fluid.io/v1alpha1
kind: JindoRuntime
metadata:
name: demo-dataset
spec:
fuse:
args:
- -oauto_cache
# 設置元信息超時時間為30s。如果xxx_timeout=0能提供強一致性,但可能會大大降低數據讀取效率。
- -oattr_timeout=30
- -oentry_timeout=30
- -onegative_timeout=30
- -ometrics_port=0
通過設置metaPolicy: ALWAYS
,禁用了服務端的元數據緩存。這確保了每次訪問都是直接查詢后端存儲,獲取最新元數據,適合需要更強一致性的應用場景。
場景四:數據讀取和寫入請求位于不同目錄
應用案例:大規模分布式AI訓練中,訓練任務從目錄A下讀取數據集中的數據樣例,并在每輪(Epoch)訓練完成后,將模型的Checkpoint寫入到目錄B下。由于模型Checkpoint可能較大,希望通過緩存寫入以提升效率。
配置方案:創建兩個Fluid Dataset,一個設置讀寫模式為只讀,一個設置讀寫模式為讀寫,兩個Fluid Dataset分別掛載于目錄A和目錄B下,實現讀寫分離。
配置示例:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: train-samples
spec:
...
# accessModes: ["ReadOnlyMany"] ReadOnlyMany為默認值。
---
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: model-ckpt
spec:
...
accessModes: ["ReadWriteMany"]
通過將訓練數據集train-samples
設置為只讀訪問模式accessModes: ["ReadOnlyMany"]
(ReadOnlyMany為默認值),從而使所有訓練任務只能從該目錄讀取數據,保證了數據源的不可變性,避免了訓練過程中因寫操作引入的潛在一致性問題。同時,為模型Checkpoint目錄(model-ckpt
)配置了讀寫模式(accessModes: ["ReadWriteMany"]
),允許訓練任務在每輪迭代后安全地寫入模型Checkpoint,提升了寫入效率。
應用Pod定義參考示例如下:
apiVersion: v1
kind: Pod
metadata:
...
spec:
containers:
...
volumeMounts:
- name: train-samples-vol
mountPath: /data/A
- name: model-ckpt-vol
mountPath: /data/B
volumes:
- name: train-samples-vol
persistentVolumeClaim:
claimName: train-samples
- name: model-ckpt-vol
persistentVolumeClaim:
claimName: model-ckpt
通過掛載兩個不同的Volume(train-samples-vol
和 model-ckpt-vol
)到指定路徑(/data/A
和 /data/B
),實現了訓練數據集與模型Checkpoint目錄的物理隔離。
場景五:數據讀取和寫入請求必須在相同目錄
應用案例:在交互式編程開發場景(例如在線Jupyter Notebook開發或在線VSCode開發等),您擁有一個屬于自己的工作空間目錄。工作空間目錄中存儲了數據集、代碼等文件。您可能會經常在工作空間目錄下新增、刪除、修改文件。
配置方案:Dataset設置讀寫模式為讀寫;推薦使用具有完整POSIX兼容性的存儲系統作為后端實現。
配置示例:
apiVersion: data.fluid.io/v1alpha1
kind: Dataset
metadata:
name: myworkspace
spec:
...
accessModes: ["ReadWriteMany"]
通過設置accessModes: ["ReadWriteMany"]
,確保多個用戶或進程可以同時讀取和寫入同一個工作空間目錄。