All Products
Search
Document Center

Container Service for Kubernetes:Memasang volume persisten OSS statis menggunakan ossfs 2.0 di kluster ACK

Last Updated:Mar 27, 2026

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:

  1. 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.

  2. Buat PV. Definisikan PV yang mendaftarkan bucket OSS yang sudah ada ke kluster dengan menentukan nama bucket, titik akhir, subdirektori, dan detail autentikasi.

  3. Buat PVC. Buat Persistent Volume Claim (PVC) yang melakukan bind ke PV yang telah Anda definisikan.

  4. 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:

Langkah 1: Buat peran RAM

Lewati langkah ini jika Anda telah memasang volume OSS di kluster menggunakan RRSA.

  1. Aktifkan fitur RRSA di Konsol ACK.

  2. 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-fuse adalah namespace tempat klien ossfs berjalan dan tidak dapat diubah. csi-fuse-ossfs adalah nama ServiceAccount dan dapat dikustomisasi.
    Role name demo-role-for-rrsa
    Untuk mengubah nama ServiceAccount, lihat FAQ tentang volume ossfs 2.0.

Langkah 2: Berikan izin ke peran RAM

  1. Buat kebijakan kustom untuk memberikan akses OSS. Untuk detailnya, lihat Buat kebijakan kustom. Ganti mybucket dengan 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"
      }
  2. (Opsional) Jika objek dalam bucket dienkripsi dengan customer master key (CMK) di Key Management Service (KMS), berikan izin akses KMS. Lihat Enkripsi untuk detailnya.

  3. 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

  1. Buat ossfs2-pv.yaml dengan konten berikut.

    PV berikut memasang bucket OSS cnfs-oss-test sebagai 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 1

    Parameter utama dalam volumeAttributes:

    Parameter Wajib Deskripsi
    fuseType Ya Harus ossfs2 untuk menggunakan klien ossfs 2.0.
    bucket Ya Nama bucket OSS yang akan dipasang.
    path Tidak Subdirektori dalam bucket. Default ke root jika dibiarkan kosong.
    url Ya 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 internal vpc100-oss-{region}.aliyuncs.com sudah tidak digunakan lagi—beralihlah ke format baru.
    otherOpts Tidak Opsi mount tambahan dalam format -o <option> -o <option>. Untuk semua opsi yang tersedia, lihat opsi mount ossfs 2.0.
    authType Ya Atur ke rrsa.
    roleName Ya 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?
  2. Terapkan manifes.

    kubectl create -f ossfs2-pv.yaml
  3. Verifikasi PV tersedia.

    kubectl get pv pv-ossfs2

    Output 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

  1. Buat ossfs2-pvc-static.yaml dengan 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
  2. Buat PVC.

    kubectl create -f ossfs2-pvc-static.yaml
  3. Verifikasi PVC telah ter-bind.

    kubectl get pvc pvc-ossfs2

    Output yang diharapkan:

    NAME         STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-ossfs2   Bound    pv-ossfs2   20Gi       ROX                           <unset>                 6s

Langkah 5: Deploy aplikasi

  1. Buat ossfs2-test.yaml untuk 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
  2. Deploy aplikasi.

    kubectl create -f ossfs2-test.yaml
  3. Tunggu hingga Pod berjalan.

    kubectl get pod -l app=ossfs2-test

    Output yang diharapkan:

    NAME            READY   STATUS    RESTARTS   AGE
    ossfs2-test-0   1/1     Running   0          12m
  4. Verifikasi bucket OSS telah terpasang.

    kubectl exec -it ossfs2-test-0 -- ls /data

    Output 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.

Penting

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:

Langkah 1: Buat pengguna RAM dan simpan AccessKey

  1. Buat pengguna RAM. Jika Anda sudah memilikinya, lewati langkah ini. Lihat Buat pengguna RAM.

  2. Buat kebijakan kustom untuk memberikan akses OSS. Lihat Buat kebijakan kustom. Ganti mybucket dengan 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"
      }
  3. (Opsional) Jika objek dalam bucket dienkripsi dengan CMK di KMS, berikan akses KMS. Lihat Enkripsi.

  4. Lampirkan kebijakan ke pengguna RAM. Lihat Berikan izin ke pengguna RAM.

  5. Buat pasangan AccessKey untuk pengguna RAM. Lihat Buat pasangan AccessKey.

  6. Simpan pasangan AccessKey sebagai Secret Kubernetes. Ganti xxxxxx dengan nilai aktual.

    kubectl create -n default secret generic oss-secret \
      --from-literal='akId=xxxxxx' \
      --from-literal='akSecret=xxxxxx'

Langkah 2: Buat PV

  1. Buat ossfs2-pv-ak.yaml dengan konten berikut.

    PV berikut memasang bucket OSS cnfs-oss-test sebagai 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
    name Ya Nama Secret yang menyimpan pasangan AccessKey.
    namespace Ya Namespace tempat Secret berada.

    Parameter dalam volumeAttributes: sama seperti Metode 1, Langkah 3, kecuali authType dan roleName tidak digunakan.

  2. Terapkan manifes.

    kubectl create -f ossfs2-pv-ak.yaml
  3. Verifikasi PV tersedia.

    kubectl get pv pv-ossfs2

    Output 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

  1. 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
  2. Buat PVC.

    kubectl create -f ossfs2-pvc-static.yaml
  3. Verifikasi PVC telah ter-bind.

    kubectl get pvc pvc-ossfs2

    Output 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.

FAQ

Referensi