全部产品
Search
文档中心

Container Service for Kubernetes:FAQ volume NAS

更新时间:Dec 03, 2025

Topik ini menyediakan pertanyaan yang sering diajukan (FAQ) dan solusi untuk masalah umum terkait volume Network Attached Storage (NAS).

Navigasi cepat

Kategori

Masalah

Mounting

Penggunaan

Unmounting

Waktu unmount habis dan pod macet di status Terminating

Mounting

Error saat mount: chown: Operation not permitted

Gejala

Saat memasang volume NAS, muncul pesan error chown: Operation not permitted.

Penyebab

Peran yang digunakan untuk menjalankan kontainer pada host tidak memiliki izin untuk memodifikasi volume NAS.

Solusi

  1. Jika pengguna yang menjalankan proses kontainer bukan root, gunakan pengguna root untuk menjalankan operasi `chown` dan `chgrp`. Jika accessModes dari Persistent Volume (PV) adalah ReadWriteOnce, Anda juga dapat menggunakan securityContext.fsGroup untuk mengonfigurasi izin akses volume dan kebijakan perubahan kepemilikan untuk pod. Untuk informasi selengkapnya, lihat Configure a Security Context for a Pod or a Container.

  2. Jika error tetap muncul meskipun dijalankan sebagai pengguna root, periksa grup izin titik pemasangan NAS untuk memastikan bahwa pengguna root diizinkan mengakses sistem file tersebut. Izin pengguna harus diatur ke No_squash. Untuk informasi selengkapnya, lihat Manage permission groups.

Antrian tugas controller penuh saat memasang volume NAS yang disediakan secara dinamis

Gejala

Saat menggunakan volume NAS yang disediakan secara dinamis, jika subdirektori dibuat lebih cepat daripada dihapus, antrian tugas controller dapat terblokir sehingga mencegah pembuatan PV baru.

Penyebab

Masalah ini terjadi ketika kluster menggunakan volume NAS yang disediakan secara dinamis, dan reclaimPolicy dari StorageClass diatur ke Delete sementara archiveOnDelete diatur ke false.

Solusi

Atur archiveOnDelete ke true. Saat sebuah PV dihapus, subdirektori yang sesuai pada sistem file NAS akan diubah namanya alih-alih isinya dihapus secara permanen. Anda kemudian bertanggung jawab untuk menghapus file-file tersebut. Misalnya, Anda dapat mengonfigurasi pekerjaan penghapusan terjadwal di direktori root node yang kelebihan beban atau menggunakan beberapa pod untuk menghapus subdirektori secara konkuren sesuai format tertentu.

Waktu mount volume NAS meningkat

Gejala

Memasang volume NAS membutuhkan waktu lama.

Penyebab

Waktu mount dapat meningkat jika operasi chmod atau chown diterapkan secara rekursif pada PV dan Persistent Volume Claim (PVC) yang dipasang. Hal ini terjadi jika kedua kondisi berikut terpenuhi:

  • Parameter AccessModes diatur ke ReadWriteOnce dalam templat PV dan PVC.

  • Parameter securityContext.fsGroup dikonfigurasi dalam templat aplikasi.

Solusi

  • Jika parameter securityContext.fsGroup dikonfigurasi dalam templat aplikasi, hapus parameter fsGroup dari blok securityContext.

  • Untuk mengubah file dalam direktori mount ke UID dan mode target, Anda dapat memasang manual direktori target ke instance ECS. Kemudian, jalankan perintah chown dan chmod. Setelah perintah dijalankan, gunakan volume NAS melalui Container Storage Interface (CSI). Untuk informasi selengkapnya tentang cara menggunakan volume NAS melalui CSI, lihat Use a statically provisioned NAS volume atau Use a dynamically provisioned NAS volume.

  • Untuk kluster Kubernetes versi 1.20 dan yang lebih baru, Anda juga dapat mengatur fsGroupChangePolicy ke OnRootMismatch. Dengan demikian, operasi chmod dan chown hanya dilakukan saat volume dipasang untuk pertama kalinya. Mount berikutnya akan lebih cepat. Untuk informasi selengkapnya tentang parameter fsGroupChangePolicy, lihat Configure a Security Context for a Pod or a Container.

Error saat mount: unknown filesystem type "xxx"

Gejala

Saat memasang volume NAS, muncul pesan error unknown filesystem type "xxx".

Penyebab

Node tempat pod dijadwalkan tidak memiliki dependensi penyimpanan yang diperlukan terinstal.

Solusi

Verifikasi bahwa konfigurasi volume sudah benar.

Pod macet di status ContainerCreating saat memasang dua PVC NAS

Gejala

Saat sebuah pod mencoba memasang volume NAS menggunakan dua PVC, pod gagal dimulai dan tetap berada dalam status ContainerCreating. Namun, volume dapat berhasil dipasang jika hanya salah satu PVC yang digunakan.

Penyebab

PV yang terkait dengan kedua PVC memiliki spec.csi.volumeHandle yang sama. Hal ini menyebabkan kubelet memperlakukan kedua PV tersebut sebagai satu volume selama proses mount.

Solusi

Ubah nilai bidang spec.csi.volumeHandle agar sesuai dengan nama PV.

Cara memasang sistem file NAS dengan TLS menggunakan CSI

NAS memungkinkan Anda menggunakan protokol TLS untuk melindungi data saat transit antara klien dan layanan NAS. Hal ini memastikan bahwa data tidak dicuri atau dimanipulasi selama transmisi. CSI memungkinkan Anda menggunakan klien Alibaba Cloud NAS untuk memasang volume dan mengaktifkan opsi mount TLS dengan mengatur protokol mount ke alinas.

Penting

Tool klien NAS menggunakan proses listener Stunnel sebagai proxy enkripsi TLS. Untuk aplikasi ber-throughput tinggi, proses listener Stunnel mengonsumsi sumber daya CPU yang signifikan untuk melakukan enkripsi dan dekripsi. Dalam kasus ekstrem, setiap mount dapat mengonsumsi satu core CPU penuh. Untuk informasi selengkapnya, lihat Encryption in transit for NFS file systems.

  1. Instal komponen cnfs-nas-daemon. Untuk informasi selengkapnya, lihat Manage the cnfs-nas-daemon component.

  2. Pada halaman Add-ons, temukan komponen csi-plugin dan konfigurasikan untuk mengaktifkan FeatureGate AlinasMountProxy=true.

  3. Gunakan contoh berikut untuk memasang volume NAS yang disediakan secara dinamis atau statis.

    Contoh penggunaan volume NAS yang disediakan secara dinamis

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-tls
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    - tls   # Tambahkan opsi mount tls.
    parameters:
      volumeAs: subpath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/"
      mountProtocol: alinas  # Tentukan bahwa klien alinas digunakan untuk mounting.
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-tls
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-tls
      resources:
        requests:
          storage: 20Gi

    Parameter

    Deskripsi

    parameters.mountProtocol

    Atur parameter ini ke alinas untuk menggunakan klien Alibaba Cloud NAS. Jika Anda biarkan kosong, protokol NFS digunakan secara default.

    mountOptions

    Tambahkan parameter tls untuk mengaktifkan TLS. Parameter ini hanya berlaku saat mountProtocol diatur ke alinas. Secara default, TLS dinonaktifkan.

    Contoh penggunaan volume NAS yang disediakan secara statis

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nas-tls
      labels:
        alicloud-pvname: pv-nas-tls
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      csi:
        driver: nasplugin.csi.alibabacloud.com
        volumeHandle: pv-nas   # Harus sama dengan nama PV.
        volumeAttributes:
          server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
          path: "/csi"
          mountProtocol: alinas # Tentukan bahwa klien alinas digunakan untuk mounting.
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      - tls # Tambahkan opsi mount tls.
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas-tls
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas-tls

    Parameter

    Deskripsi

    spec.csi.volumeAttributes.mountProtocol

    Atur parameter ini ke alinas untuk menggunakan klien Alibaba Cloud NAS. Jika Anda biarkan kosong, protokol NFS digunakan secara default.

    spec.mountOptions

    Tambahkan parameter tls untuk mengaktifkan TLS. Parameter ini hanya berlaku saat mountProtocol diatur ke alinas. Secara default, TLS dinonaktifkan.

Cara menerapkan isolasi pengguna atau grup pada NAS

Untuk memastikan keamanan data antar pengguna dan grup yang berbeda, Anda dapat melakukan langkah-langkah berikut untuk mengisolasi pengguna atau grup pada NAS.

  1. Gunakan templat YAML berikut untuk menjalankan proses sebagai pengguna nobody dalam pod. UID dan GID direktori yang dibuat adalah 65534.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nas-sts
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          securityContext:
            fsGroup: 65534    # Saat direktori atau file dibuat, UID dan GID-nya adalah 65534 (pengguna nobody).
            fsGroupChangePolicy: "OnRootMismatch"    # Pemilik dan izin konten dalam volume hanya diubah jika pemilik dan izin direktori root berbeda dari izin volume yang diharapkan.
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            securityContext:
              runAsUser: 65534    # Semua proses dalam kontainer dijalankan dengan ID pengguna 65534 (pengguna nobody).
              runAsGroup: 65534   # Semua proses dalam kontainer dijalankan dengan ID grup utama 65534 (pengguna nobody).
              allowPrivilegeEscalation: false
            volumeMounts:
            - name: nas-pvc
              mountPath: /data
      volumeClaimTemplates:
      - metadata:
          name: nas-pvc
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: "alicloud-nas-subpath"
          resources:
            requests:
              storage: 100Gi
  2. Jalankan perintah top dalam kontainer untuk memverifikasi bahwa USER adalah nobody.

    kubectl exec nas-sts-0 -- "top"

    Output yang diharapkan:

    Mem: 11538180K used, 52037796K free, 5052K shrd, 253696K buff, 8865272K cached
    CPU:  0.1% usr  0.1% sys  0.0% nic 99.7% idle  0.0% io  0.0% irq  0.0% sirq
    Load average: 0.76 0.60 0.58 1/1458 54
      PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
       49     0 nobody   R     1328  0.0   9  0.0 top
        1     0 nobody   S     1316  0.0  10  0.0 sleep 3600

    Output yang diharapkan menunjukkan bahwa pengguna nobody menjalankan perintah top.

  3. Verifikasi bahwa direktori dan file yang dibuat dalam direktori mount NAS dimiliki oleh nobody.

    kubectl exec nas-sts-0 -- sh -c "touch /data/test; mkdir /data/test-dir; ls -arlth /data/"

    Output yang diharapkan:

    total 5K
    drwxr-xr-x    1 root     root        4.0K Aug 30 10:14 ..
    drwxr-sr-x    2 nobody   nobody      4.0K Aug 30 10:14 test-dir
    -rw-r--r--    1 nobody   nobody         0 Aug 30 10:14 test
    drwxrwsrwx    3 root     nobody      4.0K Aug 30 10:14 .

    Output yang diharapkan menunjukkan bahwa untuk file test dan direktori test-dir yang dibuat di /data, UID dan GID yang sesuai dimiliki oleh pengguna nobody.

Dapatkah beberapa aplikasi terkontainerisasi menggunakan volume NAS yang sama?

Ya. NAS menyediakan penyimpanan bersama. Artinya, satu PVC dapat digunakan oleh beberapa aplikasi secara bersamaan.

Gagal memasang volume NAS di ACS dengan error "failed to do setup volume"

Saat menggunakan volume NAS dengan Container Service for Kubernetes (ACS), operasi mount dapat gagal dan timeout dengan error failed to do setup volume. Masalah ini dapat disebabkan oleh konfigurasi NAS yang salah. Untuk prosedur yang benar, lihat Mount a NAS volume in Container Service for Kubernetes (ACS).

Penyebab paling umum adalah ketidaksesuaian konfigurasi VPC. Alamat titik pemasangan (server) yang ditentukan dalam StorageClass harus berada dalam VPC yang sama dengan kluster.

  1. Temukan ID VPC kluster.

    1. Masuk ke Konsol Container Service for Kubernetes (ACS). Di panel navigasi sebelah kiri, klik Clusters. Pada halaman Clusters, klik nama kluster target. Di panel navigasi sebelah kiri, klik Configuration > ConfigMaps.

    2. Atur Namespace ke kube-system. Temukan dan klik acs-profile. Pada halaman yang muncul, cari dan catat vpcId, misalnya vpc-gw87c9kdqs25al2z****.

  2. Temukan alamat titik pemasangan yang sesuai di konsol NAS.

    1. Masuk ke Konsol NAS. Di panel navigasi sebelah kiri, pilih File Systems > File Systems. Klik nama sistem file NAS target.

    2. Klik Mount Targets. Di bagian Mount Targets, temukan alamat titik pemasangan yang sesuai dengan ID VPC tersebut.

  3. Verifikasi bahwa ID VPC kluster cocok dengan VPC titik pemasangan.

    Jika tidak cocok, konfigurasi ulang pengaturannya. Untuk informasi selengkapnya, lihat Mount a NAS volume in Container Service for Kubernetes (ACS).

Tidak dapat membuat atau mengubah direktori pada volume NAS

Gejala

Anda tidak dapat membuat atau mengubah direktori pada volume NAS.

Penyebab

Pengguna non-root tidak memiliki izin yang diperlukan untuk menulis ke PV sehingga tidak diizinkan membuat atau mengubah direktori.

Solusi

Anda dapat menggunakan salah satu metode berikut untuk menjalankan perintah chmod atau chown guna mengubah izin direktori mount. Hal ini memungkinkan Anda melakukan operasi pada direktori tersebut.

  • Jalankan Init container dengan izin root untuk memasang PV. Kemudian, jalankan perintah chmod atau chown untuk mengubah izin direktori mount.

  • Atur fsGroupChangePolicy ke OnRootMismatch. Dengan demikian, perintah chmod atau chown dijalankan secara otomatis saat volume dipasang untuk pertama kalinya.

Error NFS Stale File Handle saat operasi baca/tulis

Gejala

Klien menerima error NFS Stale File Handle saat membaca atau menulis file.

Penyebab

NAS tidak menjamin konsistensi data. Misalnya, jika dua klien memasang volume NAS yang sama dan Klien 1 membuka file untuk mendapatkan deskriptor file (fd)-nya, Klien 1 akan menerima error `NFS Stale File Handle` jika mencoba membaca atau menulis file tersebut setelah Klien 2 menghapusnya.

Solusi

NAS tidak menjamin konsistensi data. Anda harus menangani masalah konsistensi data berdasarkan skenario bisnis Anda.

Unmounting

Waktu unmount habis dan pod macet di status Terminating

Gejala

Saat menghapus pod dengan volume NAS yang dipasang, operasi unmount gagal dan pod macet di status Terminating.

Penyebab

Masalah ini disebabkan oleh csi-plugin yang langsung memasang /var/run. Anda dapat menjalankan perintah berikut untuk memeriksa apakah /var/run dipasang secara langsung. Jika output-nya tidak kosong, berarti direktori tersebut dipasang langsung.

kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'

Solusi

Jalankan perintah berikut untuk memperbarui manual file YAML csi-plugin. Setelah patch diterapkan, masalah akan teratasi.

kubectl patch -n kube-system daemonset csi-plugin -p '
spec:
  template:
    spec:
      containers:
        - name: csi-plugin
          volumeMounts:
            - mountPath: /host/var/run/efc
              name: efc-metrics-dir
            - mountPath: /host/var/run/ossfs
              name: ossfs-metrics-dir
            - mountPath: /host/var/run/
              $patch: delete
      volumes:
        - name: ossfs-metrics-dir
          hostPath:
            path: /var/run/ossfs
            type: DirectoryOrCreate
        - name: efc-metrics-dir
          hostPath:
            path: /var/run/efc
            type: DirectoryOrCreate
        - name: fuse-metrics-dir
          $patch: delete'