Untuk aplikasi yang memerlukan penyimpanan persisten atau berbagi data antar pod, Anda dapat memasang Bucket Layanan Penyimpanan Objek (OSS) sebagai volume ossfs 2.0 menggunakan Persistent Volume (PV) dan Persistent Volume Claim (PVC) yang disediakan secara statis. Pendekatan ini memungkinkan kontainer aplikasi untuk membaca dan menulis data di OSS menggunakan antarmuka POSIX standar, seperti sistem file lokal. Ideal untuk skenario seperti analitik data besar, pelatihan AI, dan menyajikan konten statis.
Dibandingkan dengan ossfs 1.0, ossfs 2.0 unggul dalam performa baca dan tulis berurutan, menjadikannya ideal untuk memanfaatkan bandwidth tinggi dari OSS.
Untuk detail tentang performa, lihat benchmark performa klien ossfs 2.0.
Ikhtisar Alur Kerja
Proses untuk memasang volume ossfs 2.0 yang disediakan secara statis di kluster Container Service for Kubernetes (ACK) adalah sebagai berikut:
|
Pertimbangan
Kesesuaian beban kerja: ossfs 2.0 dirancang untuk skenario read-only dan tulisan tambahan berurutan. Untuk skenario tulis acak atau bersamaan, konsistensi data tidak dapat dijamin. Kami merekomendasikan menggunakan ossfs 1.0 untuk kasus-kasus ini.
Keselamatan data: Setiap modifikasi atau penghapusan file di titik pemasangan ossfs (baik dari dalam pod maupun pada node host) segera disinkronkan dengan bucket OSS sumber. Untuk mencegah kehilangan data yang tidak disengaja, kami merekomendasikan mengaktifkan pengendalian versi untuk bucket.
Pemeriksaan kesehatan aplikasi: Konfigurasikan pemeriksaan kesehatan (liveness probe) untuk pod yang menggunakan volume OSS. Misalnya, verifikasi bahwa titik pemasangan masih dapat diakses. Jika pemasangan menjadi tidak sehat, pod akan otomatis dimulai ulang untuk memulihkan koneksi.
Manajemen unggah multipart: Saat mengunggah file besar (> 10 MB), ossfs secara otomatis menggunakan unggah multipart. Jika unggahan terputus, bagian yang tidak lengkap akan tetap berada di bucket. Hapus bagian-bagian ini secara manual atau konfigurasikan aturan siklus hidup untuk membersihkan bagian-bagian ini secara otomatis untuk menghemat biaya penyimpanan.
Metode 1: Autentikasi menggunakan RRSA
Dengan memanfaatkan RRSA, Anda dapat mencapai isolasi izin tingkat PV yang halus untuk mengakses sumber daya cloud, yang secara signifikan mengurangi risiko keamanan. Untuk detail, lihat Gunakan RRSA untuk mengotorisasi pod yang berbeda untuk mengakses layanan cloud yang berbeda.
Prasyarat
Anda memiliki kluster ACK yang menjalankan Kubernetes 1.26 atau lebih baru. Tingkatkan kluster secara manual jika diperlukan.
Versi plugin Container Storage Interface (CSI) adalah 1.33.1 atau lebih baru. Untuk meningkatkannya, lihat Tingkatkan csi-plugin dan csi-provisioner.
Jika Anda menggunakan RRSA di versi sebelum 1.30.4, lihat [Perubahan Produk] Peningkatan versi dan optimasi proses pemasangan ossfs di CSI untuk mengonfigurasi otorisasi peran RAM.
Anda telah membuat sebuah Bucket OSS di Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang Bucket OSS lintas akun, kami merekomendasikan menggunakan metode autentikasi RRSA. Untuk detail, lihat Bagaimana cara memasang Bucket OSS lintas akun?
Langkah 1: Buat Peran RAM
Jika Anda sudah memasang volume OSS di kluster menggunakan RRSA, lewati langkah ini. Jika ini pertama kali, ikuti langkah-langkah berikut:
Buat Peran RAM untuk OIDC IdP. Peran ini akan diasumsikan menggunakan RRSA.
Tabel berikut mencantumkan parameter utama untuk peran contoh
demo-role-for-rrsa:Parameter
Deskripsi
Identity Provider Type
Pilih OIDC.
Identity Provider
Pilih penyedia yang terkait dengan kluster Anda, seperti
ack-rrsa-<cluster_id>, di mana<cluster_id>adalah ID kluster aktual Anda.Condition
oidc:iss: Pertahankan nilai default.
oidc:aud: Pertahankan nilai default.
oidc:sub: Tambahkan kondisi berikut secara manual:
Key: Pilih oidc:sub.
Operator: Pilih StringEquals.
Value: Masukkan
system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs.Dalam nilai ini,
ack-csi-fuseadalah namespace tempat klien ossfs berada, dan tidak dapat disesuaikan.csi-fuse-ossfsadalah nama akun layanan, dan dapat diubah sesuai kebutuhan.Untuk informasi lebih lanjut tentang cara memodifikasi nama akun layanan, lihat Bagaimana cara menggunakan ARN tertentu atau ServiceAccount dalam autentikasi RRSA?
Role Name
Masukkan
demo-role-for-rrsa.
Langkah 2: Berikan izin kepada peran demo-role-for-rrsa
Buat kebijakan kustom untuk akses OSS. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
Pilih kebijakan read-only atau read/write berdasarkan kebutuhan Anda dan ganti
mybucketdengan nama bucket Anda.Kebijakan OSS read-only
Kebijakan OSS read/write
(Opsional) Jika Anda menggunakan ID CMK yang dikelola oleh KMS untuk mengenkripsi objek OSS, Anda juga harus mengonfigurasi izin KMS untuk Pengguna RAM. Untuk informasi lebih lanjut, lihat Operasi enkripsi.
Berikan izin kepada peran demo-role-for-rrsa. Untuk informasi lebih lanjut, lihat Berikan izin kepada peran RAM.
CatatanAnda juga dapat menggunakan peran RAM yang sudah ada yang telah diberikan izin OSS dengan memodifikasi kebijakan kepercayaannya. Untuk informasi lebih lanjut, lihat Gunakan dan berikan izin kepada peran RAM yang sudah ada.
Langkah 3: Buat PV
Buat PV untuk mendaftarkan Bucket OSS yang ada di kluster.
Buat file bernama
ossfs2-pv.yamldengan konten berikut. Definisi PV ini memberi tahu Kubernetes cara mengakses Bucket OSS Anda menggunakan peran RRSA.PV berikut memasang Bucket OSS bernama
cnfs-oss-testsebagai sistem file read-only 20 GB untuk pod di kluster guna digunakan.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # Nama PV spec: capacity: storage: 20Gi # Tentukan kapasitas volume (nilai ini hanya untuk mencocokkan PVC) accessModes: # Mode akses - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Harus sama dengan nama PV (metadata.name) volumeAttributes: fuseType: ossfs2 bucket: cnfs-oss-test # Nama Bucket OSS path: /subpath # Subdirektori untuk dipasang. Biarkan kosong untuk memasang direktori root. url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir wilayah tempat Bucket OSS berada otherOpts: "-o close_to_open=false" authType: "rrsa" roleName: "demo-role-for-rrsa" # Peran RAM yang dibuat sebelumnyaParameter dalam
volumeAttributes:Parameter
Wajib
Deskripsi
fuseTypeYa
Menentukan klien yang digunakan untuk pemasangan. Harus diatur ke
ossfs2untuk menggunakan klien ossfs 2.0.bucketYa
Nama Bucket OSS yang ingin Anda pasang.
pathTidak
Subdirektori dalam Bucket OSS untuk dipasang. Jika tidak ditentukan, root bucket akan dipasang secara default.
urlYa
Titik endpoint akses untuk Bucket OSS.
Gunakan endpoint internal jika node kluster dan bucket berada di wilayah yang sama, atau jika koneksi Virtual Private Cloud (VPC) telah dibuat.
Gunakan endpoint publik jika node pemasangan dan bucket berada di wilayah yang berbeda.
Berikut adalah format umum untuk endpoint akses yang berbeda:
Internal:
http://oss-{{regionName}}-internal.aliyuncs.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.Format endpoint akses internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Beralihlah ke format baru sesegera mungkin.Publik:
http://oss-{{regionName}}.aliyuncs.comatauhttps://oss-{{regionName}}.aliyuncs.com.
otherOptsTidak
Opsi pemasangan tambahan yang dilewatkan ke volume OSS, ditentukan sebagai string bendera yang dipisahkan spasi dalam format
-o *** -o ***. Sebagai contoh,-o close_to_open=false.Opsi
close-to-openmengontrol konsistensi metadata. Saat diatur kefalse(default), metadata disimpan dalam cache untuk meningkatkan performa pembacaan file kecil. Saat diatur ketrue, klien mengambil metadata segar dari OSS dengan mengirim permintaanGetObjectMetasetiap kali file dibuka, memastikan konsistensi waktu nyata dengan biaya peningkatan latensi dan panggilan API.Untuk parameter opsional lainnya, lihat opsi pemasangan ossfs 2.0.
authTypeYa
Diatur ke
rrsauntuk menyatakan bahwa metode autentikasi RRSA digunakan.roleNameYa
Diatur ke nama Peran RAM yang Anda buat atau modifikasi.
Untuk menetapkan izin berbeda untuk PV yang berbeda, buat Peran RAM terpisah untuk setiap set izin. Kemudian, dalam definisi setiap PV, gunakan parameter
roleNameuntuk mengaitkannya dengan peran yang sesuai.Untuk menggunakan ARN tertentu atau ServiceAccount dengan metode autentikasi RRSA, lihat Bagaimana cara menggunakan ARN tertentu atau ServiceAccount dengan metode autentikasi RRSA?.
Terapkan definisi PV.
kubectl create -f ossfs2-pv.yamlVerifikasi status PV.
kubectl get pv pv-ossfs2Keluaran menunjukkan bahwa status PV adalah
Available.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 PVC untuk mendeklarasikan kapasitas penyimpanan persisten yang diperlukan oleh aplikasi.
Buat file bernama
ossfs2-pvc-static.yamldengan konten YAML berikut.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # Nama PVC namespace: default spec: # Konfigurasi berikut harus konsisten dengan PV accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-ossfs2 # PV untuk diikatBuat PVC.
kubectl create -f ossfs2-pvc-static.yamlPeriksa status PVC.
kubectl get pvc pvc-ossfs2Keluaran menunjukkan bahwa PVC terikat ke PV.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Langkah 5: Buat aplikasi dan pasang volume
Sekarang Anda dapat memasang PVC ke aplikasi.
Buat file bernama
ossfs2-test.yamluntuk mendefinisikan aplikasi Anda.Template YAML berikut membuat StatefulSet yang berisi satu pod. Pod tersebut meminta sumber daya penyimpanan melalui PVC bernama
pvc-ossfs2dan memasang volume ke path/data.Sebarkan aplikasi.
kubectl create -f ossfs2-test.yamlPeriksa status penyebaran pod.
kubectl get pod -l app=ossfs2-testKeluaran yang diharapkan:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 12mVerifikasi bahwa aplikasi dapat mengakses data di OSS.
kubectl exec -it ossfs2-test-0 -- ls /dataKeluaran harus menampilkan data di jalur pemasangan OSS.
Metode 2: Autentikasi menggunakan AccessKey
ACK mendukung autentikasi pemasangan volume OSS dengan menyimpan AccessKey statis di Secret Kubernetes. Pendekatan ini cocok untuk skenario di mana aplikasi tertentu memerlukan izin akses tetap jangka panjang.
Jika AccessKey yang dirujuk oleh PV dicabut atau izinnya diubah, aplikasi apa pun yang menggunakan volume akan segera kehilangan akses dan mengalami kesalahan izin. Untuk memulihkan akses, perbarui kredensial di Secret, lalu mulai ulang pod aplikasi untuk memaksa pemasangan ulang. Proses ini menyebabkan gangguan layanan singkat dan hanya boleh dilakukan selama jendela pemeliharaan terjadwal.
Untuk menghindari downtime terkait rotasi kunci manual, kami sangat merekomendasikan menggunakan metode autentikasi RRSA sebagai gantinya.
Prasyarat
Anda memiliki kluster ACK dengan CSI V1.33.1 atau lebih baru terpasang. Untuk meningkatkan komponen, lihat Tingkatkan csi-plugin dan csi-provisioner.
Anda memiliki sebuah Bucket OSS di Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang Bucket OSS lintas akun, kami merekomendasikan menggunakan RRSA untuk autentikasi. Untuk detail, lihat Bagaimana cara memasang Bucket OSS lintas akun?
Langkah 1: Buat Pengguna RAM dengan izin akses OSS dan peroleh pasangan AccessKey
Buat Pengguna RAM dan berikan izin
Buat Pengguna RAM. Anda dapat melewati langkah ini jika sudah memiliki Pengguna RAM. Untuk informasi lebih lanjut, lihat Buat Pengguna RAM.
Buat kebijakan kustom untuk akses OSS. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.
Pilih kebijakan read-only atau read/write berdasarkan kebutuhan Anda dan ganti
mybucketdengan nama bucket Anda.Kebijakan OSS read-only
Kebijakan OSS read/write
(Opsional) Jika Anda menggunakan ID CMK yang dikelola oleh KMS untuk mengenkripsi objek OSS, Anda juga harus mengonfigurasi izin KMS untuk Pengguna RAM. Untuk informasi lebih lanjut, lihat Operasi enkripsi.
Berikan izin OSS kepada Pengguna RAM. Untuk informasi lebih lanjut, lihat Berikan izin kepada Pengguna RAM.
Buat AccessKey untuk Pengguna RAM. Untuk informasi lebih lanjut, lihat Dapatkan AccessKey.
Buat Secret untuk menyimpan kredensial AccessKey
Jalankan perintah berikut untuk membuat Secret untuk autentikasi OSS. Ganti akId dan akSecret dengan kredensial aktual Anda.
kubectl create -n default secret generic oss-secret --from-literal='akId=xxxxxx' --from-literal='akSecret=xxxxxx'Langkah 2: Buat PV
Daftarkan Bucket OSS yang ada di kluster dengan membuat PV.
Buat file bernama
ossfs2-pv-ak.yamldengan konten berikut. Definisi PV ini mencakupnodePublishSecretRefyang menunjuk ke Secret yang Anda buat.PV berikut memasang Bucket OSS bernama
cnfs-oss-testsebagai sistem file read-only 20 GB untuk pod di kluster guna digunakan.apiVersion: v1 kind: PersistentVolume metadata: name: pv-ossfs2 # Nama PV spec: capacity: storage: 20Gi # Tentukan kapasitas volume (nilai ini hanya untuk mencocokkan PVC) accessModes: # Mode akses - ReadOnlyMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: pv-ossfs2 # Harus sama dengan nama PV (metadata.name) # Gunakan Secret yang dibuat sebelumnya nodePublishSecretRef: name: oss-secret # Nama Secret yang menyimpan Informasi AccessKey namespace: default # Namespace tempat Secret berada volumeAttributes: fuseType: ossfs2 bucket: cnfs-oss-test # Nama Bucket OSS path: /subpath # Subdirektori untuk dipasang. Biarkan kosong untuk memasang direktori root. url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir wilayah tempat Bucket OSS berada otherOpts: "-o close_to_open=false"Parameter dalam
nodePublishSecretRef:Parameter
Wajib
Deskripsi
nameYa
Nama Secret yang menyimpan Informasi AccessKey.
namespaceYa
Namespace tempat Secret yang menyimpan Informasi AccessKey berada.
Parameter dalam
volumeAttributes:Parameter
Wajib
Deskripsi
fuseTypeYa
Menentukan klien yang digunakan untuk pemasangan. Harus diatur ke
ossfs2untuk menggunakan klien ossfs 2.0.bucketYa
Nama Bucket OSS yang ingin Anda pasang.
pathTidak
Jalur pemasangan Bucket OSS, yang mewakili struktur direktori relatif terhadap root bucket.
urlYa
Titik akhir yang digunakan untuk memasang Bucket OSS. Anda dapat menemukan titik akhir di halaman Ikhtisar bucket di Konsol OSS.
Jika node dan bucket berada di wilayah yang sama, atau jika koneksi VPC telah dibuat, gunakan endpoint internal.
Jika node dan bucket berada di wilayah yang berbeda, gunakan endpoint publik.
Format berikut umum digunakan untuk port akses yang berbeda:
Format endpoint internal:
http://oss-{{regionName}}-internal.aliyuncs.comatauhttps://oss-{{regionName}}-internal.aliyuncs.com.Format endpoint publik:
http://oss-{{regionName}}.aliyuncs.comatauhttps://oss-{{regionName}}.aliyuncs.com.
PentingFormat endpoint internal
vpc100-oss-{{regionName}}.aliyuncs.comsudah tidak digunakan lagi. Beralihlah ke format baru segera.otherOptsTidak
Masukkan parameter kustom untuk volume OSS dalam format
-o *** -o ***, misalnya,-o close_to_open=false.close-to-open: Dinonaktifkan secara default. Jika diaktifkan, sistem mengirim permintaan GetObjectMeta ke OSS setiap kali file dibuka untuk mendapatkan metadata terbaru. Ini memastikan metadata selalu mutakhir. Namun, dalam skenario dengan banyak pembacaan file kecil, kueri metadata sering dapat meningkatkan latensi akses secara signifikan.
Untuk parameter opsional lainnya, lihat opsi pemasangan ossfs 2.0.
Terapkan definisi PV.
kubectl create -f ossfs2-pv.yamlPeriksa status PV.
kubectl get pv pv-ossfs2Keluaran berikut menunjukkan bahwa PV adalah
Available: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 PVC untuk mendeklarasikan kapasitas penyimpanan persisten yang diperlukan oleh aplikasi.
Buat file bernama
ossfs2-pvc-static.yamluntuk mengklaim PV.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # Nama PVC namespace: default spec: # Konfigurasi berikut harus konsisten dengan PV accessModes: - ReadOnlyMany resources: requests: storage: 20Gi volumeName: pv-ossfs2 # PV untuk diikatBuat PVC.
kubectl create -f ossfs2-pvc-static.yamlVerifikasi bahwa PVC adalah
Boundke PV.kubectl get pvc pvc-ossfs2Keluaran yang diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE pvc-ossfs2 Bound pv-ossfs2 20Gi ROX <unset> 6s
Langkah 4: Buat aplikasi dan pasang volume
Sekarang Anda dapat memasang PVC ke aplikasi.
Buat file bernama
ossfs2-test.yamluntuk mendefinisikan aplikasi Anda.Template YAML berikut membuat StatefulSet yang berisi satu pod. Pod tersebut meminta sumber daya penyimpanan melalui PVC bernama
pvc-ossfs2dan memasang volume ke path/data.Sebarkan aplikasi.
kubectl create -f ossfs2-test.yamlPeriksa status penyebaran pod.
kubectl get pod -l app=ossfs2-testKeluaran yang diharapkan:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 12mVerifikasi bahwa aplikasi dapat mengakses data di OSS.
kubectl exec -it ossfs2-test-0 -- ls /dataKeluaran harus menampilkan data di jalur pemasangan OSS.
Penerapan dalam produksi
Kategori | Praktik terbaik |
Keamanan dan izin |
|
Kinerja dan biaya |
|
Manajemen O&M |
|