Lingjun için Cloud Parallel File System (CPFS), uçtan uca Remote Direct Memory Access (RDMA) ağ hızlandırmasıyla yüksek aktarım hızı ve yüksek IOPS performansı sunar. Bu özellik, AI-Generated Content (AIGC) ve otonom sürüş gibi yapay zeka ve hesaplama yoğunluklu senaryolar için idealdir. ACK, CPFS for Lingjun dosya sistemlerini statik olarak sağlanan kalıcı birimler (PV'ler) olarak bağlamayı destekler.
Bağlama yöntemini seçin
ACK, Container Storage Interface (CSI) temelinde CPFS for Lingjun dosya sistemlerini statik olarak sağlanan PV'ler ve kalıcı birim talepleri (PVC'ler) olarak bağlamayı destekler. CSI eklentisi, pod'un çalıştığı düğüm türüne göre en uygun bağlama yöntemini otomatik olarak seçer:
|
|
|
|
|
|
|
|
|
|
|
|
Başlamadan önce kümeniz için hangi yolun geçerli olduğunu belirleyin:
Pod'lar Lingjun düğümlerinde çalışıyorsa — Varsayılan olarak VSC bağlaması kullanılır. VPC bağlama hedefi oluşturmayı atlayın.
Pod'lar Lingjun olmayan düğümlerde çalışıyorsa — VPC bağlaması gereklidir. 1. Adımda bir VPC bağlama hedefi oluşturun.
Pod'lar her iki düğüm türünde de çalışıyorsa — PV'de hem
vpcMountTargethem demountpointAutoSwitch: "true"parametrelerini ayarlayın. CSI eklentisi geçişi otomatik olarak yönetir.
Ön koşullar
Başlamadan önce aşağıdaki koşulları karşıladığınızdan emin olun:
Lingjun için CPFS sınırlamalarını inceleyin.
Kubernetes 1.26 veya üzeri bir sürüm çalışan bir ACK kümesine sahip olun. Gerekirse yükseltin.
Alibaba Cloud Linux 3 çalışan düğümlere sahip olun.
-
Gerekli sürümlerde aşağıdaki depolama eklentilerini yükleyin (sürümleri Add-ons sayfasında doğrulayın ve yükseltin):
CSI eklentisi (csi-plugin ve csi-provisioner): v1.33.1 veya üzeri (CSI eklentilerini yönetme).
-
cnfs-nas-daemon: 0.1.2 veya üzeri
bmcpfs-csi:bmcpfs-csi-controller(ACK tarafından yönetilen kontrol düzlemi eklentisi) vebmcpfs-csi-node(düğüm tarafı DaemonSet) bileşenlerini içerir.
Kullanım notları
VSC bağlama alanı: Pod'un çalıştığı düğüm, CPFS for Lingjun dosya sistemi örneğiyle aynı
hpn-zoneiçinde olmalıdır.Düğüm başlatma: Lingjun düğümü, başlatma sırasında bir CPFS for Lingjun dosya sistemiyle ilişkilendirilmelidir. Aksi takdirde CSI bağlaması başarısız olur.
Düğüm boşaltma: Arızalı bir Lingjun düğümünü devre dışı bırakmadan önce üzerindeki tüm pod'ları boşaltın. Bu adım atlanırsa küme meta verileri tutarsız hale gelir ve temizlenemeyen artık pod kaynakları oluşur.
CPFS örneği başına tek PV: Aynı CPFS dosya sistemindeki birden fazla alt dizini ayrı PV'ler olarak tek bir poda bağlamak desteklenmez. Sürücü sınırlamaları nedeniyle bu durum pod başlatma hatasına neden olur. Tek bir PV/PVC oluşturun ve alt dizinleri bağlamak için
volumeMounts.subPathkullanın.subPathherhangi bir performans ek yükü oluşturmayan hafif birbind mountkullanır.
1. Adım: Bir CPFS dosya sistemi oluşturun
Bir Lingjun için CPFS dosya sistemi oluşturun ve dosya sistemi kimliğini kaydedin.
-
(İsteğe bağlı) Lingjun olmayan düğümler için, küme düğümlerinizle aynı VPC içinde bir VPC bağlama hedefi oluşturun ve bağlama hedefi alan adını kaydedin. Format: cpfs--vpc-.<Region>.cpfs.aliyuncs.com.
Pod'lar Lingjun düğümlerinde çalışıyorsa gerekli değildir (varsayılan olarak VSC bağlaması kullanılır).
2. Adım: Bir PV ve PVC oluşturun
-
Aşağıdaki şablonu
bmcpfs-pv-pvc.yamlolarak kaydedin ve yer tutucuları dosya sistemi kimliğinizle ve (gerekirse) VPC bağlama hedefinizle değiştirin.PV parametreleri
Parametre
Açıklama
ZorunluaccessModes
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 içinbmcpfsplugin.csi.alibabacloud.comkullanın.
Evetcsi.volumeHandle
Lingjun için CPFS dosya sisteminin kimliği.
Evetcsi.volumeAttributes.vpcMountTarget
VPC bağlama hedefi alan adı. Lingjun olmayan düğümler için gereklidir; pod'lar yalnızca Lingjun düğümlerine zamanlanı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
ZorunluaccessModes
PVC tarafından istenen erişim modu. PV ile eşleşmelidir.
Evetresources.requests.storage
Poda tahsis edilen 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üntülenir; bu da PVC'nin PV'ye bağlı olduğunu onaylar.
3. Adım: Bir iş yükü dağıtın
Senaryo 1: Tüm CPFS dosya sistemini bağlayın
Tüm konteynerlerin CPFS dosya sistemine tam erişime ihtiyacı duyduğu durumlarda 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 birim 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ı onaylar.
Senaryo 2: Veri yalıtımı için alt dizinleri bağlayın
Çok kiracılı veya çok görevli kurulumlar gibi paylaşılan depolama senaryolarında, birden fazla 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ğinworkspace/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ı onaylar. -
Ü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ış yapın.
echo "hello from alpha" > /data/workspace/alpha.log exit
-
-
task-beta-containerbağlaması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.logmevcutkenalpha.logyoktur; bu da konteynerler arasındaki veri yalıtımını onaylar.
-
<