Cette rubrique répond aux questions fréquemment posées concernant les volumes File Storage NAS (NAS).
Pourquoi le système affiche-t-il « chown: Operation not permitted » ?
Que faire s'il est impossible de créer ou de modifier des répertoires dans un volume NAS ?
Pourquoi le système affiche-t-il « unknown filesystem type "xxx" » lors du montage d'un volume NAS ?
Comment utiliser CSI pour monter un système de fichiers NAS avec TLS activé ?
Que faire si le démontage du volume NAS expire et que le pod reste dans l'état Terminating ?
Pourquoi le système affiche-t-il chown: Operation not permitted lors du montage d'un volume NAS ?
Problème
Le système affiche chown: Operation not permitted lors du montage d'un système de fichiers NAS.
Cause
Le rôle utilisé pour exécuter le conteneur ne dispose pas des autorisations nécessaires pour gérer le volume NAS.
Solution
L'utilisateur qui lance le processus du conteneur ne dispose pas des privilèges root. Utilisez un compte root pour effectuer les opérations
chownetchgrp. Lorsque le paramètreaccessModesd'un volume persistant (PV) est défini surReadWriteOnce, vous pouvez également utilisersecurityContext.fsGrouppour configurer les autorisations du volume et la politique de modification de propriété pour les pods. Pour plus d'informations, consultez Configurer les autorisations d'accès au volume et la politique de modification de propriété pour les pods.Si le problème persiste après l'utilisation d'un compte root, vérifiez si le groupe d'autorisations de la cible de montage NAS définit les autorisations utilisateur sur No Anonymity (no_squash). Cette configuration permet aux utilisateurs root d'accéder au système de fichiers. Pour plus d'informations, consultez Gérer les groupes d'autorisations.
Que faire si la file d'attente des tâches de alicloud-nas-controller est pleine et que les PV ne peuvent pas être créés lors de l'utilisation d'un volume NAS provisionné dynamiquement ?
Problème
Lorsque vous utilisez un volume NAS provisionné dynamiquement, si la vitesse de création des sous-répertoires est supérieure à celle de leur suppression, la file d'attente des tâches de alicloud-nas-controller peut se remplir, empêchant ainsi la création des PV.
Cause
Le paramètre reclaimPolicy est défini sur Delete et le paramètre archiveOnDelete est défini sur false dans la configuration de la StorageClass qui monte le volume NAS provisionné dynamiquement.
Solution
Définissez archiveOnDelete sur true. Ainsi, lors de la suppression d'un PV, seul le nom du sous-répertoire monté dans le système de fichiers NAS est modifié. Les fichiers contenus dans le sous-répertoire ne sont pas supprimés.
Vous devez supprimer ces fichiers manuellement. Par exemple, configurez un nœud pour qu'il supprime automatiquement les fichiers du répertoire racine selon une planification, ou lancez plusieurs pods pour supprimer simultanément des fichiers de formats spécifiques dans les sous-répertoires.
Pourquoi le montage d'un volume NAS prend-il beaucoup de temps ?
Problème
Le montage d'un volume NAS prend beaucoup de temps.
Cause
Si les conditions suivantes sont remplies, l'opération chmod ou chown est effectuée lors du montage des volumes, ce qui augmente le temps nécessaire.
Le paramètre AccessModes est défini sur ReadWriteOnce dans les modèles de volume persistant (PV) et de revendication de volume persistant (PVC).
Le paramètre securityContext.fsGroup est défini dans le modèle d'application.
Solution
Si le paramètre securityContext.fsGroup est défini dans le modèle d'application, supprimez le paramètre fsGroup de la section securityContext.
Si vous souhaitez configurer l'ID utilisateur (UID) et le mode des fichiers dans le répertoire monté, montez manuellement le répertoire sur une instance Elastic Compute Service (ECS). Exécutez ensuite les commandes
chownetchmodvia une interface CLI et provisionnez le volume NAS à l'aide du plug-in CSI. Pour plus d'informations sur l'utilisation du plug-in CSI pour monter des volumes NAS, consultez Utiliser des volumes NAS statiques ou Utiliser des volumes NAS dynamiques.Outre les méthodes précédentes, pour les clusters Kubernetes 1.20 ou versions ultérieures, définissez le paramètre fsGroupChangePolicy sur OnRootMismatch. Ainsi, l'opération
chmodouchownn'est effectuée que lors du premier lancement du pod par le système. Le problème ne se produit pas lors du montage des volumes NAS après le premier lancement. Pour plus d'informations sur fsGroupChangePolicy, consultez Définir le contexte de sécurité pour un pod ou un conteneur.
Que faire s'il est impossible de créer ou de modifier des répertoires dans un volume NAS ?
Problème
Il est impossible de créer ou de modifier des répertoires dans un volume NAS.
Cause
Les utilisateurs non root ne disposent pas des autorisations nécessaires pour créer ou modifier des répertoires dans un PV.
Solution
Choisissez l'une des méthodes suivantes pour exécuter la commande chmod ou chown afin de modifier les autorisations du répertoire de montage :
Lancez un conteneur d'initialisation avec des privilèges root, montez un PV, puis exécutez la commande
chmodouchownpour modifier les autorisations du répertoire de montage. Vous pourrez ensuite créer et modifier des répertoires dans le PV.Définissez le paramètre fsGroupChangePolicy sur OnRootMismatch. Ainsi, lors du premier lancement du pod par le système, la commande
chmodouchownest exécutée pour modifier les autorisations du répertoire de montage. Vous pourrez ensuite créer et modifier des répertoires dans le PV.
Pourquoi le système affiche-t-il unknown filesystem type "xxx" lors du montage d'un volume NAS ?
Problème
Le système affiche unknown filesystem type "xxx" lors du montage d'un volume NAS.
Cause
Les dépendances du volume NAS ne sont pas installées sur le nœud où l'application est déployée.
Solution
Vérifiez si le volume NAS est correctement configuré.
Pour les volumes NAS, consultez Utiliser CNFS pour gérer les volumes NAS partagés (recommandé).
Pour les volumes OSS, consultez Utiliser un volume statique ossfs 1,0.
Pourquoi le système affiche-t-il NFS Stale File Handle lorsqu'un client lit ou écrit des données dans un volume NAS ?
Problème
Le système affiche NFS Stale File Handle lorsqu'un client lit ou écrit des données dans un volume NAS.
Cause
NAS ne garantit pas la cohérence des données après le montage d'un volume NAS sur un conteneur. Supposons qu'un volume NAS soit monté sur deux clients. Le client 1 ouvre un fichier dans le volume NAS pour obtenir le descripteur de fichier (FD) du fichier. Si le client 2 supprime le fichier, le client 1 ne peut ni lire ni écrire dans le fichier et le système affiche NFS Stale File Handle.
Solution
Résolvez les problèmes de cohérence des données en fonction de vos scénarios métier.
Que faire si un pod utilisant deux PVC pour monter deux volumes NAS différents reste dans l'état ContainerCreating ?
Problème
Le lancement d'un pod utilisant deux PVC pour monter des volumes NAS a échoué et le pod reste dans l'état ContainerCreating. Le pod peut être lancé si vous le configurez pour n'utiliser qu'un seul des PVC.
Cause
Les deux PV associés aux deux PVC utilisent la même valeur spec.csi.volumeHandle. Par conséquent, kubelet ne peut pas différencier les deux PV lors du traitement de la logique de montage des PV.
Solution
Définissez le paramètre spec.csi.volumeHandle de chaque PV sur le nom réel du PV.
Comment utiliser CSI pour monter un système de fichiers NAS avec TLS activé ?
NAS utilise TLS pour garantir la sécurité de la transmission des données entre le client NAS et le service NAS, et prévenir le vol et la falsification des données. CSI vous permet d'utiliser le client NAS (aliNAS) d'Alibaba Cloud pour monter des volumes et activer TLS.
Précautions
Le client NAS utilise le processus stunnel comme wrapper de chiffrement TLS. Pour les applications à haut débit, le processus stunnel consomme une grande quantité de ressources CPU pour effectuer le chiffrement et le déchiffrement. Dans les cas extrêmes, chaque opération de montage occupe un cœur. Pour plus d'informations, consultez Chiffrement en transit pour les systèmes de fichiers NFS.
Procédure
-
Installez le client NAS.
Modifiez le ConfigMap du composant csi-plugin pour redémarrer 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 -
Montez un volume NAS provisionné statiquement ou dynamiquement en vous basant sur l'exemple de code suivant :
Monter un volume NAS provisionné dynamiquement
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-tls mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Add a TLS mount option. parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" mountProtocol: alinas # Declare to use the aliNAS client to mount the volume. 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: 20GiParamètre
Description
parameters.mountProtocol
Définissez le paramètre sur alinas pour utiliser le client aliNAS afin de monter le volume. Par défaut, ce paramètre est laissé vide et NFS est utilisé pour monter le volume.
mountOptions
Ajoutez l'option tls pour activer TLS. Ajoutez cette option uniquement lorsque mountProtocol est défini sur alinas. Par défaut, TLS est désactivé.
Monter un volume NAS provisionné statiquement
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 # Enter the name of the PV. volumeAttributes: server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com" path: "/csi" mountProtocol: alinas # Declare to use the aliNAS client to mount the volume. mountOptions: - nolock,tcp,noresvport - vers=3 - tls # Add a TLS mount option. --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nas-tls spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas-tlsParamètre
Description
spec.csi.volumeAttributes.mountProtocol
Définissez le paramètre sur alinas pour utiliser le client aliNAS afin de monter le volume. Par défaut, ce paramètre est laissé vide et NFS est utilisé pour monter le volume.
spec.mountOptions
Ajoutez l'option tls pour activer TLS. Ajoutez cette option uniquement lorsque mountProtocol est défini sur alinas. Par défaut, TLS est désactivé.
Que faire si le démontage du volume NAS expire et que le pod reste dans l'état Terminating ?
Problème
Lorsque vous supprimez un pod avec un volume NAS monté, le volume NAS ne peut pas être démonté et le pod reste dans l'état Terminating.
Cause
Le composant csi-plugin monte directement le répertoire /var/run. Exécutez la commande suivante. Si la sortie n'est pas vide, le composant csi-plugin monte directement le répertoire /var/run.
kubectl get ds -n kube-system csi-plugin -ojsonpath='{.spec.template.spec.volumes[?(@.hostPath.path=="/var/run/")]}'
Solution
Exécutez la commande suivante pour corriger manuellement le fichier YAML de csi-plugin et résoudre le problème :
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'