Pasang bucket Object Storage Service (OSS) sebagai Persistent Volume (PV) yang disediakan secara statis untuk memberikan workload Pod Anda penyimpanan persisten dan bersama dengan antarmuka sistem file POSIX. ossfs 2.0 dioptimalkan untuk pembacaan sekuensial dan workload berbandwidth tinggi, sehingga cocok untuk pelatihan AI, analitik big data, dan penyajian konten statis.
Untuk benchmark performa, lihat benchmark performa klien ossfs 2.0.
Cara kerja
Memasang bucket OSS sebagai volume yang disediakan secara statis di kluster Container Service for Kubernetes (ACK) melibatkan empat langkah:
-
Pilih metode autentikasi. Gunakan RAM Roles for Service Accounts (RRSA) untuk lingkungan produksi—metode ini menyediakan kredensial sementara yang berotasi otomatis dan isolasi izin tingkat Pod. Gunakan AccessKey hanya untuk pengujian karena metode ini mengandalkan kunci statis jangka panjang.
-
Buat PV. Definisikan PV yang mendaftarkan bucket OSS yang sudah ada ke kluster dengan menentukan nama bucket, titik akhir, subdirektori, dan detail autentikasi.
-
Buat PVC. Buat Persistent Volume Claim (PVC) yang melakukan bind ke PV yang telah Anda definisikan.
-
Deploy aplikasi. Rujuk PVC dalam manifes workload Anda untuk memasang bucket OSS ke dalam kontainer.
Catatan penggunaan
-
Workload yang didukung: ossfs 2.0 mendukung workload read-only dan write sekuensial-append. Untuk penulisan acak atau konkuren, konsistensi data tidak dapat dijamin—gunakan ossfs 1.0 sebagai gantinya.
-
Keamanan data: Perubahan yang dilakukan pada file di titik mount—baik dari dalam Pod maupun pada node host—langsung disinkronkan ke bucket OSS. Aktifkan versioning pada bucket untuk melindungi dari penghapusan tidak disengaja.
-
Pemeriksaan kesehatan: Konfigurasikan liveness probe pada Pod yang menggunakan volume OSS untuk memverifikasi bahwa titik mount dapat diakses. Kubernetes secara otomatis me-restart Pod jika pemeriksaan gagal, sehingga memicu remount.
-
Multipart upload: ossfs secara otomatis menggunakan multipart upload untuk file yang lebih besar dari 10 MB. Jika unggahan terputus, bagian yang belum lengkap tetap tersimpan di bucket. Hapus bagian-bagian ini secara manual atau konfigurasikan aturan siklus hidup untuk membersihkannya secara otomatis.
Metode 1: Autentikasi menggunakan RRSA (disarankan)
RRSA mengotentikasi Pod menggunakan kredensial sementara yang berotasi otomatis melalui OpenID Connect (OIDC) dan Security Token Service (STS), serta mendukung isolasi izin tingkat PV. Untuk informasi latar belakang, lihat Gunakan RRSA untuk mengotorisasi Pod berbeda agar mengakses layanan cloud berbeda.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
-
Kluster ACK yang menjalankan Kubernetes 1.26 atau lebih baru. Upgrade kluster jika diperlukan.
-
Plugin CSI versi 1.33.1 atau lebih baru. Untuk upgrade, lihat Perbarui csi-plugin dan csi-provisioner.
Jika versi CSI Anda lebih awal dari 1.30.4 dan Anda berencana menggunakan RRSA, lihat \[Perubahan Produk\] Peningkatan versi dan optimasi proses mounting ossfs di CSI untuk mengonfigurasi otorisasi peran RAM sebelum melanjutkan.
-
Bucket OSS dalam Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang bucket OSS lintas akun, gunakan metode autentikasi RRSA. Lihat FAQ tentang volume ossfs 2.0 untuk detailnya.
Langkah 1: Buat peran RAM
Lewati langkah ini jika Anda telah memasang volume OSS di kluster menggunakan RRSA.
-
Buat peran RAM untuk penyedia identitas OIDC. Tabel berikut mencantumkan parameter utama untuk contoh peran
demo-role-for-rrsa.Parameter Nilai Identity provider type Pilih OIDC. Identity provider Pilih penyedia yang terkait dengan kluster Anda, misalnya, ack-rrsa-<cluster_id>.oidc:iss Pertahankan nilai default. oidc:aud Pertahankan nilai default. oidc:sub Tambahkan kondisi: Key = oidc:sub, Operator =StringEquals, Value =system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs.ack-csi-fuseadalah namespace tempat klien ossfs berjalan dan tidak dapat diubah.csi-fuse-ossfsadalah nama ServiceAccount dan dapat dikustomisasi.Role name demo-role-for-rrsaUntuk mengubah nama ServiceAccount, lihat FAQ tentang volume ossfs 2.0.
Langkah 2: Berikan izin ke peran RAM
-
Buat kebijakan kustom untuk memberikan akses OSS. Untuk detailnya, lihat Buat kebijakan kustom. Ganti
mybucketdengan nama bucket aktual Anda.-
Kebijakan hanya-baca
{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" } -
Kebijakan read-write
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
-
-
(Opsional) Jika objek dalam bucket dienkripsi dengan customer master key (CMK) di Key Management Service (KMS), berikan izin akses KMS. Lihat Enkripsi untuk detailnya.
-
Lampirkan kebijakan ke peran
demo-role-for-rrsa. Lihat Berikan izin ke peran RAM.Untuk menggunakan peran RAM yang sudah ada dan telah memiliki akses OSS, ubah kebijakan kepercayaannya sebagai gantinya. Lihat Gunakan peran RAM yang sudah ada.
Langkah 3: Buat PV
-
Buat
ossfs2-pv.yamldengan konten berikut.PV berikut memasang bucket OSS
cnfs-oss-testsebagai sistem file read-only berukuran 20 GiB.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # Nama PV spec: capacity: storage: 20Gi # Hanya digunakan untuk pencocokan PVC; tidak membatasi kapasitas OSS accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Harus persis sama dengan metadata.name volumeAttributes: fuseType: ossfs2 # Wajib: menentukan klien ossfs 2.0 bucket: cnfs-oss-test # Nama bucket OSS path: /subpath # Subdirektori yang akan dipasang; kosongkan untuk memasang root url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir internal (wilayah sama); gunakan titik akhir publik untuk akses cross-region otherOpts: "-o close_to_open=false" # false (default): cache metadata untuk performa baca file kecil yang lebih baik # true: ambil metadata terbaru setiap kali membuka file (latensi lebih tinggi, berguna ketika sistem lain sering memperbarui objek) authType: "rrsa" # Metode autentikasi roleName: "demo-role-for-rrsa" # Peran RAM yang dibuat di Langkah 1Parameter utama dalam
volumeAttributes:Parameter Wajib Deskripsi fuseTypeYa Harus ossfs2untuk menggunakan klien ossfs 2.0.bucketYa Nama bucket OSS yang akan dipasang. pathTidak Subdirektori dalam bucket. Default ke root jika dibiarkan kosong. urlYa Titik akhir OSS. Gunakan titik akhir internal ketika kluster dan bucket berada di wilayah yang sama (atau terhubung melalui Virtual Private Cloud (VPC)); gunakan titik akhir publik untuk akses cross-region. Format internal: http(s)://oss-{region}-internal.aliyuncs.com. Format publik:http(s)://oss-{region}.aliyuncs.com. Format titik akhir internalvpc100-oss-{region}.aliyuncs.comsudah tidak digunakan lagi—beralihlah ke format baru.otherOptsTidak Opsi mount tambahan dalam format -o <option> -o <option>. Untuk semua opsi yang tersedia, lihat opsi mount ossfs 2.0.authTypeYa Atur ke rrsa.roleNameYa Nama peran RAM. Untuk memberikan izin berbeda ke PV berbeda, buat peran RAM terpisah untuk masing-masing dan rujuk di sini. Untuk menggunakan ARN tertentu atau ServiceAccount kustom dengan RRSA, lihat Bagaimana cara menggunakan ARN tertentu atau ServiceAccount dengan metode autentikasi RRSA?
-
Terapkan manifes.
kubectl create -f ossfs2-pv.yaml -
Verifikasi PV tersedia.
kubectl get pv pv-ossfs2Output yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-ossfs2 20Gi ROX Retain Available <unset> 15s
Langkah 4: Buat PVC
-
Buat
ossfs2-pvc-static.yamldengan konten berikut.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # Nama PVC namespace: default spec: accessModes: - ReadOnlyMany # Harus sesuai dengan PV resources: requests: storage: 20Gi # Harus sesuai dengan PV volumeName: pv-ossfs2 # Bind ke PV spesifik ini -
Buat PVC.
kubectl create -f ossfs2-pvc-static.yaml -
Verifikasi PVC telah ter-bind.
kubectl get pvc pvc-ossfs2Output yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Langkah 5: Deploy aplikasi
-
Buat
ossfs2-test.yamluntuk mendefinisikan StatefulSet yang memasang PVC di/data.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 -
Deploy aplikasi.
kubectl create -f ossfs2-test.yaml -
Tunggu hingga Pod berjalan.
kubectl get pod -l app=ossfs2-testOutput yang diharapkan:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 12m -
Verifikasi bucket OSS telah terpasang.
kubectl exec -it ossfs2-test-0 -- ls /dataOutput harus menampilkan data di jalur mount OSS.
Metode 2: Autentikasi menggunakan AccessKey
Simpan pasangan AccessKey dalam Secret Kubernetes dan rujuk dari PV. Pendekatan ini mudah dikonfigurasi tetapi menggunakan kunci statis jangka panjang.
Jika AccessKey dicabut atau izinnya diubah, semua Pod yang menggunakan volume tersebut langsung kehilangan akses. Untuk memulihkan akses, perbarui Secret dengan kredensial baru dan restart Pod yang terpengaruh—hal ini menyebabkan gangguan layanan singkat. Untuk lingkungan produksi, gunakan Metode 1: Autentikasi menggunakan RRSA untuk menghindari beban operasional ini.
Prasyarat
Sebelum memulai, pastikan Anda memiliki:
-
Kluster ACK dengan plugin CSI versi 1.33.1 atau lebih baru. Untuk upgrade, lihat Perbarui csi-plugin dan csi-provisioner.
-
Bucket OSS dalam Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang bucket OSS lintas akun, gunakan RRSA. Lihat FAQ tentang volume ossfs 2.0.
Langkah 1: Buat pengguna RAM dan simpan AccessKey
-
Buat pengguna RAM. Jika Anda sudah memilikinya, lewati langkah ini. Lihat Buat pengguna RAM.
-
Buat kebijakan kustom untuk memberikan akses OSS. Lihat Buat kebijakan kustom. Ganti
mybucketdengan nama bucket aktual Anda.-
Kebijakan read-only
{ "Statement": [ { "Action": [ "oss:Get*", "oss:List*" ], "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" } -
Kebijakan read-write
{ "Statement": [ { "Action": "oss:*", "Effect": "Allow", "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] } ], "Version": "1" }
-
-
(Opsional) Jika objek dalam bucket dienkripsi dengan CMK di KMS, berikan akses KMS. Lihat Enkripsi.
-
Lampirkan kebijakan ke pengguna RAM. Lihat Berikan izin ke pengguna RAM.
-
Buat pasangan AccessKey untuk pengguna RAM. Lihat Buat pasangan AccessKey.
-
Simpan pasangan AccessKey sebagai Secret Kubernetes. Ganti
xxxxxxdengan nilai aktual.kubectl create -n default secret generic oss-secret \ --from-literal='akId=xxxxxx' \ --from-literal='akSecret=xxxxxx'
Langkah 2: Buat PV
-
Buat
ossfs2-pv-ak.yamldengan konten berikut.PV berikut memasang bucket OSS
cnfs-oss-testsebagai sistem file read-only berukuran 20 GiB.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # Nama PV spec: capacity: storage: 20Gi # Hanya digunakan untuk pencocokan PVC accessModes: - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Harus persis sama dengan metadata.name nodePublishSecretRef: name: oss-secret # Secret yang dibuat di Langkah 1 namespace: default volumeAttributes: fuseType: ossfs2 # Wajib: menentukan klien ossfs 2.0 bucket: cnfs-oss-test # Nama bucket OSS path: /subpath # Subdirektori yang akan dipasang; kosongkan untuk memasang root url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir internal (wilayah sama); gunakan titik akhir publik untuk cross-region otherOpts: "-o close_to_open=false" # false (default): cache metadata untuk performa baca file kecil yang lebih baik # true: ambil metadata terbaru setiap kali membuka file (latensi lebih tinggi)Parameter dalam
nodePublishSecretRef:Parameter Wajib Deskripsi nameYa Nama Secret yang menyimpan pasangan AccessKey. namespaceYa Namespace tempat Secret berada. Parameter dalam
volumeAttributes: sama seperti Metode 1, Langkah 3, kecualiauthTypedanroleNametidak digunakan. -
Terapkan manifes.
kubectl create -f ossfs2-pv-ak.yaml -
Verifikasi PV tersedia.
kubectl get pv pv-ossfs2Output yang diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pv-ossfs2 20Gi ROX Retain Available <unset> 15s
Langkah 3: Buat PVC
-
Buat
ossfs2-pvc-static.yaml.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 namespace: default spec: accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-ossfs2 -
Buat PVC.
kubectl create -f ossfs2-pvc-static.yaml -
Verifikasi PVC telah ter-bind.
kubectl get pvc pvc-ossfs2Output yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Langkah 4: Deploy aplikasi
Ikuti langkah-langkah yang sama seperti Metode 1, Langkah 5.
Penerapan di lingkungan produksi
| Kategori | Rekomendasi |
|---|---|
| Keamanan | Gunakan RRSA untuk semua workload produksi. Metode ini menyediakan kredensial sementara yang berotasi otomatis melalui OIDC dan STS, serta memungkinkan isolasi izin detail halus tingkat Pod. |
| Hak istimewa minimal | Berikan hanya izin yang dibutuhkan aplikasi—read-only atau read-write—yang dibatasi pada bucket tertentu. |
| Titik akhir | Gunakan titik akhir internal ketika kluster dan bucket berada di wilayah yang sama untuk menghindari biaya transfer data publik dan mengurangi latensi. |
| Opsi mount | Gunakan -o close_to_open=false (default) untuk menyimpan cache metadata dan mengurangi latensi untuk pembacaan file kecil. Beralih ke -o close_to_open=true hanya ketika Pod perlu melihat pembaruan dari penulis lain secara langsung. |
| Kesesuaian workload | ossfs 2.0 sangat cocok untuk workload pelatihan AI, inferensi, pemrosesan big data, dan kendaraan otonom. Tidak cocok untuk workload yang memerlukan penulisan acak, seperti database atau alat pengeditan kolaboratif. |
| Unggahan tidak lengkap | Konfigurasikan aturan siklus hidup pada bucket untuk secara otomatis menghapus bagian multipart upload yang tidak lengkap guna menghindari biaya penyimpanan yang tidak perlu. |
| Pemeriksaan kesehatan | Konfigurasikan liveness probe pada setiap Pod untuk memeriksa ketersediaan titik mount. Jika mount gagal, Kubernetes me-restart Pod dan memicu remount. |
| Pemantauan | Gunakan pemantauan penyimpanan kontainer untuk melacak performa volume dan menyiapkan alert guna mendeteksi masalah sedini mungkin. |