Untuk aplikasi yang memerlukan penyimpanan persisten atau berbagi data antar Pod, Anda dapat memasang Object Storage Service (OSS) bucket sebagai volume ossfs 2.0 menggunakan Persistent Volume (PV) yang dihasilkan secara dinamis. Pendekatan ini menggunakan StorageClass sebagai template untuk membuat dan mengikat PV secara otomatis, menyederhanakan manajemen penyimpanan serta memungkinkan aplikasi membaca dan menulis data di OSS menggunakan antarmuka POSIX standar seperti sistem file lokal.
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
Gambar dan langkah-langkah berikut menggambarkan alur kerja utama untuk memasang volume ossfs 2.0 yang dihasilkan secara dinamis dalam kluster Container Service for Kubernetes (ACK).
|
Pertimbangan
Kesesuaian Beban Kerja: ossfs 2.0 dirancang untuk skenario baca-saja dan tulis-lanjut berurutan. Untuk skenario tulis acak atau bersamaan, konsistensi data tidak dapat dijamin. Kami merekomendasikan penggunaan ossfs 1.0 untuk kasus-kasus tersebut.
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 konektivitas.
Manajemen Unggah Multipart: Saat mengunggah file besar (> 10 MB), ossfs secara otomatis menggunakan unggah multipart. Jika unggahan terputus, bagian yang tidak lengkap akan tetap ada di bucket. Hapus bagian-bagian ini secara manual atau konfigurasikan aturan siklus hidup untuk membersihkan bagian-bagian ini secara otomatis guna menghemat biaya penyimpanan.
Metode 1: Autentikasi menggunakan RRSA
Dengan memanfaatkan RRSA, Anda dapat mencapai isolasi izin tingkat halus, tingkat PV, untuk mengakses sumber daya cloud, yang secara signifikan mengurangi risiko keamanan. Untuk detailnya, lihat Gunakan RRSA untuk mengotorisasi Pod yang berbeda 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 bucket OSS di Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang bucket OSS lintas akun, kami merekomendasikan menggunakan metode autentikasi RRSA. Untuk detailnya, lihat Bagaimana cara memasang Bucket OSS lintas akun?
Langkah 1: Buat RAM role
Jika Anda telah memasang volume OSS di kluster menggunakan RRSA, lewati langkah ini. Jika ini pertama kalinya, ikuti langkah-langkah berikut:
Buat RAM role untuk OIDC IdP. Role ini akan diasumsikan menggunakan RRSA.
Tabel berikut mencantumkan parameter utama untuk role 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 atau ServiceAccount tertentu dalam autentikasi RRSA?
Role Name
Masukkan
demo-role-for-rrsa.
Langkah 2: Berikan izin kepada role demo-role-for-rrsa
Buat kebijakan kustom untuk akses OSS. Untuk informasi lebih lanjut, lihat Buat Kebijakan Kustom.
Pilih kebijakan baca-saja atau baca/tulis berdasarkan kebutuhan Anda dan ganti
mybucketdengan nama bucket Anda.Kebijakan Baca-Saja OSS
Kebijakan Baca/Tulis OSS
(Opsional) Jika Anda menggunakan ID CMK yang dikelola oleh KMS untuk mengenkripsi objek OSS, Anda harus mengonfigurasi izin KMS untuk Pengguna RAM. Untuk informasi lebih lanjut, lihat Operasi Enkripsi.
Berikan izin kepada role demo-role-for-rrsa. Untuk informasi lebih lanjut, lihat Berikan Izin kepada RAM Role.
CatatanAnda juga dapat menggunakan RAM role yang sudah ada yang telah diberikan izin OSS dengan memodifikasi kebijakan kepercayaannya. Untuk informasi lebih lanjut, lihat Gunakan dan Berikan Izin kepada RAM Role yang Sudah Ada.
Langkah 3: Buat StorageClass
Buat StorageClass untuk digunakan sebagai template untuk provisioning dinamis PV.
Buat file bernama
ossfs2-sc-rrsa.yamldengan konten berikut:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ossfs2-sc # Nama StorageClass. parameters: bucket: cnfs-oss-test # Nama bucket. path: /subpath # Subdirektori untuk dipasang. Jika dibiarkan kosong, direktori root akan dipasang. url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir wilayah tempat OSS Bucket berada. authType: rrsa roleName: demo-role-for-rrsa # RAM role yang dibuat sebelumnya. fuseType: ossfs2 volumeAs: sharepath otherOpts: "-o close_to_open=false" provisioner: ossplugin.csi.alibabacloud.com # Nilai ini tetap. reclaimPolicy: Retain # Kebijakan pengambilan kembali untuk PV yang dihasilkan secara dinamis. Hanya Retain yang didukung, yang berarti PV dan data di OSS Bucket tidak dihapus saat PVC dihapus. volumeBindingMode: Immediate # Mode pengikatan volume. Volume OSS tidak memerlukan afinitas zona berbasis node, jadi Anda dapat menggunakan nilai default Immediate.Tabel berikut menjelaskan parameter dalam bidang
parameters:Parameter
Diperlukan
Deskripsi
bucketYa
Nama bucket OSS untuk dipasang.
pathYa
Path dasar dalam bucket. Ketika
volumeAsdiatur kesharepath, setiap PV yang dihasilkan secara dinamis diberi subdirektori unik di bawah path ini, seperti/ack/<pv-name>.urlYa
Titik akses endpoint 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.
fuseTypeYa
Menentukan klien yang digunakan untuk pemasangan. Harus diatur ke
ossfs2untuk menggunakan klien ossfs 2.0.authTypeYa
Diatur ke
rrsauntuk menyatakan bahwa metode autentikasi RRSA digunakan.roleNameYa
Diatur ke nama RAM role yang Anda buat atau modifikasi.
Untuk memberikan izin berbeda untuk PV yang berbeda, buat RAM role terpisah untuk setiap set izin. Kemudian, dalam definisi setiap PV, gunakan parameter
roleNameuntuk mengaitkannya dengan role yang sesuai.volumeAsTidak
Menentukan bagaimana PV dihasilkan.
sharepathmenunjukkan bahwa setiap PV membuat subdirektori terpisah di direktori yang ditentukan olehpath.otherOptsTidak
Opsi pemasangan tambahan yang diteruskan 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 terbaru dari OSS dengan mengirimkan 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.
Terapkan StorageClass.
kubectl create -f ossfs2-sc-rrsa.yamlPeriksa status StorageClass.
kubectl get sc ossfs2-scKeluaran yang Diharapkan:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ossfs2-sc ossplugin.csi.alibabacloud.com Retain Immediate 10s
Langkah 4: Buat PVC
Buat PVC untuk meminta sumber daya penyimpanan dari StorageClass. Operasi ini memicu pembuatan otomatis PV yang mendasarinya.
Buat file bernama
ossfs2-pvc-dynamic.yamldengan konten berikut:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # Nama PVC. namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: ossfs2-sc # StorageClass yang dibuat sebelumnya.Buat PVC.
kubectl create -f ossfs2-pvc-dynamic.yamlVerifikasi bahwa PVC berstatus
Bound, yang menunjukkan bahwa PVC telah terikat ke PV yang dihasilkan secara otomatis.kubectl get pvc pvc-ossfs2Keluaran yang Diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-ossfs2 Bound d-bp17y03tpy2b8x****** 20Gi RWX ossfs2-sc 25s
Langkah 5: Buat aplikasi dan pasang volume
Sekarang Anda dapat memasang sumber daya penyimpanan yang terikat pada PVC di aplikasi Anda.
Buat file bernama
ossfs2-test.yamldengan konten berikut.Template YAML berikut menciptakan StatefulSet yang terdiri dari satu Pod. Pod tersebut meminta sumber daya penyimpanan melalui PVC bernama
pvc-ossfs2dan memasang volume ke path/data.Deploy aplikasi.
kubectl create -f ossfs2-test.yamlPeriksa status deployment Pod.
kubectl get pod -l app=ossfs2-testKeluaran yang Diharapkan:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 2mVerifikasi bahwa Anda dapat membaca dan menulis ke titik pemasangan.
# Tulis file uji ke target pemasangan. kubectl exec -it ossfs2-test-0 -- touch /data/test.txt # Lihat isi target pemasangan. kubectl exec -it ossfs2-test-0 -- ls /dataKeluaran harus menampilkan file
test.txtyang Anda buat, menunjukkan bahwa volume telah dipasang dan Anda memiliki izin menulis.
Metode 2: Autentikasi menggunakan AccessKey
ACK mendukung autentikasi pemasangan volume OSS dengan menyimpan AccessKey statis di dalam Kubernetes Secret. Pendekatan ini cocok untuk skenario di mana aplikasi tertentu memerlukan akses jangka panjang dengan izin tetap.
Jika AccessKey yang dirujuk oleh PV dicabut atau izinnya diubah, aplikasi apa pun yang menggunakan volume akan langsung 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 yang dijadwalkan.
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 terinstal. Untuk meningkatkan komponen, lihat Tingkatkan csi-plugin dan csi-provisioner.
Anda memiliki bucket OSS di Akun Alibaba Cloud yang sama dengan kluster Anda.
Untuk memasang bucket OSS lintas akun, kami merekomendasikan menggunakan RRSA untuk autentikasi. Untuk detailnya, 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 baca-saja atau baca/tulis berdasarkan kebutuhan Anda dan ganti
mybucketdengan nama bucket Anda.Kebijakan Baca-Saja OSS
Kebijakan Baca/Tulis OSS
(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 StorageClass
Buat file bernama
ossfs2-sc.yamldengan konten berikut:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ossfs2-sc parameters: # Gunakan Secret yang dibuat dalam persiapan. csi.storage.k8s.io/node-publish-secret-name: oss-secret csi.storage.k8s.io/node-publish-secret-namespace: default fuseType: ossfs2 bucket: cnfs-oss-test # Nama bucket. path: /subpath # Subdirektori untuk dipasang. Jika dibiarkan kosong, direktori root akan dipasang. url: oss-cn-hangzhou-internal.aliyuncs.com # Titik akhir wilayah tempat OSS Bucket berada. otherOpts: "-o close_to_open=false" provisioner: ossplugin.csi.alibabacloud.com # Nilai ini tetap. reclaimPolicy: Retain # Kebijakan pengambilan kembali untuk PV yang dihasilkan secara dinamis. Hanya Retain yang didukung, yang berarti PV dan data di OSS Bucket tidak dihapus saat PVC dihapus. volumeBindingMode: Immediate # Mode pengikatan volume. Volume OSS tidak memerlukan afinitas zona berbasis node, jadi Anda dapat menggunakan nilai default Immediate.Tabel berikut menjelaskan parameter dalam bidang
parameters:Konfigurasi Secret
Parameter
Diperlukan
Deskripsi
csi.storage.k8s.io/node-publish-secret-nameYa
Nama Secret yang menyimpan informasi AccessKey.
csi.storage.k8s.io/node-publish-secret-namespaceYa
Namespace tempat Secret yang menyimpan informasi AccessKey berada.
Konfigurasi Volume
Parameter
Diperlukan
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
Path 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 umumnya 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 mengirimkan 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.
Buat StorageClass.
kubectl create -f ossfs2-sc.yaml
Langkah 3: Buat PVC
Buat PVC untuk meminta sumber daya penyimpanan dari StorageClass. Operasi ini memicu pembuatan otomatis PV yang mendasarinya.
Buat file bernama
ossfs2-pvc-dynamic.yamldengan konten berikut:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-ossfs2 # Nama PVC. namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 20Gi storageClassName: ossfs2-sc # StorageClass yang dibuat sebelumnya.Buat PVC.
kubectl create -f ossfs2-pvc-dynamic.yamlVerifikasi bahwa PVC berstatus
Bound, yang menunjukkan bahwa PVC telah terikat ke PV yang dihasilkan secara otomatis.kubectl get pvc pvc-ossfs2Keluaran yang Diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-ossfs2 Bound d-bp17y03tpy2b8x****** 20Gi RWX ossfs2-sc 25s
Langkah 4: Buat aplikasi dan pasang volume
Sekarang Anda dapat memasang sumber daya penyimpanan yang terikat pada PVC di aplikasi Anda.
Buat file bernama
ossfs2-test.yamldengan konten berikut.Template YAML berikut menciptakan StatefulSet yang terdiri dari satu Pod. Pod tersebut meminta sumber daya penyimpanan melalui PVC bernama
pvc-ossfs2dan memasang volume ke path/data.Deploy aplikasi.
kubectl create -f ossfs2-test.yamlPeriksa status deployment Pod.
kubectl get pod -l app=ossfs2-testKeluaran yang Diharapkan:
NAME READY STATUS RESTARTS AGE ossfs2-test-0 1/1 Running 0 2mVerifikasi bahwa Anda dapat membaca dan menulis ke titik pemasangan.
# Tulis file uji ke target pemasangan. kubectl exec -it ossfs2-test-0 -- touch /data/test.txt # Lihat isi target pemasangan. kubectl exec -it ossfs2-test-0 -- ls /dataKeluaran harus menampilkan file
test.txtyang Anda buat, menunjukkan bahwa volume telah dipasang dan Anda memiliki izin menulis.
Penerapan dalam produksi
Kategori | Praktik terbaik |
Keamanan dan izin |
|
Performa dan biaya |
|
Manajemen O&M |
|