CPFS AI Edition, birden çok pod'un aynı dosya sistemini ReadWriteMany modunda eş zamanlı olarak bağlamasını destekler; bu sayede eğitim verilerine ve modellere ortak erişim sağlanır. Bu konuda, ACK CSI eklentisini kullanarak bir CPFS AI Edition dosya sisteminin konteynerlere statik depolama birimi olarak nasıl bağlanacağı açıklanır.
Ön koşullar
Bir ACK Lingjun yönetilen küme oluşturun. Küme Kubernetes 1.26 veya sonraki bir sürümü çalıştırmalı ve düğüm işletim sistemi olarak Alibaba Cloud Linux 3 kullanmalıdır.
Bir CPFS AI Edition dosya sistemi oluşturun. Dosya sistemi kimliğini not edin. Daha fazla bilgi için bkz. CPFS AI Edition dosya sistemi oluşturma.
-
ACK kümesinde aşağıdaki depolama bileşenlerinin yüklü olduğundan emin olun. Sürümleri kümenin Bileşen Yönetimi sayfasından kontrol edebilir veya CSI bileşenlerini yönetme konusuna bakabilirsiniz:
Bileşen
Gerekli sürüm
csi-plugin / csi-provisioner
≥ v1.33.1
cnfs-nas-daemon
≥ 0.1.2
bmcpfs-csi-controller / bmcpfs-csi-node
ACK tarafından yönetilir. Manuel kurulum gerekmez. Bir pod, Lingjun olmayan bir düğüme veya farklı bir hesaplama-depolama yakınlık alanındaki bir Lingjun düğümüne planlanıyorsa önceden bir VPC bağlama hedefi oluşturun ve bağlama hedefi etki alanı adını (
cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.combiçiminde) kaydedin. VPC bağlama hedefinin ait olduğu VPC, ACK kümesinin VPC'si ile aynı olmalıdır. Daha fazla bilgi için bkz. VPC bağlama noktalarını yönetme.
Dikkat edilmesi gerekenler
VSC kullanarak bir CPFS dosya sistemi bağladığınızda pod'un çalıştığı düğüm, CPFS AI Edition dosya sistemi örneğiyle aynı hesaplama-depolama yakınlık alanında olmalıdır.
CPFS için CSI konteyner tabanlı bağlama kullanıyorsanız bir Lingjun düğüm grubu oluştururken yüksek performanslı dosya depolama erişimini destekleme seçeneğini belirleyin.
Bir Lingjun düğümünü arıza nedeniyle çevrimdışı duruma getirmeden önce pod'ları bu düğümden boşaltın. Aksi takdirde küme meta verileri tutarsız hale gelir; bu durum pod kaynaklarının kalmasına ve düzgün şekilde geri alınamamasına neden olur.
-
Tek bir pod içinde birden fazla PV aracılığıyla aynı CPFS örneğinden farklı alt dizinlerin bağlanması desteklenmez. Alt düzey sürücü sınırlamaları nedeniyle bu yapılandırma pod'un başlatılamamasına neden olur.
CPFS örneği için yalnızca bir PV/PVC oluşturun ve ardından pod
volumeMountsyapılandırmasındakisubPathalanını kullanarak gerekli alt dizinleri ayrı ayrı bağlayın.subPath, hafif birbind mountmekanizmasına dayanır ve ek performans yükü getirmez.
Erişim kanalları ve planlama
ACK Lingjun kümesinde bir pod'un CPFS AI Edition'a eriştiği ağ kanalı, pod planlama konumuna göre belirlenir. CSI eklentisi en uygun kanalı otomatik olarak seçer:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Otomatik kanal değiştirmeyi etkinleştirmek için PV'nin volumeAttributes bölümünde hem mountpointAutoSwitch: "true" hem de vpcMountTarget (VPC bağlama hedefi etki alanı adı) değerlerini yapılandırın. Yapılandırma ayrıntıları için aşağıdaki Adım 1: PV ve PVC oluşturma bölümüne bakın.
Bir Lingjun düğümü ile bir CPFS dosya sisteminin aynı hesaplama-depolama yakınlık alanında olup olmadığını belirlemek için bkz. Bağlama erişimine genel bakış.
Adım 1: PV ve PVC oluşturma
-
Aşağıdaki şablonu
bmcpfs-pv-pvc.yamlolarak kaydedin; yer tutucuları dosya sistemi kimliğinizle ve (gerekiyorsa) VPC bağlama hedefinizle değiştirin.PV parametreleri
Parametre
Açıklama
GerekliaccessModes
PV için erişim modu.
Evetcapacity.storage
Bildirilen depolama kapasitesi. Gerçek kapasiteyi etkilemez.
Evetcsi.driver
Sürücü türü. Lingjun için CPFS kullanırkenbmcpfsplugin.csi.alibabacloud.comkullanın.
Evetcsi.volumeHandle
Lingjun için CPFS dosya sisteminin kimliği.
Evetcsi.volumeAttributes.vpcMountTarget
VPC bağlama hedefi etki alanı adı. Lingjun olmayan düğümler için gereklidir; pod'lar yalnızca Lingjun düğümlerine planlanıyorsa atlayın.
Koşullucsi.volumeAttributes.mountpointAutoSwitch
VSC ve VPC bağlama noktaları arasında otomatik geçişi etkinleştirir.vpcMountTargetile birlikte kullanın.
HayırmountOptions
Bağlama seçenekleri.
HayırPVC parametreleri
Parametre
Açıklama
GerekliaccessModes
PVC tarafından istenen erişim modu. PV ile eşleşmelidir.
Evetresources.requests.storage
Pod'a ayrılan depolama kapasitesi. PV kapasitesini aşmamalıdır.
EvetvolumeMode
Bağlama modu.Filesystemolarak ayarlayın.
EvetvolumeName
Bu PVC'ye bağlanacak PV'nin adı.
EvetapiVersion: v1 kind: PersistentVolume metadata: name: bmcpfs spec: accessModes: - ReadWriteMany capacity: storage: 10Ti claimRef: name: bmcpfs namespace: default csi: driver: bmcpfsplugin.csi.alibabacloud.com volumeAttributes: # Required if pods schedule to non-Lingjun nodes or cross-zone automatic VPC switching is enabled. # Omit if pods schedule only to Lingjun nodes. vpcMountTarget: cpfs-***-vpc-***.<Region>.cpfs.aliyuncs.com # Enables automatic switching between VSC and VPC mount points. # Use together with vpcMountTarget. mountpointAutoSwitch: "true" # Replace with your CPFS for Lingjun file system ID. volumeHandle: bmcpfs-***** mountOptions: [] --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bmcpfs namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 10Ti volumeMode: Filesystem volumeName: bmcpfs -
Yapılandırmayı uygulayın.
kubectl apply -f bmcpfs-pv-pvc.yaml -
PVC'nin PV'ye bağlı olduğunu doğrulayın.
kubectl get pvc bmcpfsBeklenen çıktı:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE bmcpfs Bound bmcpfs 10Ti RWX <unset> 51sSTATUSdeğeriBoundolarak görünür; bu da PVC'nin PV'ye bağlı olduğunu doğrular.
Adım 2: Uygulama oluşturma ve CPFS bağlama
Senaryo 1: Tüm CPFS dosya sistemini bağlama
Tüm konteynerlerin CPFS dosya sistemine tam erişime ihtiyacı duyduğunda bu yaklaşımı kullanın.
-
Aşağıdaki YAML şablonunu
cpfs-test.yamlolarak kaydedin.apiVersion: apps/v1 kind: Deployment metadata: name: cpfs-test labels: app: cpfs-test spec: replicas: 2 selector: matchLabels: app: cpfs-test template: metadata: labels: app: cpfs-test spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-cpfs mountPath: /data volumes: - name: pvc-cpfs persistentVolumeClaim: claimName: bmcpfs -
Deployment'ı oluşturun.
kubectl create -f cpfs-test.yaml -
Her iki pod'un da çalıştığını doğrulayın.
kubectl get pod -l app=cpfs-testBeklenen çıktı:
NAME READY STATUS RESTARTS AGE cpfs-test-76b77d64b5-2hw96 1/1 Running 0 42s cpfs-test-76b77d64b5-dnwdx 1/1 Running 0 42s -
Bir pod içindeki CPFS birimi bağlantısını doğrulayın.
kubectl exec -it <pod-name> -- mount | grep /dataBeklenen çıktı:
bindroot-f0a5c-******:cpfs-*******-vpc-****.cn-shanghai.cpfs.aliyuncs.com:/ on /data type fuse.aliyun-alinas-efc (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=1048576)/datakonumundakifuse.aliyun-alinas-efcbağlama türü, CPFS biriminin bağlandığını doğrular.
Senaryo 2: Veri yalıtımı için alt dizinleri bağlama
Çok kiracılı veya çok görevli kurulumlar gibi paylaşılan depolama senaryolarında birden çok konteyner tek bir CPFS birimini paylaşırken verileri ayrı dizinlerde yalıtabilir. Aynı PVC'den farklı alt dizinleri farklı konteynerlere bağlamak için volumeMounts.subPath kullanın.
BirsubPathdizini (örneğin,workspace/alpha) yoksa otomatik olarak oluşturulur.
-
Aşağıdaki YAML şablonunu
pod.yamlolarak kaydedin. Bu pod, aynı PVC'nin (bmcpfs) farklı alt dizinlerini bağlayan iki konteyner çalıştırır.apiVersion: v1 kind: Pod metadata: name: cpfs-subpath-demo-pod spec: containers: - name: task-alpha-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # Mount path inside the container subPath: workspace/alpha # Mount the workspace/alpha subdirectory only - name: task-beta-container image: busybox:1.35 command: ["/bin/sh", "-c", "sleep 3600"] volumeMounts: - name: cpfs-storage mountPath: /data/workspace # Mount paths can be identical across containers subPath: workspace/beta # Mount the workspace/beta subdirectory only volumes: - name: cpfs-storage persistentVolumeClaim: claimName: bmcpfs # Reference the PVC created earlier -
Pod'u dağıtın.
kubectl apply -f pod.yaml -
task-alpha-containeriçin bağlamayı ve yazma izinlerini doğrulayın.-
Konteynere bağlanın.
kubectl exec -it cpfs-subpath-demo-pod -c task-alpha-container -- /bin/sh -
CPFS biriminin bağlandığını onaylayın.
df -hBeklenen çıktı (paylaşılan dizin
/data/workspacekonumuna bağlanır):Filesystem Size Used Available Use% Mounted on ... 192.XX.XX.0:/share 10.0T 1.0G 10.0T 0% /data/workspace .../data/workspacekonumundaki dosya sistemi girişi, CPFS alt dizininin bağlandığını doğrular. -
Üst dizin yapısını kontrol edin.
ls -l /data/Beklenen çıktı:
total 4 drwxr-xr-x 2 root root 4096 Aug 15 10:00 workspace -
Bir test dosyası yazın ve çıkın.
echo "hello from alpha" > /data/workspace/alpha.log exit
-
-
task-beta-containerbağlantısını ve veri yalıtımını doğrulayın.-
Konteynere bağlanın.
kubectl exec -it cpfs-subpath-demo-pod -c task-beta-container -- /bin/sh -
Bir test dosyası yazın.
echo "hello from beta" > /data/workspace/beta.log -
Bağlama noktasındaki dosyaları listeleyin.
ls -l /data/workspace/Beklenen çıktı:
total 4 -rw-r--r-- 1 root root 16 Aug 15 10:05 beta.logbeta.logmevcut ancakalpha.logyok; bu da konteynerler arasındaki veri yalıtımını doğrular.
-
Adım 3: Bağlamayı doğrulama
kubectl exec -it <pod-name> -- mount | grep /data
# Expected output contains fuse.aliyun-alinas-efc, indicating the EFC + FUSE protocol is in use