Object Storage Service (OSS) paketinizi statik olarak sağlanan Kalıcı Birim (PV) olarak bağlayarak Pod'larınız için POSIX dosya sistemi arayüzüne sahip kalıcı, paylaşılan depolama alanı oluşturun. ossfs 2.0, sıralı okuma ve yüksek bant genişliği gerektiren iş yükleri için optimize edilmiştir; bu da onu yapay zeka eğitimi, büyük veri analitiği ve statik içerik sunumu senaryoları için ideal kılar.
Performans karşılaştırmaları için bkz. ossfs 2.0 istemci performans karşılaştırmaları .
Çalışma mantığı
Container Service for Kubernetes (ACK) kümesinde bir OSS paketini statik olarak sağlanan birim olarak bağlamak dört adımdan oluşur:
Bir kimlik doğrulama yöntemi seçin. Üretim ortamları için Hizmet Hesapları için RAM Rolleri (RRSA) kullanın; bu yöntem geçici, otomatik olarak döndürülen kimlik bilgileri sağlar ve Pod düzeyinde izin yalıtımı sunar. Uzun süreli statik anahtara dayandığından AccessKey'i yalnızca test amaçlı kullanın.
PV oluşturun. Mevcut OSS paketinizi kümeye kaydeden, paket adını, uç noktayı, alt dizini ve kimlik doğrulama ayrıntılarını belirten bir PV tanımlayın.
PVC oluşturun. Tanımladığınız PV'ye bağlanan bir Kalıcı Birim Talebi (PVC) oluşturun.
Uygulama dağıtın. OSS paketini konteynere bağlamak için iş yükü manifestinizde PVC'ye başvurun.
Kullanım notları
Desteklenen iş yükleri: ossfs 2.0 salt okunur ve sıralı-ekleme yazma iş yüklerini destekler. Rastgele veya eşzamanlı yazma işlemlerinde veri tutarlılığı garanti edilemez; bunun yerine ossfs 1.0 kullanın.
Veri güvenliği: Bağlama noktasında yapılan değişiklikler (Pod içinden veya ana düğüm üzerinden olsun) anında OSS paketine senkronize edilir. Yanlışlıkla silinmelere karşı koruma sağlamak için pakette sürüm oluşturmayı etkinleştirin.
Durum denetimleri: OSS birimleri kullanan Pod'larda, bağlama noktasının erişilebilir olduğunu doğrulamak için bir canlılık probu yapılandırın. Proba başarısız olursa Kubernetes Pod'u otomatik olarak yeniden başlatır ve yeniden bağlamayı tetikler.
Çok parçalı yüklemeler: ossfs, 10 MB'tan büyük dosyalar için otomatik olarak çok parçalı yükleme kullanır. Yükleme kesintiye uğrarsa eksik parçalar pakette kalır. Bu parçaları manuel olarak silin veya otomatik temizlemek için bir yaşam döngüsü kuralı yapılandırın.
Yöntem 1: RRSA kullanarak kimlik doğrulama (önerilen)
RRSA, OpenID Connect (OIDC) ve Security Token Service (STS) aracılığıyla geçici, otomatik olarak döndürülen kimlik bilgilerini kullanarak Pod'ların kimliğini doğrular ve PV düzeyinde izin yalıtımını destekler. Arka plan bilgisi için bkz. Farklı pod'ların farklı cloud hizmetlerine erişimini yetkilendirmek için RRSA kullanma.
Önkoşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Kubernetes 1.26 veya sonraki bir sürümü çalıştıran bir ACK kümesi. Gerekirse kümeyi yükseltin.
-
CSI eklenti sürümü 1.33.1 veya üstü. Yükseltme için bkz. csi-plugin ve csi-provisioner güncelleme.
CSI sürümünüz 1.30.4'ten önceyse ve RRSA kullanmayı planlıyorsanız, devam etmeden önce RAM rolü yetkilendirmesini yapılandırmak için [\[Ürün Değişiklikleri\] CSI'da ossfs sürüm yükseltme ve bağlama süreci optimizasyonu](https://www.alibabacloud.com/help/en/document_detail/2842828.html) konusuna bakın.
-
Kümenizle aynı Alibaba Cloud hesabında bulunan bir OSS paketi.
Paketler arası OSS paketi bağlamak için RRSA kimlik doğrulama yöntemini kullanın. Ayrıntılar için bkz. ossfs 2.0 birimleri hakkında SSS .
Adım 1: RAM rolü oluşturma
Kümede daha önce RRSA kullanarak bir OSS birimi bağladıysanız bu adımı atlayın.
ACK konsolunda RRSA özelliğini etkinleştirin.
-
OIDC kimlik sağlayıcısı için RAM rolü oluşturun. Aşağıdaki tabloda örnek
demo-role-for-rrsarolü için temel parametreler listelenmiştir.Parametre Değer Identity provider type OIDC öğesini seçin. Identity provider Kümenizle ilişkili sağlayıcıyı seçin, örneğin ack-rrsa-<cluster_id>.oidc:iss Varsayılan değeri koruyun. oidc:aud Varsayılan değeri koruyun. oidc:sub Koşul ekleyin: Anahtar = oidc:sub, İşleç =StringEquals, Değer =system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs.ack-csi-fuse, ossfs istemcisinin çalıştığı ad alanıdır ve değiştirilemez.csi-fuse-ossfsServiceAccount adıdır ve özelleştirilebilir.Role name demo-role-for-rrsaServiceAccount adını değiştirmek için bkz. ossfs 2.0 birimleri hakkında SSS .
Adım 2: RAM rolüne izinler verme
-
OSS erişimi sağlamak için özel bir ilke oluşturun. Ayrıntılar için bkz. Özel ilkeler oluşturma.
mybucketifadesini gerçek paket adınızla değiştirin.-
Salt okunur ilke
{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" } -
Okuma-yazma ilkesi
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
-
(İsteğe bağlı) Paketteki nesneler Key Management Service (KMS) içindeki bir müşteri ana yöneticisi anahtarı (CMK) ile şifreleniyorsa KMS erişim izinleri verin. Ayrıntılar için bkz. Şifreleme.
-
İlkeyi
demo-role-for-rrsarolüne ekleyin. Bkz. RAM rolüne izinler verme.Zaten OSS erişimi olan mevcut bir RAM rolü kullanmak için bunun yerine güven ilkesini değiştirin. Bkz. Mevcut RAM rolü kullanma .
Adım 3: PV oluşturma
-
Aşağıdaki içeriğe sahip
ossfs2-pv.yamldosyasını oluşturun.Aşağıdaki PV, OSS paketini
cnfs-oss-test20 GiB boyutunda salt okunur bir dosya sistemi olarak bağlar.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # PV name spec: capacity: storage: 20Gi # Used for PVC matching only; does not cap OSS capacity accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Must match metadata.name exactly volumeAttributes: fuseType: ossfs2 # Required: specifies the ossfs 2.0 client bucket: cnfs-oss-test # OSS bucket name path: /subpath # Subdirectory to mount; leave blank to mount the root url: oss-cn-hangzhou-internal.aliyuncs.com # Internal endpoint (same region); use public endpoint for cross-region otherOpts: "-o close_to_open=false" # false (default): cache metadata for better small-file read performance # true: fetch fresh metadata on every file open (higher latency, useful when another system frequently updates objects) authType: "rrsa" # Authentication method roleName: "demo-role-for-rrsa" # RAM role created in Step 1volumeAttributesiçindeki temel parametreler:Parametre Gerekli Açıklama fuseTypeEvet ossfs 2.0 istemcisini kullanmak için ossfs2olmalıdır.bucketEvet Bağlanacak OSS paketinin adı. pathHayır Paket içindeki alt dizin. Boş bırakılırsa varsayılan olarak kök dizin kullanılır. urlEvet OSS uç noktası. Küme ve paket aynı bölgedeyse (veya Virtual Private Cloud (VPC) üzerinden bağlıysa) dahili uç nokta kullanın; bölgeler arası erişim için genel uç nokta kullanın. Dahili format: http(s)://oss-{region}-internal.aliyuncs.com. Genel format:http(s)://oss-{region}.aliyuncs.com.vpc100-oss-{region}.aliyuncs.comdahili uç nokta formatı kullanımdan kaldırılmıştır; yeni formata geçiş yapın.otherOptsHayır -o <option> -o <option>formatındaki ek bağlama seçenekleri. Tüm kullanılabilir seçenekler için bkz. ossfs 2.0 bağlama seçenekleri.authTypeEvet rrsaolarak ayarlayın.roleNameEvet RAM rolünün adı. Farklı PV'lere farklı izinler atamak için her biri için ayrı bir RAM rolü oluşturun ve burada buna başvurun. RRSA ile belirtilen ARN'leri veya özel bir ServiceAccount kullanmak için bkz. RRSA kimlik doğrulama yöntemiyle belirtilen ARN'leri veya ServiceAccount'u nasıl kullanırım?
-
Manifestoyu uygulayın.
kubectl create -f ossfs2-pv.yaml -
PV'nin kullanılabilir olduğunu doğrulayın.
kubectl get pv pv-ossfs2Beklenen çıktı:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-ossfs2 20Gi ROX Retain Available <unset> 15s
Adım 4: PVC oluşturma
-
Aşağıdaki içeriğe sahip
ossfs2-pvc-static.yamldosyasını oluşturun.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # PVC name namespace: default spec: accessModes: - ReadOnlyMany # Must match the PV resources: requests: storage: 20Gi # Must match the PV volumeName: pv-ossfs2 # Bind to this specific PV -
PVC'yi oluşturun.
kubectl create -f ossfs2-pvc-static.yaml -
PVC'nin bağlandığını doğrulayın.
kubectl get pvc pvc-ossfs2Beklenen çıktı:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Adım 5: Uygulama dağıtma
-
PVC'yi
/datakonumuna bağlayan bir StatefulSet tanımlamak içinossfs2-test.yamldosyasını oluşturun.apiVersion: apps/v1 kind: StatefulSet metadata: name: ossfs2-test namespace: default spec: replicas: 1 selector: matchLabels: app: ossfs2-test template: metadata: labels: app: ossfs2-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-ossfs2 mountPath: /data volumes: - name: pvc-ossfs2 persistentVolumeClaim: claimName: pvc-ossfs2 -
Uygulamayı dağıtın.
kubectl create -f ossfs2-test.yaml -
Pod'un çalışır duruma gelmesini bekleyin.
kubectl get pod -l app=ossfs2-testBeklenen çıktı:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 12m -
OSS paketinin bağlandığını doğrulayın.
kubectl exec -it ossfs2-test-0 -- ls /dataÇıktı, OSS bağlama yolundaki verileri göstermelidir.
Yöntem 2: AccessKey kullanarak kimlik doğrulama
AccessKey çiftini bir Kubernetes Secret içinde saklayın ve PV'den buna başvurun. Bu yaklaşım yapılandırması basittir ancak uzun süreli statik bir anahtar kullanır.
AccessKey iptal edilirse veya izinleri değişirse, birimi kullanan tüm Pod'lar hemen erişimi kaybeder. Erişimi geri yüklemek için Secret'ı yeni kimlik bilgileriyle güncelleyin ve etkilenen Pod'ları yeniden başlatın; bu işlem kısa süreli bir hizmet kesintisine neden olur. Üretim ortamlarında bu operasyonel yükü önlemek için Yöntem 1: RRSA kullanarak kimlik doğrulama kullanın.
Önkoşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
CSI eklenti sürümü 1.33.1 veya üstü olan bir ACK kümesi. Yükseltme için bkz. csi-plugin ve csi-provisioner güncelleme.
-
Kümenizle aynı Alibaba Cloud hesabında bulunan bir OSS paketi.
Paketler arası OSS paketi bağlamak için RRSA kullanın. Bkz. ossfs 2.0 birimleri hakkında SSS .
Adım 1: RAM kullanıcı oluşturma ve AccessKey saklama
RAM kullanıcı oluşturun. Zaten bir tane varsa bu adımı atlayın. Bkz. RAM kullanıcı oluşturma.
-
OSS erişimi sağlamak için özel bir ilke oluşturun. Bkz. Özel ilkeler oluşturma.
mybucketifadesini gerçek paket adınızla değiştirin.-
Salt okunur ilke
{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" } -
Okuma-yazma ilkesi
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
-
(İsteğe bağlı) Paketteki nesneler KMS içindeki bir CMK ile şifreleniyorsa KMS erişimi verin. Bkz. Şifreleme.
İlkeyi RAM kullanıcıya ekleyin. Bkz. RAM kullanıcıya izinler verme.
RAM kullanıcı için AccessKey çifti oluşturun. Bkz. AccessKey çifti oluşturma.
-
AccessKey çiftini Kubernetes Secret olarak saklayın.
xxxxxxifadelerini gerçek değerlerle değiştirin.kubectl create -n default secret generic oss-secret \ --from-literal='akId=xxxxxx' \ --from-literal='akSecret=xxxxxx'
Adım 2: PV oluşturma
-
Aşağıdaki içeriğe sahip
ossfs2-pv-ak.yamldosyasını oluşturun.Aşağıdaki PV, OSS paketini
cnfs-oss-test20 GiB boyutunda salt okunur bir dosya sistemi olarak bağlar.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # PV name spec: capacity: storage: 20Gi # Used for PVC matching only accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Must match metadata.name exactly nodePublishSecretRef: name: oss-secret # Secret created in Step 1 namespace: default volumeAttributes: fuseType: ossfs2 # Required: specifies the ossfs 2.0 client bucket: cnfs-oss-test # OSS bucket name path: /subpath # Subdirectory to mount; leave blank to mount the root url: oss-cn-hangzhou-internal.aliyuncs.com # Internal endpoint (same region); use public endpoint for cross-region otherOpts: "-o close_to_open=false" # false (default): cache metadata for better small-file read performance # true: fetch fresh metadata on every file open (higher latency)nodePublishSecretRefiçindeki parametreler:Parametre Gerekli Açıklama nameEvet AccessKey çiftini saklayan Secret'ın adı. namespaceEvet Secret'ın bulunduğu ad alanı. volumeAttributesiçindeki parametreler:authTypeveroleNamekullanılmadığı dışında Yöntem 1, Adım 3 ile aynıdır. -
Manifestoyu uygulayın.
kubectl create -f ossfs2-pv-ak.yaml -
PV'nin kullanılabilir olduğunu doğrulayın.
kubectl get pv pv-ossfs2Beklenen çıktı:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-ossfs2 20Gi ROX Retain Available <unset> 15s
Adım 3: PVC oluşturma
-
ossfs2-pvc-static.yamldosyasını oluşturun.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 namespace: default spec: accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-ossfs2 -
PVC'yi oluşturun.
kubectl create -f ossfs2-pvc-static.yaml -
PVC'nin bağlandığını doğrulayın.
kubectl get pvc pvc-ossfs2Beklenen çıktı:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Adım 4: Uygulama dağıtma
Yöntem 1, Adım 5 ile aynı adımları izleyin.
Üretimde uygulama
| Kategori | Öneri |
|---|---|
| Güvenlik | Tüm üretim iş yükleri için RRSA kullanın. OIDC ve STS aracılığıyla geçici, otomatik olarak döndürülen kimlik bilgileri sağlar ve hassas, Pod düzeyinde izin yalıtımını etkinleştirir. |
| En az ayrıcalık | Uygulamanın ihtiyaç duyduğu izinleri yalnızca gerekli kapsamda (salt okunur veya okuma-yazma) ve belirli paketle sınırlı olarak verin. |
| Uç nokta | Küme ve paket aynı bölgedeyse genel veri aktarım maliyetlerinden kaçınmak ve gecikme süresini azaltmak için dahili uç nokta kullanın. |
| Bağlama seçenekleri | Meta verileri önbelleğe almak ve küçük dosya okumaları için gecikme süresini azaltmak amacıyla -o close_to_open=false (varsayılan) kullanın. Pod'ların başka bir yazarın güncellemelerini anında görmesi gerektiğinde yalnızca -o close_to_open=true seçeneğine geçin. |
| İş yükü uyumu | ossfs 2.0, yapay zeka eğitimi, çıkarım, büyük veri işleme ve otonom sürüş iş yükleri için uygundur. Veritabanları veya ortak düzenleme araçları gibi rastgele yazma gerektiren iş yükleri için uygun değildir. |
| Tamamlanmamış yüklemeler | Gereksiz depolama maliyetlerinden kaçınmak için pakette tamamlanmamış çok parçalı yükleme parçalarını otomatik olarak silen bir yaşam döngüsü kuralı yapılandırın. |
| Durum denetimleri | Her Pod'da bağlama noktası kullanılabilirliğini kontrol etmek için bir canlılık probu yapılandırın. Bağlama başarısız olursa Kubernetes Pod'u yeniden başlatır ve yeniden bağlamayı tetikler. |
| İzleme | Birim performansını takip etmek ve sorunları erken tespit etmek için konteyner depolama izlemeyi kullanın ve uyarılar ayarlayın. |