すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:NAS ボリュームに関するよくある質問

最終更新日:Dec 03, 2025

このトピックでは、ネットワークアタッチトストレージ (NAS) ボリュームに関するよくある質問 (FAQ) と一般的な問題のソリューションについて説明します。

クイックナビゲーション

カテゴリ

問題

マウント

使用

アンマウント

アンマウントがタイムアウトし、Pod が Terminating 状態でスタックする

マウント

マウント時のエラー:chown: Operation not permitted

現象

NAS ボリュームをマウントすると、エラーメッセージ chown: Operation not permitted が表示されます。

原因

ホスト上でコンテナーを起動するために使用されるロールに、NAS ボリュームを変更する権限がありません。

ソリューション

  1. コンテナープロセスを起動するユーザーが root 権限を持っていない場合は、root ユーザーを使用して `chown` および `chgrp` 操作を実行します。Persistent Volume (PV) の accessModesReadWriteOnce の場合は、securityContext.fsGroup を使用して、Pod のボリュームアクセス権限と所有権変更ポリシーを構成することもできます。詳細については、「Pod またはコンテナーのセキュリティコンテキストの設定」をご参照ください。

  2. root ユーザーとして実行している場合でもエラーが解決しない場合は、NAS マウントポイントの権限グループを確認し、root ユーザーがファイルシステムにアクセスできることを確認してください。ユーザー権限は No_squash に設定する必要があります。詳細については、「権限グループの管理」をご参照ください。

動的にプロビジョニングされた NAS ボリュームのマウント時にコントローラーのタスクキューが一杯になる

現象

動的にプロビジョニングされた NAS ボリュームを使用する場合、サブディレクトリが削除されるよりも速く作成されると、コントローラーのタスクキューがブロックされる可能性があります。これにより、新しい PV の作成が妨げられます。

原因

この問題は、クラスターが動的にプロビジョニングされた NAS ボリュームを使用し、StorageClass の reclaimPolicyDelete に設定され、archiveOnDeletefalse に設定されている場合に発生します。

ソリューション

archiveOnDeletetrue に設定します。PV が削除されると、NAS ファイルシステム上の対応するサブディレクトリは、その内容が完全に削除されるのではなく、名前が変更されます。その後のファイル削除は、ユーザーの責任で行う必要があります。たとえば、過負荷のノードのルートディレクトリにスケジュールされた削除ジョブを構成したり、複数の Pod を使用して特定のフォーマットに一致するサブディレクトリを同時に削除したりできます。

NAS ボリュームのマウント時間の増加

現象

NAS ボリュームのマウントに時間がかかります。

原因

マウントされた PV および Persistent Volume Claim (PVC) に chmod または chown 操作が再帰的に適用されると、マウント時間が増加する可能性があります。これは、次の両方の条件が満たされた場合に発生します:

  • PV および PVC テンプレートで AccessModes パラメーターが ReadWriteOnce に設定されている。

  • アプリケーションテンプレートで securityContext.fsGroup パラメーターが構成されている。

ソリューション

  • アプリケーションテンプレートで securityContext.fsGroup パラメーターが構成されている場合は、securityContext ブロックから fsGroup パラメーターを削除します。

  • マウントディレクトリ内のファイルをターゲットの UID と mode に変更するには、ターゲットディレクトリを ECS インスタンスに手動でマウントします。その後、chown および chmod コマンドを実行します。コマンドが実行された後、Container Storage Interface (CSI) を介して NAS ボリュームを使用します。CSI を介して NAS ボリュームを使用する方法の詳細については、「静的にプロビジョニングされた NAS ボリュームの使用」または「動的にプロビジョニングされた NAS ボリュームの使用」をご参照ください。

  • Kubernetes クラスターのバージョン 1.20 以降では、fsGroupChangePolicyOnRootMismatch に設定することもできます。これにより、chmod および chown 操作は、ボリュームが初めてマウントされるときにのみ実行されます。その後のマウントはより高速になります。fsGroupChangePolicy パラメーターの詳細については、「Pod またはコンテナーのセキュリティコンテキストを設定する」をご参照ください。

マウント時のエラー:unknown filesystem type "xxx"

現象

NAS ボリュームをマウントすると、エラーメッセージ unknown filesystem type "xxx" が表示されます。

原因

Pod がスケジュールされているノードに、必要なストレージの依存関係がインストールされていません。

ソリューション

ボリュームの構成が正しいことを確認してください。

2 つの NAS PVC のマウント時に Pod が ContainerCreating 状態でスタックする

現象

Pod が 2 つの PVC を使用して NAS ボリュームをマウントしようとすると、Pod の起動に失敗し、ContainerCreating 状態のままになります。ただし、PVC のいずれか 1 つだけを使用すると、ボリュームは正常にマウントできます。

原因

2 つの PVC に関連付けられている PV の spec.csi.volumeHandle が同じです。これにより、kubelet はマウントプロセス中に 2 つの PV を単一のボリュームとして扱います。

ソリューション

spec.csi.volumeHandle フィールドの値を PV 名と一致するように変更します。

CSI を使用して TLS で NAS ファイルシステムをマウントする方法

NAS では、TLS プロトコルを使用して、クライアントと NAS サービス間の転送中のデータを保護できます。これにより、送信中にデータが盗まれたり改ざんされたりするのを防ぎます。CSI では、Alibaba Cloud NAS クライアントを使用してボリュームをマウントし、マウントプロトコルを alinas に設定することで TLS マウントオプションを有効にできます。

重要

NAS クライアントツールは、Stunnel リスナープロセスを TLS 暗号化プロキシとして使用します。高スループットのアプリケーションの場合、Stunnel リスナープロセスは暗号化と復号を実行するために大量の CPU リソースを消費します。極端な場合、各マウントで CPU コア全体を消費する可能性があります。詳細については、「NFS ファイルシステムの転送中の暗号化」をご参照ください。

  1. cnfs-nas-daemon コンポーネントをインストールします。詳細については、「cnfs-nas-daemon コンポーネントの管理」をご参照ください。

  2. [アドオン] ページで、csi-plugin コンポーネントを見つけ、AlinasMountProxy=true FeatureGate を有効にするように設定します。

  3. 次の例を使用して、動的にプロビジョニングされた NAS ボリュームまたは静的にプロビジョニングされた NAS ボリュームをマウントします。

    動的にプロビジョニングされた NAS ボリュームを使用する例

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-tls
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    - tls   # tls マウントオプションを追加します。
    parameters:
      volumeAs: subpath
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/"
      mountProtocol: alinas  # alinas クライアントをマウントに使用することを指定します。
    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

    パラメーター

    説明

    parameters.mountProtocol

    このパラメーターを alinas に設定して、Alibaba Cloud NAS クライアントを使用します。このパラメーターを空のままにすると、デフォルトで NFS プロトコルが使用されます。

    mountOptions

    tls パラメーターを追加して TLS を有効にします。このパラメーターは、mountProtocolalinas に設定されている場合にのみ有効です。デフォルトでは、TLS は無効になっています。

    静的にプロビジョニングされた NAS ボリュームを使用する例

    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   # PV 名と同じにする必要があります。
        volumeAttributes:
          server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
          path: "/csi"
          mountProtocol: alinas # alinas クライアントをマウントに使用することを指定します。
      mountOptions:
      - nolock,tcp,noresvport
      - vers=3
      - tls # tls マウントオプションを追加します。
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-nas-tls
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
      selector:
        matchLabels:
          alicloud-pvname: pv-nas-tls

    パラメーター

    説明

    spec.csi.volumeAttributes.mountProtocol

    このパラメーターを alinas に設定して、Alibaba Cloud NAS クライアントを使用します。このパラメーターを空のままにすると、デフォルトで NFS プロトコルが使用されます。

    spec.mountOptions

    tls パラメーターを追加して TLS を有効にします。このパラメーターは、mountProtocolalinas に設定されている場合にのみ有効です。デフォルトでは、TLS は無効になっています。

NAS でユーザーまたはグループの分離を実装する方法

異なるユーザーとグループ間のデータセキュリティを確保するために、次の手順を実行して NAS のユーザーまたはグループを分離できます。

  1. 次の YAML テンプレートを使用して、Pod 内で nobody ユーザーとしてプロセスを開始します。作成されたディレクトリの UID と GID は 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    # ディレクトリまたはファイルが作成されると、UID と GID は 65534 (nobody ユーザー) になります。
            fsGroupChangePolicy: "OnRootMismatch"    # ボリューム内のコンテンツのオーナーと権限は、ルートディレクトリのオーナーと権限がボリュームの期待される権限と異なる場合にのみ変更されます。
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            securityContext:
              runAsUser: 65534    # コンテナー内のすべてのプロセスは、ユーザー ID 65534 (nobody ユーザー) で実行されます。
              runAsGroup: 65534   # コンテナー内のすべてのプロセスは、プライマリグループ ID 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. コンテナーで top コマンドを実行して、USER が nobody であることを確認します。

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

    期待される出力:

    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

    期待される出力は、nobody ユーザーが top コマンドを実行していることを示しています。

  3. NAS マウントディレクトリに作成されたディレクトリとファイルが nobody によって所有されていることを確認します。

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

    期待される出力:

    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 .

    期待される出力は、/data に作成された test ファイルと test-dir ディレクトリの対応する UID と GID が nobody ユーザーに属していることを示しています。

複数のコンテナー化されたアプリケーションで同じ NAS ボリュームを使用できますか?

はい。NAS は共有ストレージを提供します。これは、単一の PVC を複数のアプリケーションで同時に使用できることを意味します。

ACK での NAS ボリュームのマウント失敗と「failed to do setup volume」エラー

Container Service for Kubernetes (ACK) で NAS ボリュームを使用すると、マウント操作が失敗し、failed to do setup volume エラーでタイムアウトすることがあります。この問題は、NAS の構成が正しくないことが原因である可能性があります。正しい手順については、「Container Service for Kubernetes (ACK) で NAS ボリュームをマウントする」をご参照ください。

最も一般的な原因は、VPC 構成の不一致です。StorageClass で指定されたマウントポイントアドレス (server) は、クラスターと同じ VPC 内にある必要があります。

  1. クラスターの VPC ID を見つけます。

    1. Container Service for Kubernetes (ACK) コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。 [クラスター] ページで、対象のクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[設定 > ConfigMaps] をクリックします。

    2. [名前空間]を kube-system に設定して acs-profile を見つけてクリックし、表示されたページで vpcId (vpc-gw87c9kdqs25al2z**** など) を見つけて記録します。

  2. NAS コンソールで対応するマウントポイントアドレスを見つけます。

    1. NAS コンソールにログインします。 左側のナビゲーションウィンドウで、[ファイルシステム] > [ファイルシステム] を選択します。 目的の NAS ファイルシステムの名前をクリックします。

    2. [マウントポイント] をクリックします。[マウントポイント] セクションで、VPC ID に対応するマウントポイントアドレスを探します。

  3. クラスターの VPC ID がマウントポイントの VPC と一致することを確認します。

    一致しない場合は、設定を再構成します。詳細については、「Container Service for Kubernetes (ACK) で NAS ボリュームをマウントする」をご参照ください。

NAS ボリューム上のディレクトリの作成または変更ができない

現象

NAS ボリューム上のディレクトリを作成または変更できません。

原因

root 以外のユーザーには PV への書き込みに必要な権限がないため、ディレクトリの作成または変更が許可されていません。

ソリューション

次のいずれかの方法を使用して chmod または chown コマンドを実行し、マウントディレクトリの権限を変更できます。これにより、ディレクトリに対する操作を実行できるようになります。

  • root 権限を持つ Init コンテナーを起動して PV をマウントします。次に、chmod または chown コマンドを実行して、マウントディレクトリの権限を変更します。

  • fsGroupChangePolicyOnRootMismatch に設定します。これにより、ボリュームが初めてマウントされるときに chmod または chown コマンドが自動的に実行されます。

読み書き操作中の NFS Stale File Handle エラー

現象

クライアントがファイルへの読み取りまたは書き込みを行う際に、NFS Stale File Handle エラーを受け取ります。

原因

NAS はデータ整合性を保証しません。たとえば、2 つのクライアントが同じ NAS ボリュームをマウントし、クライアント 1 がファイルを開いてそのファイル記述子 (fd) を取得した場合、クライアント 2 がそのファイルを削除した後にクライアント 1 がファイルへの読み取りまたは書き込みを試みると、`NFS Stale File Handle` エラーを受け取ります。

ソリューション

NAS はデータ整合性を保証しません。ビジネスシナリオに基づいてデータ整合性の問題を処理する必要があります。

アンマウント

アンマウントがタイムアウトし、Pod が Terminating 状態でスタックする

症状

マウントされた NAS ボリュームを持つ Pod を削除すると、アンマウント操作が失敗し、Pod が Terminating 状態でスタックします。

原因

この問題は、csi-plugin が /var/run を直接マウントしていることが原因です。次のコマンドを実行して、/var/run が直接マウントされているかどうかを確認できます。出力が空でない場合、ディレクトリは直接マウントされています。

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

ソリューション

次のコマンドを実行して、csi-plugin の YAML ファイルに手動でパッチを適用します。パッチが適用されると、問題は解決します。

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'