Konteynerleştirilmiş uygulamalarda nesne depolama verilerini bağlamak için yaygın olarak ossfs gibi Kullanıcı Alanında Dosya Sistemi (FUSE) tabanlı bir dosya sistemi kullanılır. Ancak bu yaklaşım, yüksek aktarım hızı ve düşük gecikme süresinin kritik olduğu yapay zeka eğitim veri kümelerinin yüklenmesi veya zaman serisi günlüklerinin analizi gibi milyonlarca küçük dosyayı içeren okuma yoğunluklu senaryolarda yetersiz kalabilir. Bu kullanım durumları için sanal blok aygıtı çözümünü kullanmanızı öneririz. Nesne depolama verilerini doğrudan bir strmvol birimi ile bağlayarak küçük dosyalar için okuma performansını önemli ölçüde optimize edebilirsiniz.
Kullanım notları
strmvol birimleri
OSS verilerine erişmek için yalnızca dahili uç noktalar kullanılabilir.
-
Sanal blok aygıtı başlatıldığında tam bir dosya meta veri dizini oluşturur. Bu işlem düğüm kaynaklarını tüketir ve uygulama pod'unun
ContainerCreatingdurumunda kalmasına neden olur. Gereken süre ve kaynaklar, OSS paketinin bağlama yolundaki dosya sayısıyla doğru orantılıdır.-
OSS paketinin bağlama yolunu seçerken en az ayrıcalık ilkesini uygulayın.
A İşletmesi bir OSS Paketindeki
/app/a/altındaki içeriğe erişiyor ve B İşletmesi/app/b/altındaki içeriğe erişiyorsa, A İşletmesi ve B İşletmesi için sırasıyla/app/a/ve/app/b/hedef yollarına sahip ayrı birimler oluşturun. Başlatma sırasında oluşan zaman ve kaynak ek yükü hakkında bilgi için bkz. Meta veri dizini oluşturma.
-
Kalıcı Birim (PV) içindeki ayarlar, başlatma aşaması hariç olmak üzere sanal blok aygıtının bağlama döngüsü sırasındaki kaynak tüketimini sınırlar. Yeterli düğüm kaynağı ayırdığınızdan emin olun.
Tek bir sanal blok aygıtının kapasitesi 16 TiB'dir; bu nedenle bağlı OSS yolu da 16 TiB veriyle sınırlıdır.
Küme ve düğüm gereksinimleri
Küme, Kubernetes 1.20 veya sonraki bir sürümü çalıştıran ACK yönetilen Pro kümesi veya ACK özel kümesi olmalıdır. Depolama eklentisi bir Konteyner Depolama Arayüzü (CSI) eklentisi olmalıdır.
Düğümler 4,19 veya sonraki çekirdek sürümünü kullanmalıdır. En az 4 vCPU ve 8 GiB bellek içeren teknik özellikler önerilir.
-
Desteklenen düğüm işletim sistemleri: Alibaba Cloud Linux 3, Alibaba Cloud Linux 2 ve CentOS 7. erofs işletim sistemi ile veri erişim performansını optimize etmek için Alibaba Cloud Linux 3 kullanmanızı öneririz.
NotCentOS 7 ve Alibaba Cloud Linux 2 yaşam döngüsü sonuna (EOL) ulaşmıştır. Daha fazla bilgi için bkz. [[Ürün Değişikliği] Alibaba Cloud Linux 2 ve CentOS 7 Desteğinin Sonlandırılmasına İlişkin Duyuru](t2602809.xdita#).
Sanal düğüme zamanlanan sunucusuz bir poda strmvol birimleri bağlayamazsınız.
Ön koşullar
Adım 1: strmvol-csi-driver'ı dağıtın
strmvol birimlerini kullanmak için ayrı bir CSI sürücüsü olan strmvol-csi-driver bileşenini dağıtmanız gerekir. Dağıtımdan sonra bu CSI sürücüsü bağımsız olarak çalışır ve ACK tarafından yönetilen csi-provisioner ve csi-plugin bileşenleriyle çakışmaz.
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde seçeneğini belirleyin.
Marketplace sayfasında strmvol-csi-driver öğesini arayın ve kartına tıklayın.
Uygulama ayrıntıları sayfasında sağ üst köşede bulunan Deploy öğesine tıklayın.
Görüntülenen panelde temel bilgileri ve parametreleri yapılandırın, ardından OK öğesine tıklayın.
Adım 2: OSS erişim izinlerini yapılandırın
-
Bir RAM kullanıcısı oluşturun ve gerekli izinleri verin.
-
Bir RAM kullanıcısı oluşturun. Zaten bir RAM kullanıcınız varsa bu adımı atlayabilirsiniz.
RAM Konsolunda Create User sayfasına gidin ve ekrandaki talimatları izleyerek bir RAM kullanıcısı oluşturun. Oturum açma adı ve parola gibi parametreleri belirtmeniz gerekir.
-
OSS erişimi için özel bir ilke oluşturun. Daha fazla bilgi için bkz. Özel ilke oluşturma.
Gereksinimlerinize göre aşağıdaki salt okunur ve okuma/yazma izin ilkelerinden birini seçin ve
mybucketifadesini paketinizin adıyla değiştirin.-
OSS salt okunur ilkesi
-
OSS okuma/yazma ilkesi
Okuma/yazma ilkesini görüntülemek için tıklayın
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
-
(İsteğe bağlı) OSS nesnelerini Key Management Service (KMS) üzerinden bir müşteri ana şifreleme anahtarı (CMK) ile şifreliyorsanız RAM kullanıcısına KMS izinleri de vermeniz gerekir. Daha fazla bilgi için bkz. ossfs 1,0 birimlerini şifreleme.
OSS izinlerini RAM kullanıcısına verin. Daha fazla bilgi için bkz. RAM kullanıcı izinlerini yönetme.
-
Oluşturduğunuz AccessKey, PV için bir Secret olarak saklanır.
RAM Konsolunda Users sayfasına gidin, RAM kullanıcınızın adına tıklayın ve ardından AccessKey bölümünde Create AccessKey öğesine tıklayın.
Ekrandaki talimatları izleyerek bir AccessKey oluşturun. AccessKey ID ve AccessKey Secret değerlerini kopyalayın ve güvenli bir şekilde saklayın.
-
-
OSS verilerine erişmek için kimlik doğrulama kimlik bilgilerini saklayan bir secret oluşturun.
Aşağıda örnek bir komut gösterilmektedir.
akIdveakSecretifadelerini kendi AccessKey ID ve AccessKey Secret değerlerinizle değiştirin.kubectl create -n default secret generic strmvol-secret --from-literal='akId=xxxxxx' --from-literal='akSecret=xxxxxx'
strmvol birimi bağlama
Adım 1: strmvol birimi oluşturun
Statik birim
-
Kalıcı Birim (PV) oluşturun.
-
Aşağıdaki içeriğe sahip strmvol-pv.yaml adlı bir dosya oluşturun.
apiVersion: v1 kind: PersistentVolume metadata: name: pv-strmvol spec: capacity: # The mounted OSS path can store a maximum of 16 TiB of data. storage: 20Gi # Only the ReadOnlyMany access mode is supported. accessModes: - ReadOnlyMany # To prevent accidental data loss, only the Retain policy is supported. persistentVolumeReclaimPolicy: Retain csi: driver: strmvolplugin.csi.alibabacloud.com volumeHandle: pv-strmvol # Use the secret created in the prerequisite steps. nodeStageSecretRef: name: strmvol-secret namespace: default volumeAttributes: bucket: cnfs-oss-test path: /subpath # strmvol volumes only support accessing OSS data over an internal network. url: oss-cn-hangzhou-internal.aliyuncs.com umask: "000" directMode: "false" resourceLimit: "2c4g"-
nodeStageSecretRefiçindeki parametreler
Parametre
Zorunlu
Açıklamaname
Evet
AccessKey bilgilerini saklayan secret'ın adı.namespace
Evet
AccessKey bilgilerini içeren secret'ın ad alanı. -
volumeAttributesiçindeki parametrelerParametre
Zorunlu
Açıklama
bucketEvet
Bağlanacak OSS paketi.
pathHayır
OSS paketi içinde bağlanacak dizinin yolu. Bu yol paketin köküne görelidir.
ÖnemliEn az ayrıcalık ilkesine dayalı bir bağlama yolu seçin.
urlEvet
OSS için dahili uç nokta. Bu, OSS konsolundaki paketin Genel Bakış sayfasında gösterilen uç nokta ile eşleşmelidir. Dahili uç noktalar için yaygın biçimler şunlardır:
http://oss-{{regionName}}-internal.aliyuncs.comveyahttps://oss-{{regionName}}-internal.aliyuncs.com.Önemlivpc100-oss-{{regionName}}.aliyuncs.comdahili uç nokta biçimi kullanım dışı bırakılmıştır. En kısa sürede yeni bir biçime geçiş yapın.umaskHayır
Sanal blok aygıtı bağlandıktan sonraki dosya sistemi için izin maskesi.
Örneğin, varsayılan dosya izinlerini
755olarak ayarlamak içinumaskdeğerini022olarak ayarlayın.directModeHayır
Doğrudan modun etkinleştirilip etkinleştirilmeyeceğini belirtir.
"true": Veri önbelleğe almayı ve yerel önbelleğe almayı devre dışı bırakan doğrudan modu etkinleştirir. Bu, eğitim veri kümelerinin rastgele toplu okuma işlemleri gibi rastgele okuma senaryoları için uygundur."false": Doğrudan modu devre dışı bırakır (varsayılan). Bu, küçük dosyaların sıralı okunması veya büyük dosyaların okunması gibi genel amaçlı senaryolar için uygundur. Uygulamanız belirli bir veri erişim düzenine sahip değilse bu modu devre dışı bırakın.
resourceLimitHayır
Sanal blok aygıtının tüketebileceği maksimum düğüm kaynakları.
Örneğin,
"2c4g"ifadesi sanal blok aygıtının düğümden en fazla 2 vCPU ve 4 GiB bellek kullanabileceğini gösterir.NotBellek öncelikli olarak veri önbelleğe alma ve yerel önbelleğe alma için kullanılır. Doğrudan mod etkinleştirildiğinde bellek kullanımı önceden belirlenen değerden önemli ölçüde daha düşüktür.
Alibaba Cloud Linux 3 dışındaki işletim sistemleri için okuma performansı yapılandırmadan bağımsız olarak benzerdir. Bu nedenle yüksek kaynak sınırları önerilmez. Daha fazla bilgi için bkz. Veri okuma performans testleri.
-
-
PV'yi oluşturun.
kubectl create -f strmvol-pv.yaml -
PV'nin durumunu kontrol edin.
kubectl get pv pv-strmvolBeklenen çıktı:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-strmvol 20Gi ROX Retain Available <unset> 18s -
Kalıcı Birim Talebi (PVC) oluşturun.
-
Aşağıdaki içeriğe sahip strmvol-pvc-static.yaml adlı bir dosya oluşturun.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-strmvol namespace: default spec: # The following settings must match the PV configuration. accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-strmvol -
PVC'yi oluşturun.
kubectl create -f strmvol-pvc-static.yaml -
PVC'nin durumunu kontrol edin.
kubectl get pvc pvc-strmvolBeklenen çıktıda PVC'nin artık PV'ye bağlı olduğu gösterilir.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-strmvol-2 Bound pv-strmvol 20Gi ROX <unset> 16s
-
Dinamik birim
-
StorageClass oluşturun.
-
Aşağıdaki içeriğe sahip strmvol-sc.yaml adlı bir dosya oluşturun.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: strmvol-test parameters: # Use the secret created in the prerequisite steps. csi.storage.k8s.io/node-stage-secret-name: strmvol-secret csi.storage.k8s.io/node-stage-secret-namespace: default bucket: cnfs-oss-test path: /subpath # strmvol volumes only support accessing OSS data over an internal network. url: oss-cn-hangzhou-internal.aliyuncs.com umask: "000" directMode: "false" resourceLimit: "2c4g" provisioner: strmvolplugin.csi.alibabacloud.com # To prevent accidental data loss, only the Retain policy is supported. reclaimPolicy: Retain volumeBindingMode: Immediateparametersiçindeki parametreler aşağıda açıklanmıştır:-
Secret yapılandırması
Parametre
Zorunlu
Açıklamacsi.storage.k8s.io/node-stage-secret-name
Evet
AccessKey bilgilerini saklayan secret'ın adı.csi.storage.k8s.io/node-stage-secret-namespace
Evet
AccessKey bilgilerini içeren secret'ın ad alanı. -
Birim yapılandırması
Parametre
Zorunlu
Açıklama
bucketEvet
Bağlanacak OSS paketi.
pathHayır
OSS paketi içinde bağlanacak dizinin yolu. Bu yol paketin köküne görelidir.
ÖnemliEn az ayrıcalık ilkesine dayalı bir bağlama yolu seçin.
urlEvet
OSS için dahili uç nokta. Bu, OSS konsolundaki paketin Genel Bakış sayfasında gösterilen uç nokta ile eşleşmelidir. Dahili uç noktalar için yaygın biçimler şunlardır:
http://oss-{{regionName}}-internal.aliyuncs.comveyahttps://oss-{{regionName}}-internal.aliyuncs.com.Önemlivpc100-oss-{{regionName}}.aliyuncs.comdahili uç nokta biçimi kullanım dışı bırakılmıştır. En kısa sürede yeni bir biçime geçiş yapın.umaskHayır
Sanal blok aygıtı bağlandıktan sonraki dosya sistemi için izin maskesi.
Örneğin, varsayılan dosya izinlerini
755olarak ayarlamak içinumaskdeğerini022olarak ayarlayın.directModeHayır
Doğrudan modun etkinleştirilip etkinleştirilmeyeceğini belirtir.
"true": Veri önbelleğe almayı ve yerel önbelleğe almayı devre dışı bırakan doğrudan modu etkinleştirir. Bu, eğitim veri kümelerinin rastgele toplu okuma işlemleri gibi rastgele okuma senaryoları için uygundur."false": Doğrudan modu devre dışı bırakır (varsayılan). Bu, küçük dosyaların sıralı okunması veya büyük dosyaların okunması gibi genel amaçlı senaryolar için uygundur. Uygulamanız belirli bir veri erişim düzenine sahip değilse bu modu devre dışı bırakın.
resourceLimitHayır
Sanal blok aygıtının tüketebileceği maksimum düğüm kaynakları.
Örneğin,
"2c4g"ifadesi sanal blok aygıtının düğümden en fazla 2 vCPU ve 4 GiB bellek kullanabileceğini gösterir.NotBellek öncelikli olarak veri önbelleğe alma ve yerel önbelleğe alma için kullanılır. Doğrudan mod etkinleştirildiğinde bellek kullanımı önceden belirlenen değerden önemli ölçüde daha düşüktür.
Alibaba Cloud Linux 3 dışındaki işletim sistemleri için okuma performansı yapılandırmadan bağımsız olarak benzerdir. Bu nedenle yüksek kaynak sınırları önerilmez. Daha fazla bilgi için bkz. Veri okuma performans testleri.
-
-
StorageClass'ı oluşturun.
kubectl create -f strmvol-sc.yaml
-
-
PVC oluşturun.
-
Aşağıdaki içeriğe sahip strmvol-pvc-dynamic.yaml adlı bir dosya oluşturun.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-strmvol namespace: default spec: # Only the ReadOnlyMany access mode is supported. accessModes: - ReadOnlyMany # Specify the StorageClass. storageClassName: strmvol-test resources: requests: # The mounted OSS path can store a maximum of 16 TiB of data. storage: 20Gi -
PVC'yi oluşturun.
kubectl create -f strmvol-pvc-dynamic.yaml -
PVC'nin durumunu kontrol edin.
kubectl get pvc pvc-strmvolBeklenen çıktıda PVC'nin CSI sürücüsü tarafından otomatik olarak sağlanan bir PV'ye bağlı olduğu gösterilir.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-strmvol Bound strmvol-d8d1d22a-e1d7-4caa-b875-54f378dec769 20Gi ROX strmvol-test <unset> 3m
-
Adım 2: Uygulama oluşturun ve birimi bağlayın
-
Aşağıdaki içeriğe sahip strmvol-test.yaml adlı bir dosya oluşturun.
Aşağıdaki YAML örneği tek bir pod içeren bir StatefulSet oluşturur. Pod,
pvc-strmvoladlı bir PVC kullanarak depolama kaynaklarını talep eder ve bağlama yolu/dataşeklindedir.apiVersion: apps/v1 kind: StatefulSet metadata: name: strmvol-test namespace: default spec: replicas: 1 selector: matchLabels: app: strmvol-test template: metadata: labels: app: strmvol-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-strmvol mountPath: /data volumes: - name: pvc-strmvol persistentVolumeClaim: claimName: pvc-strmvol -
StatefulSet'i oluşturun.
kubectl create -f strmvol-test.yaml -
StatefulSet içindeki pod'un dağıtım durumunu kontrol edin.
kubectl get pod -l app=strmvol-testBeklenen çıktı:
NAME READY STATUS RESTARTS AGE strmvol-test-0 1/1 Running 0 14s -
Bağlama noktasının bir blok aygıtı olduğunu ve uygulamanın OSS'deki verilere erişebildiğini doğrulayın.
kubectl exec -it strmvol-test-0 -- sh -c "df /data && ls /data"Beklenen çıktı:
Filesystem 1K-blocks Used Available Use% Mounted on /dev/ublkb1 24812 24812 0 100% /data <data in OSS mount path>
İlgili belgeler
-