All Products
Search
Document Center

Container Service for Kubernetes:FAQ volume NAS

Last Updated:Mar 26, 2026

Topik ini mencakup masalah umum terkait volume Network Attached Storage (NAS) di kluster ACK dan ACS, termasuk kegagalan pemasangan, error izin, dan timeout saat melepas pemasangan.

Navigasi cepat

KategoriMasalah
Pemasanganchown: Operation not permitted saat pemasangan
PemasanganAntrean tugas controller penuh saat memasang volume NAS yang disediakan secara dinamis
PemasanganWaktu pemasangan lebih lama dari yang diharapkan
PemasanganError unknown filesystem type "xxx" saat pemasangan
PemasanganPod macet di status ContainerCreating saat memasang dua PVC NAS
PemasanganBagaimana cara memasang sistem file NAS dengan TLS menggunakan CSI?
PemasanganBagaimana cara menerapkan isolasi pengguna atau kelompok pada NAS?
PemasanganApakah beberapa aplikasi dapat berbagi volume NAS yang sama?
PemasanganError failed to do setup volume saat memasang volume NAS di ACS
PenggunaanTidak dapat membuat atau mengubah direktori pada volume NAS
PenggunaanError NFS Stale File Handle saat operasi baca/tulis
Pelepasan pemasanganTimeout saat melepas pemasangan dan pod macet di status Terminating

Pemasangan

chown: Operation not permitted saat pemasangan

Proses kontainer tidak memiliki izin untuk mengubah kepemilikan file pada volume NAS. Perbaiki masalah ini dengan salah satu pendekatan berikut:

  • Jalankan sebagai root atau gunakan fsGroup: Jika accessModes diatur ke ReadWriteOnce, konfigurasikan securityContext.fsGroup untuk mengatur kepemilikan volume bagi pod. Untuk detailnya, lihat Configure a security context for a pod or container.

  • Periksa grup izin NAS: Jika error tetap muncul meskipun dijalankan sebagai root, aturan izin titik pemasangan mungkin memetakan root ke pengguna anonim. Atur aturan izin ke no_squash untuk mencegah hal ini. Untuk detailnya, lihat Manage permission groups.

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

Saat reclaimPolicy diatur ke Delete dan archiveOnDelete diatur ke false dalam StorageClass Anda, penghapusan subdirektori lebih lambat daripada pembuatannya. Hal ini memblokir antrean tugas controller dan mencegah pembuatan persistent volume (PV) baru.

Atur archiveOnDelete ke true dalam StorageClass Anda. Dengan pengaturan ini, penghapusan PV hanya mengganti nama subdirektori yang bersangkutan tanpa menghapus isinya — operasi yang jauh lebih cepat. Bersihkan direktori yang telah diganti namanya secara terpisah, misalnya dengan menjalankan pekerjaan pembersihan terjadwal atau menggunakan beberapa pod untuk menghapus subdirektori secara konkuren sesuai pola penamaan tertentu.

Waktu pemasangan lebih lama dari yang diharapkan

Saat kedua kondisi berikut terpenuhi, Kubernetes menjalankan chmod dan chown secara rekursif pada volume yang dipasang, sehingga memperlambat operasi pemasangan secara signifikan:

  • accessModes diatur ke ReadWriteOnce pada persistent volume (PV) dan Persistent Volume Claim (PVC)

  • securityContext.fsGroup dikonfigurasi dalam spesifikasi pod

Pilih salah satu pendekatan berikut:

  • Hapus fsGroup: Hapus bidang fsGroup dari securityContext jika workload Anda tidak memerlukannya.

  • Atur izin secara manual sebelumnya: Pasang direktori target ke instans ECS, jalankan chown atau chmod untuk mengatur izin yang diperlukan, lalu gunakan volume NAS melalui Container Storage Interface (CSI). Lihat Mount a statically provisioned NAS volume atau Use dynamically provisioned NAS volumes.

  • Gunakan fsGroupChangePolicy (Kubernetes 1.20+): Atur fsGroupChangePolicy ke OnRootMismatch dalam securityContext pod. Kubernetes kemudian hanya menjalankan chmod dan chown saat volume pertama kali dipasang — pemasangan berikutnya jauh lebih cepat. Untuk detailnya, lihat Configure a security context for a pod or container.

Error unknown filesystem type "xxx" saat pemasangan

Node tempat pod dijadwalkan tidak memiliki dependensi penyimpanan yang diperlukan. Verifikasi bahwa konfigurasi volume sudah benar.

Pod macet di ContainerCreating saat memasang dua PVC NAS

Jika sebuah pod memasang dua PVC yang mengarah ke sistem file NAS yang sama dan macet di status ContainerCreating, kemungkinan besar kedua PV tersebut memiliki nilai spec.csi.volumeHandle yang sama. Kubelet menganggap keduanya sebagai PV yang sama, sehingga menyebabkan konflik pemasangan — meskipun pemasangan masing-masing PVC secara individual berfungsi.

Atur spec.csi.volumeHandle yang unik untuk setiap PV. Pendekatan yang direkomendasikan adalah mengatur nilainya sama dengan nama PV (metadata.name).

Bagaimana cara memasang sistem file NAS dengan TLS menggunakan CSI?

Enkripsi TLS untuk volume NAS menggunakan protokol pemasangan alinas, yang mengarahkan traffic melalui klien Alibaba Cloud NAS.

Penting

Klien NAS menggunakan Stunnel untuk enkripsi TLS. Untuk workload ber-throughput tinggi, hal ini dapat mengonsumsi sumber daya CPU yang signifikan — dalam kasus ekstrem, satu titik pemasangan saja dapat menggunakan seluruh core CPU. Untuk detailnya, lihat Encryption in transit for NFS file systems.

  1. Instal komponen cnfs-nas-daemon.

  2. Pada halaman Add-ons, edit konfigurasi csi-plugin untuk mengaktifkan FeatureGate AlinasMountProxy=true.

  3. Terapkan YAML berikut ke kluster Anda. Kedua contoh menggunakan mountProtocol: alinas dan opsi pemasangan tls.

    Volume yang disediakan secara dinamis

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-tls
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    - tls   # Aktifkan enkripsi TLS.
    parameters:
      volumeAs: subpath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/"
      mountProtocol: alinas  # Gunakan klien Alibaba Cloud NAS.
    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
    ParameterDeskripsi
    parameters.mountProtocolMenentukan klien pemasangan. Atur ke alinas untuk menggunakan klien Alibaba Cloud NAS. Nilai default-nya adalah "" (protokol NFS standar).
    mountOptionsDaftar opsi pemasangan. Tambahkan tls untuk mengaktifkan enkripsi TLS. Opsi tls hanya berlaku ketika mountProtocol diatur ke alinas.

    Volume 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 sesuai dengan nama PV.
        volumeAttributes:
          server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
          path: "/csi"
          mountProtocol: alinas  # Gunakan klien Alibaba Cloud NAS.
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      - tls  # Aktifkan enkripsi TLS.
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas-tls
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas-tls
    ParameterDeskripsi
    spec.csi.volumeAttributes.mountProtocolMenentukan klien pemasangan. Atur ke alinas untuk menggunakan klien Alibaba Cloud NAS. Nilai default-nya adalah "" (protokol NFS standar).
    spec.mountOptionsDaftar opsi pemasangan. Tambahkan tls untuk mengaktifkan enkripsi TLS. Opsi tls hanya berlaku ketika mountProtocol diatur ke alinas.

Bagaimana cara menerapkan isolasi pengguna atau kelompok pada NAS?

Jalankan proses kontainer sebagai pengguna nobody (UID/GID 65534) untuk mengisolasi akses antara pengguna dan kelompok berbeda pada volume NAS bersama.

  1. Tambahkan bidang securityContext ke manifes workload Anda:

    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                        # File dan direktori baru mendapatkan UID/GID 65534 (nobody).
            fsGroupChangePolicy: "OnRootMismatch" # Hanya perbarui kepemilikan jika izin direktori root tidak sesuai.
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            securityContext:
              runAsUser: 65534               # Jalankan semua proses sebagai UID 65534 (nobody).
              runAsGroup: 65534              # Jalankan semua proses dengan GID utama 65534 (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. Verifikasi bahwa proses kontainer dijalankan sebagai 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
  3. Verifikasi bahwa file dan direktori baru di path pemasangan NAS memiliki kepemilikan 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 .

Apakah beberapa aplikasi dapat berbagi volume NAS yang sama?

Ya. NAS menyediakan penyimpanan bersama, sehingga satu PVC dapat dipasang oleh beberapa pod secara bersamaan.

Untuk perilaku penulisan konkuren dan batasan yang diketahui, lihat How do I prevent exceptions that may occur when multiple processes or clients concurrently write data to a log file? dan How do I resolve the latency in writing data to an NFS file system?

Untuk instruksi pemasangan, lihat Use CNFS to manage NAS file systems (recommended), Mount a statically provisioned NAS volume, dan Use dynamically provisioned NAS volumes.

Error failed to do setup volume saat memasang volume NAS di ACS

Error ini biasanya berarti titik pemasangan NAS berada di virtual private cloud (VPC) yang berbeda dari kluster Anda. Ikuti langkah-langkah berikut untuk memverifikasi.

  1. Dapatkan ID VPC kluster.

    1. Masuk ke Konsol ACS. Di panel navigasi kiri, klik Clusters.

    2. Klik nama kluster. Di panel navigasi kiri, pilih Configurations > ConfigMaps.

    3. Beralih ke namespace kube-system dan klik acs-profile. Catat nilai vpcId (misalnya, vpc-gw87c9kdqs25al2z****).

  2. Dapatkan ID VPC dari titik pemasangan NAS.

    1. Masuk ke Konsol NAS. Di panel navigasi kiri, pilih File System > File System List, lalu klik nama NAS.Konsol NAS

    2. Di panel navigasi kiri, klik Mount Targets. Di bagian Mount Target, temukan ID VPC untuk titik pemasangan Anda.

  3. Bandingkan kedua ID VPC tersebut. Jika tidak cocok, titik pemasangan NAS tidak dapat diakses dari kluster Anda. Ikuti petunjuk dalam Mount NAS file systems on ACS untuk membuat titik pemasangan di VPC yang benar atau perbarui StorageClass Anda agar menggunakan alamat titik pemasangan yang tepat.

Penggunaan

Tidak dapat membuat atau mengubah direktori pada volume NAS

Proses kontainer non-root tidak memiliki izin menulis pada PV yang dipasang. Perbaiki masalah ini dengan salah satu pendekatan berikut:

  • Gunakan init container: Jalankan init container dengan izin root yang memasang PV dan menjalankan chmod atau chown untuk mengatur izin yang diperlukan pada direktori pemasangan.

  • Gunakan fsGroupChangePolicy: Atur fsGroupChangePolicy ke OnRootMismatch dalam securityContext pod. Kubernetes secara otomatis menjalankan chmod dan chown saat volume pertama kali dipasang.

Error NFS Stale File Handle saat operasi baca/tulis

Ini adalah perilaku standar NFS. Error ini terjadi ketika satu klien menghapus file sementara klien lain masih memegang deskriptor file yang terbuka untuk file tersebut:

  1. Klien A membuka /data/file.txt.

  2. Klien B menghapus /data/file.txt.

  3. Klien A mencoba membaca atau menulis menggunakan deskriptor file yang kini tidak valid dan mendapatkan error tersebut.

NAS tidak menegakkan konsistensi data pada level ini. Tangani error tersebut dalam logika aplikasi Anda — misalnya, dengan menerapkan penguncian file atau membuka ulang handle file saat error ini terjadi.

Pelepasan pemasangan

Timeout saat melepas pemasangan dan pod macet di status Terminating

Saat pod dengan volume NAS yang dipasang dihapus dan macet di status Terminating, penyebabnya biasanya adalah salah konfigurasi pada DaemonSet csi-plugin di mana /var/run dipasang sebagai volume hostPath.

Jalankan perintah berikut untuk mengonfirmasi:

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'

Jika perintah tersebut mengembalikan output apa pun, berarti salah konfigurasi tersebut ada. Perbaiki DaemonSet tersebut dengan patch berikut:

Peringatan

Patch ini menyebabkan pod csi-plugin restart. Evaluasi dampaknya terhadap workload Anda sebelum menerapkan perubahan ini di lingkungan produksi.

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'

Setelah patch diterapkan, pod csi-plugin akan restart dengan konfigurasi yang benar dan masalah pelepasan pemasangan teratasi.