Tüm Ürünler
Search
Belge Merkezi

Container Service for Kubernetes:NAS volume FAQ

Son Güncelleme:Oct 06, 2026

Bu konu, ACK ve ACS kümelerindeki Network Attached Storage (NAS) birimleriyle ilgili yaygın sorunları kapsar. Bağlama hataları, izin sorunları ve bağlantı kesme zaman aşımları ele alınmaktadır.

Hızlı gezinme

Kategori Sorun
Mounting chown: Operation not permitted during mount
Mounting Controller task queue is full when mounting a dynamically provisioned NAS volume
Mounting Mount times are longer than expected
Mounting unknown filesystem type "xxx" error during mount
Mounting Pod stuck in ContainerCreating when mounting two NAS PVCs
Mounting How do I mount a NAS file system with TLS using CSI?
Mounting How do I implement user or group isolation on NAS?
Mounting Can multiple applications share the same NAS volume?
Mounting failed to do setup volume error when mounting a NAS volume in ACS
Usage Cannot create or modify directories on a NAS volume
Usage NFS Stale File Handle error during read/write operations
Unmounting Unmount times out and pod is stuck in Terminating state

Mounting

chown: Operation not permitted during mount

Konteyner işlemi, NAS biriminde dosya sahipliğini değiştirmek için gerekli izne sahip değildir. Bu sorunu aşağıdaki yaklaşımlardan birini kullanarak çözebilirsiniz:

  • Root olarak çalıştırın veya fsGroup kullanın: accessModes değeri ReadWriteOnce olarak ayarlanmışsa, pod için birim sahipliğini belirlemek üzere securityContext.fsGroup parametresini yapılandırın. Ayrıntılar için bkz. Configure a security context for a pod or container.

  • NAS izin grubunu kontrol edin: Root olarak çalıştırırken hata devam ediyorsa, bağlama hedefinin izin kuralı root kullanıcısını anonim bir kullanıcıyla eşliyor olabilir. Bunu önlemek için izin kuralını no_squash olarak ayarlayın. Ayrıntılar için bkz. Manage permission groups.

Controller task queue is full when mounting a dynamically provisioned NAS volume

StorageClass içinde reclaimPolicy değeri Delete ve archiveOnDelete değeri false olarak ayarlandığında, alt dizin silme işlemleri oluşturma işlemlerinden daha yavaş gerçekleşir. Bu durum denetleyicinin görev kuyruğunu engeller ve yeni kalıcı birimlerin (PV) oluşturulmasını önler.

StorageClass içinde archiveOnDelete değerini true olarak ayarlayın. Bu ayarla, bir PV silindiğinde ilgili alt dizinin içeriği silinmek yerine yeniden adlandırılır; bu çok daha hızlı bir işlemdir. Yeniden adlandırılan dizinleri ayrıca temizleyin; örneğin, zamanlanmış bir temizleme işi çalıştırarak veya belirli bir adlandırma desenine uyan alt dizinleri eşzamanlı olarak silen birden fazla pod kullanarak bunu yapabilirsiniz.

Mount times are longer than expected

Aşağıdaki iki koşul da sağlandığında Kubernetes, bağlı birim üzerinde yinelemeli olarak chmod ve chown komutlarını çalıştırır; bu da bağlama işlemlerini önemli ölçüde yavaşlatır:

  • Kalıcı birimde (PV) ve Kalıcı Birim Talebinde (PVC) accessModes değeri ReadWriteOnce olarak ayarlanmıştır.

  • Pod belirtiminde securityContext.fsGroup yapılandırılmıştır.

Aşağıdaki yaklaşımlardan birini seçin:

  • fsGroup öğesini kaldırın: İş yükünüz buna ihtiyaç duymuyorsa securityContext içinden fsGroup alanını kaldırın.

  • İzinleri manuel olarak önceden ayarlayın: Hedef dizini bir ECS örneğine bağlayın, gerekli izinleri ayarlamak için chown veya chmod komutlarını çalıştırın, ardından NAS birimini Container Storage Interface (CSI) üzerinden kullanın. Bkz. Mount a statically provisioned NAS volume veya Use dynamically provisioned NAS volumes.

  • fsGroupChangePolicy kullanın (Kubernetes 1.20+): Pod'un securityContext bölümünde fsGroupChangePolicy değerini OnRootMismatch olarak ayarlayın. Kubernetes bu durumda chmod ve chown komutlarını yalnızca birim ilk kez bağlandığında çalıştırır; sonraki bağlamalar çok daha hızlı olur. Ayrıntılar için bkz. Configure a security context for a pod or container.

unknown filesystem type "xxx" error during mount

Pod'un zamanlandığı düğümde gerekli depolama bağımlılıkları eksiktir. Birim yapılandırmasının doğru olduğunu doğrulayın.

Pod stuck in ContainerCreating when mounting two NAS PVCs

Bir pod, aynı NAS dosya sistemini işaret eden iki PVC'yi bağlarken ContainerCreating durumunda takılı kalıyorsa, iki PV muhtemelen aynı spec.csi.volumeHandle değerini paylaşıyor demektir. Kubelet bunları aynı PV olarak algılar ve bu da bir bağlama çakışmasına neden olur; oysa her bir PVC ayrı ayrı bağlanabilir.

Her PV için benzersiz bir spec.csi.volumeHandle değeri ayarlayın. Önerilen yaklaşım, bu değeri PV adı ile aynı olacak şekilde ayarlamaktır (metadata.name).

How do I mount a NAS file system with TLS using CSI?

NAS birimleri için TLS şifreleme, trafiği Alibaba Cloud NAS istemcisi üzerinden yönlendiren alinas bağlama protokolünü kullanır.

Önemli

NAS istemcisi TLS şifreleme için Stunnel kullanır. Yüksek aktarım hızına sahip iş yükleri için bu durum önemli CPU kaynakları tüketebilir; aşırı durumlarda tek bir bağlama noktası tam bir CPU çekirdeğini kullanabilir. Ayrıntılar için bkz. Encryption in transit for NFS file systems.

  1. Install the cnfs-nas-daemon component.

  2. Add-ons sayfasında, AlinasMountProxy=true FeatureGate özelliğini etkinleştirmek için csi-plugin yapılandırmasını düzenleyin.

  3. Aşağıdaki YAML dosyasını kümenize uygulayın. Her iki örnek de mountProtocol: alinas ve tls bağlama seçeneğini kullanır.

    Dynamically provisioned volume

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-tls
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    - tls   # Enable TLS encryption.
    parameters:
      volumeAs: subpath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/"
      mountProtocol: alinas  # Use the Alibaba Cloud NAS client.
    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 Description
    parameters.mountProtocol Bağlama istemcisini belirtir. Alibaba Cloud NAS istemcisini kullanmak için alinas olarak ayarlayın. Varsayılan değer "" (standart NFS protokolü) şeklindedir.
    mountOptions Bağlama seçeneklerinin listesi. TLS şifrelemeyi etkinleştirmek için tls ekleyin. tls seçeneği yalnızca mountProtocol değeri alinas olarak ayarlandığında etkili olur.

    Statically provisioned volume

    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   # Must match the PV name.
        volumeAttributes:
          server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
          path: "/csi"
          mountProtocol: alinas  # Use the Alibaba Cloud NAS client.
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      - tls  # Enable TLS encryption.
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas-tls
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas-tls
    Parameter Description
    spec.csi.volumeAttributes.mountProtocol Bağlama istemcisini belirtir. Alibaba Cloud NAS istemcisini kullanmak için alinas olarak ayarlayın. Varsayılan değer "" (standart NFS protokolü) şeklindedir.
    spec.mountOptions Bağlama seçeneklerinin listesi. TLS şifrelemeyi etkinleştirmek için tls ekleyin. tls seçeneği yalnızca mountProtocol değeri alinas olarak ayarlandığında etkili olur.

How do I implement user or group isolation on NAS?

Paylaşılan bir NAS biriminde farklı kullanıcılar ve gruplar arasındaki erişimi yalıtmak için konteyner işlemlerini nobody kullanıcısı (UID/GID 65534) olarak çalıştırın.

  1. İş yükü manifestinize securityContext alanlarını ekleyin:

    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                        # New files and directories get UID/GID 65534 (nobody).
            fsGroupChangePolicy: "OnRootMismatch" # Only update ownership when root directory permissions don't match.
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            securityContext:
              runAsUser: 65534               # Run all processes as UID 65534 (nobody).
              runAsGroup: 65534              # Run all processes with primary GID 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. Konteyner işlemlerinin nobody olarak çalıştığını doğrulayın:

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

    Beklenen çıktı:

    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. NAS bağlama yolundaki yeni dosya ve dizinlerin nobody sahipliğine sahip olduğunu doğrulayın:

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

    Beklenen çıktı:

    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 .

Can multiple applications share the same NAS volume?

Evet. NAS paylaşılan depolama sağladığından tek bir PVC aynı anda birden fazla pod tarafından bağlanabilir.

Eşzamanlı yazma davranışı ve bilinen sınırlamalar için bkz. How do I prevent exceptions that may occur when multiple processes or clients concurrently write data to a log file? ve How do I resolve the latency in writing data to an NFS file system?

Bağlama talimatları için bkz. Use CNFS to manage NAS file systems (recommended), Mount a statically provisioned NAS volume ve Use dynamically provisioned NAS volumes.

failed to do setup volume error when mounting a NAS volume in ACS

Bu hata genellikle NAS bağlama hedefinin kümenizden farklı bir sanal özel bulut (VPC) içinde bulunduğunu gösterir. Doğrulamak için şu adımları izleyin.

  1. Kümenin VPC kimliğini alın.

    1. ACS konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.

    2. Küme adına tıklayın. Sol gezinme bölmesinde Configurations > ConfigMaps seçeneklerini seçin.

    3. kube-system ad alanına geçin ve acs-profile öğesine tıklayın. vpcId değerini kaydedin (örneğin, vpc-gw87c9kdqs25al2z****).

  2. NAS bağlama hedefinin VPC kimliğini alın.

    1. NAS konsolu üzerinde oturum açın. Sol gezinme bölmesinde File System > File System List seçeneklerini seçin ve NAS adına tıklayın.NAS konsolu

    2. Sol gezinme bölmesinde Mount Targets seçeneğine tıklayın. Mount Target bölümünde bağlama hedefiniz için VPC kimliğini bulun.

  3. İki VPC kimliğini karşılaştırın. Eşleşmiyorsa NAS bağlama hedefine kümenizden erişilemiyor demektir. Doğru VPC'de bir bağlama hedefi oluşturmak veya StorageClass'ınızı doğru bağlama hedefi adresini kullanacak şekilde güncellemek için Mount NAS file systems on ACS içindeki talimatları izleyin.

Usage

Cannot create or modify directories on a NAS volume

Root olmayan bir konteyner işlemi, bağlı PV üzerinde yazma iznine sahip değildir. Bu sorunu aşağıdaki yaklaşımlardan birini kullanarak çözebilirsiniz:

  • Init konteyneri kullanın: PV'yi bağlayan ve bağlama dizininde gerekli izinleri ayarlamak için chmod veya chown komutlarını çalıştıran root izinlerine sahip bir init konteyneri başlatın.

  • fsGroupChangePolicy kullanın: Pod'un securityContext bölümünde fsGroupChangePolicy değerini OnRootMismatch olarak ayarlayın. Kubernetes, birim ilk kez bağlandığında otomatik olarak chmod ve chown komutlarını çalıştırır.

NFS Stale File Handle error during read/write operations

Bu, standart NFS davranışıdır. Bir istemci bir dosyayı silerken başka bir istemci hâlâ o dosya için açık bir dosya tanımlayıcısı tutuyorsa ortaya çıkar:

  1. A İstemcisi /data/file.txt dosyasını açar.

  2. B İstemcisi /data/file.txt dosyasını siler.

  3. A İstemcisi artık geçersiz olan dosya tanımlayıcısını kullanarak okuma veya yazma işlemi yapmaya çalışır ve hatayla karşılaşır.

NAS bu düzeyde veri tutarlılığını zorlamaz. Hatayı uygulama mantığınızda yönetin; örneğin, dosya kilitleme uygulayarak veya bu hata oluştuğunda dosya tanıtıcılarını yeniden açarak sorunu çözün.

Unmounting

Unmount times out and pod is stuck in Terminating state

Bağlı bir NAS birimine sahip bir pod silindiğinde ve Terminating durumunda takılı kaldığında, bunun nedeni genellikle /var/run dizininin hostPath birimi olarak bağlandığı csi-plugin DaemonSet içindeki yanlış bir yapılandırmadır.

Doğrulamak için aşağıdaki komutu çalıştırın:

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

Komut herhangi bir çıktı döndürürse yanlış yapılandırma mevcuttur. Düzeltmek için DaemonSet'e yama uygulayın:

Uyarı

Bu yama csi-plugin pod'larının yeniden başlatılmasına neden olur. Bu değişikliği üretim ortamında uygulamadan önce iş yükleriniz üzerindeki etkisini değerlendirin.

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'

Yama uygulandıktan sonra csi-plugin pod'ları doğru yapılandırmayla yeniden başlar ve bağlantı kesme sorunu çözülür.