このトピックでは、NAS ファイルシステム (NAS) ボリュームに関するよくある質問への回答を提供します。
動的にプロビジョニングされた NAS ボリュームを使用する場合、alicloud-nas-controller のタスクキューがいっぱいで PV を作成できない場合はどうすればよいですか?
NAS ボリュームをマウントすると、システムが「unknown filesystem type "xxx"」と表示するのはなぜですか?
クライアントが NAS ボリュームからデータを読み取るか、NAS ボリュームにデータを書き込むときに、システムが「NFS Stale File Handle」と表示するのはなぜですか?
2 つの PVC を使用して 2 つの異なる NAS ボリュームをマウントするポッドが ContainerCreating 状態のままの場合はどうすればよいですか?
NAS ボリュームのアンマウントがタイムアウトし、ポッドが Terminating 状態のままの場合はどうすればよいですか?
NAS ボリュームをマウントすると、システムが chown: Operation not permitted と表示するのはなぜですか?
問題
NAS ファイルシステムをマウントすると、システムが chown: Operation not permitted と表示します。
原因
コンテナーの実行に使用されるロールに、NAS ボリュームを管理する権限がありません。
解決策
コンテナー プロセスを起動したユーザーには root 権限がありません。chown 操作と chgrp 操作を実行するには、ルートアカウントを使用する必要があります。永続ボリューム (PV) の
accessModesがReadWriteOnceに設定されている場合は、securityContext.fsGroupを使用して、ポッドのボリューム権限と所有権変更ポリシーを構成することもできます。詳細については、「ポッドのボリューム権限と所有権変更ポリシーの構成」をご参照ください。ルートアカウントを使用しても問題が解決しない場合は、NAS マウントポイントの権限グループでユーザー権限が [匿名なし (no_squash)] に設定されているかどうかを確認してください。この構成では、ルートユーザーがファイルシステムにアクセスできます。詳細については、「権限グループの管理」をご参照ください。
動的にプロビジョニングされた NAS ボリュームを使用する場合、alicloud-nas-controller のタスクキューがいっぱいで PV を作成できない場合はどうすればよいですか?
問題
動的にプロビジョニングされた NAS ボリュームを使用する場合、サブディレクトリの作成速度がサブディレクトリの削除速度よりも速い場合、alicloud-nas-controller のタスクキューがいっぱいになり、PV を作成できない可能性があります。
原因
動的にプロビジョニングされた NAS ボリュームをマウントする StorageClass の構成で、reclaimPolicy パラメーターが Delete に設定され、archiveOnDelete パラメーターが false に設定されています。
解決策
archiveOnDelete を true に設定します。こうすることで、PV が削除されると、NAS ファイルシステム内のマウントされたサブディレクトリの名前のみが変更されます。サブディレクトリ内のファイルは削除されません。
これらのファイルは自分で削除する必要があります。たとえば、スケジュールによってルートディレクトリ内のファイルを自動的に削除するようにノードを構成したり、複数のポッドを起動してサブディレクトリ内の特定の形式のファイルを同時に削除したりできます。
NAS ボリュームのマウントに時間がかかるのはなぜですか?
問題
NAS ボリュームのマウントに時間がかかります。
原因
次の条件が満たされている場合、ボリュームのマウント時に chmod または chown 操作が実行され、時間がかかります。
永続ボリューム (PV) および永続ボリューム要求 (PVC) テンプレートで、AccessModes パラメーターが ReadWriteOnce に設定されています。
アプリケーション テンプレートで securityContext.fsGroup パラメーターが設定されています。
解決策
アプリケーション テンプレートで securityContext.fsGroup パラメーターが設定されている場合は、fsGroup パラメーターを securityContext セクションから削除します。
マウントされたディレクトリ内のファイルのユーザー ID (UID) と mode を構成する場合は、ディレクトリを Elastic Compute Service (ECS) インスタンスに手動でマウントできます。その後、CLI を使用して
chownコマンドとchmodコマンドを実行し、CSI プラグインを使用して NAS ボリュームをプロビジョニングできます。CSI プラグインを使用して NAS ボリュームをマウントする方法の詳細については、「静的にプロビジョニングされた NAS ボリュームをマウントする」または「動的にプロビジョニングされた NAS ボリュームをマウントする」をご参照ください。上記のメソッドとは別に、Kubernetes 1.20 以降のクラスターでは、fsGroupChangePolicy パラメーターを OnRootMismatch に設定できます。こうすることで、
chmodまたはchown操作は、システムがポッドを初めて起動するときにのみ実行されます。最初の起動が完了した後、NAS ボリュームをマウントするときに問題は発生しません。fsGroupChangePolicy の詳細については、「ポッドまたはコンテナーのセキュリティコンテキストの設定」をご参照ください。
NAS ボリュームでディレクトリを作成または変更できない場合はどうすればよいですか?
問題
NAS ボリュームでディレクトリを作成または変更できません。
原因
root 以外のユーザーには、PV でディレクトリを作成または変更する権限がありません。
解決策
次のいずれかの方法を選択して、chmod コマンドまたは chown コマンドを実行し、マウントディレクトリの権限を変更できます。
root 権限で init コンテナーを起動し、PV をマウントしてから、
chmodコマンドまたはchownコマンドを実行して、マウントディレクトリの権限を変更します。その後、PV でディレクトリを作成および変更できます。[fsGroupChangePolicy] パラメーターを [OnRootMismatch] に設定します。こうすることで、システムがポッドを初めて起動するときに、
chmodコマンドまたはchownコマンドを実行して、マウントディレクトリの権限を変更します。その後、PV でディレクトリを作成および変更できます。
NAS ボリュームをマウントすると、システムが unknown filesystem type "xxx" と表示するのはなぜですか?
問題
NAS ボリュームをマウントすると、システムが unknown filesystem type "xxx" と表示します。
原因
アプリケーションがデプロイされているノードに、NAS ボリュームの依存関係がインストールされていません。
解決策
NAS ボリュームが正しく構成されているかどうかを確認します。
NAS ボリュームについては、「CNFS を使用して共有 NAS ボリュームを管理する (推奨)」をご参照ください。
OSS ボリュームについては、「静的にプロビジョニングされた OSS ボリュームをマウントする」をご参照ください。
クライアントが NAS ボリュームからデータを読み取るか、NAS ボリュームにデータを書き込むときに、システムが NFS Stale File Handle と表示するのはなぜですか?
問題
クライアントが NAS ボリュームからデータを読み取るか、NAS ボリュームにデータを書き込むときに、システムが NFS Stale File Handle と表示します。
原因
NAS ボリュームをコンテナーにマウントした後、NAS はデータの整合性を保証しません。NAS ボリュームが 2 つのクライアントにマウントされているとします。クライアント 1 は NAS ボリューム内のファイルを開いて、ファイルのファイル記述子 (FD) を取得します。クライアント 2 がファイルを削除すると、クライアント 1 はファイルを読み書きできなくなり、システムは NFS Stale File Handle と表示します。
解決策
ビジネスシナリオに基づいて、データの整合性の問題を解決する必要があります。
2 つの PVC を使用して 2 つの異なる NAS ボリュームをマウントするポッドが ContainerCreating 状態のままの場合はどうすればよいですか?
問題
2 つの PVC を使用して NAS ボリュームをマウントするポッドを起動できず、ポッドが ContainerCreating 状態のままです。PVC のいずれか 1 つのみを使用するようにポッドを構成すると、ポッドを起動できます。
原因
2 つの PVC に関連付けられている 2 つの PV が、同じ spec.csi.volumeHandle 値を使用しています。その結果、kubelet は PV マウントロジックを処理するときに 2 つの PV を区別できません。
解決策
各 PV の spec.csi.volumeHandle パラメーターを PV の実際の名前に設定します。
TLS が有効になっている NAS ファイルシステムをマウントするには、CSI をどのように使用すればよいですか?
NAS は TLS を使用して、NAS クライアントと NAS サービス間のデータ転送のセキュリティを確保し、データの盗難や改ざんを防ぎます。CSI を使用すると、Alibaba Cloud の NAS クライアント (aliNAS) を使用してボリュームをマウントし、TLS を有効にできます。
注意事項
NAS クライアントは、stunnel プロセスを TLS 暗号化ラッパーとして使用します。高スループット アプリケーションの場合、stunnel プロセスは暗号化と復号を実行するために大量の CPU リソースを消費します。極端なケースでは、各マウント操作で 1 つのコアが占有されます。詳細については、「NFS ファイルシステムの転送中暗号化」をご参照ください。
手順
NAS クライアントをインストールします。
csi-plugin コンポーネントの ConfigMap を変更して、csi-plugin を再起動します。
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: name: csi-plugin namespace: kube-system data: cnfs-client-properties: | alinas-utils=true EOF kubectl rollout restart ds -n kube-system csi-plugin // NASクライアントをインストールします。 // csi-pluginコンポーネントのConfigMapを変更して、csi-pluginを再起動します。次のサンプルコードに基づいて、静的にプロビジョニングされた 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 クライアントを使用してボリュームをマウントするには、パラメーターを alinas に設定します。デフォルトでは、このパラメーターは空のままになり、NFS を使用してボリュームがマウントされます。
mountOptions
TLS を有効にするには、tls オプションを追加します。mountProtocol が alinas に設定されている場合にのみ、このオプションを追加します。デフォルトでは、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 クライアントを使用してボリュームをマウントするには、パラメーターを alinas に設定します。デフォルトでは、このパラメーターは空のままになり、NFS を使用してボリュームがマウントされます。
spec.mountOptions
TLS を有効にするには、tls オプションを追加します。mountProtocol が alinas に設定されている場合にのみ、このオプションを追加します。デフォルトでは、TLS は無効になっています。
NAS ボリュームのアンマウントがタイムアウトし、ポッドが Terminating 状態のままの場合はどうすればよいですか?
問題
NAS ボリュームがマウントされたポッドを削除すると、NAS ボリュームをアンマウントできず、ポッドが Terminating 状態のままになります。
原因
csi-plugin コンポーネントが /var/run ディレクトリを直接マウントしています。次のコマンドを実行します。出力が空でない場合、csi-plugin コンポーネントは /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'