Cette rubrique explique comment monter un volume Alibaba Cloud Network Attached Storage (NAS) sur les pods d'un cluster Container Service for Kubernetes (ACK) à l'aide du provisionnement statique. Le provisionnement statique vous permet de connecter des pods à un système de fichiers NAS existant pour offrir un stockage persistant et partagé accessible simultanément par plusieurs pods.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACK Serverless. Pour plus d'informations, consultez la section Créer un cluster ACK Serverless
Un système de fichiers NAS. Pour plus d'informations, consultez la section Créer un système de fichiers
Une cible de montage NAS située dans le même Virtual Private Cloud (VPC) que les nœuds du cluster. Pour plus d'informations, consultez la section Gérer les cibles de montage
kubectl connecté au cluster. Pour plus d'informations, consultez la section Obtenir le fichier kubeconfig d'un cluster et utiliser kubectl pour se connecter au cluster
Pour chiffrer les données du volume NAS, configurez le type de chiffrement lors de la création du système de fichiers NAS, et non ultérieurement.
Notes d'utilisation
| Contrainte | Détail |
|---|---|
| Chemin Extreme NAS | Le champ path doit être un sous-répertoire de /share (par exemple, /share/path1). Le NAS général utilise / par défaut. |
| Écritures simultanées de pods | Un système de fichiers NAS peut être monté sur plusieurs pods simultanément. Si plusieurs pods écrivent dans le même chemin, votre application doit gérer la synchronisation des données. |
| Permissions du répertoire racine | Les permissions, le propriétaire et le groupe du répertoire / d'un système de fichiers NAS ne peuvent pas être modifiés. |
securityContext.fsgroup |
La définition de ce paramètre amène kubelet à exécuter chmod ou chown après le montage du volume, ce qui augmente le temps de montage. Pour une solution de contournement, consultez la section Le temps de montage d'un volume NAS est prolongé. |
Cas d'utilisation
Applications ayant des exigences élevées en matière d'E/S disque
Partage de fichiers entre plusieurs hôtes — par exemple, utilisation d'un volume NAS comme serveur de fichiers partagé
Monter un volume NAS à l'aide de la console
Étape 1 : Créer un Persistent Volume (PV)
Connectez-vous à la console ACK et cliquez sur Clusters dans le volet de navigation de gauche.
Sur la page Clusters, cliquez sur le nom du cluster cible ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche de la page des détails du cluster, choisissez Volumes > Persistent Volumes.
Sur la page Persistent Volumes, cliquez sur Create.
-
Dans la boîte de dialogue Create PV, configurez les paramètres.
Pour Extreme NAS, Mount Path doit commencer par
/share, par exemple/share/data.Paramètre Description Obligatoire Par défaut PV Type Sélectionnez NAS. Oui — Name Nom du PV. Il doit être unique au sein du cluster. Exemple : pv-nas.Oui — Capacity Capacité allouée au PV. Les systèmes de fichiers NAS n'ont pas de limite de capacité inhérente ; cette valeur définit l'enregistrement du PV, et non un quota NAS. Oui — Access Mode Sélectionnez ReadWriteMany ou ReadWriteOnce. Oui ReadWriteMany Mount Target Domain Name Adresse de montage permettant au cluster d'accéder au système de fichiers NAS. Sélectionnez Select Mount Target ou spécifiez un nom de domaine Custom. Oui — Mount Path (Avancé, facultatif) Sous-répertoire du système de fichiers NAS à monter. Si le répertoire n'existe pas, il est créé automatiquement. Non /(NAS général) ou/share(Extreme NAS)Reclaim Policy Lorsque le PVC est supprimé, le PV et le système de fichiers NAS sont conservés et doivent être supprimés manuellement. Non Retain Mount Options Paramètres de montage NFS, y compris la version du protocole NFS. Utilisez NFS v3 — Extreme NAS prend uniquement en charge la version v3. Pour plus de détails, consultez la section Protocole NFS. Non — Label Libellés à ajouter au PV. Non — Cliquez sur OK.
Étape 2 : Créer un Persistent Volume Claim (PVC)
Dans le volet de navigation de gauche de la page des détails du cluster, choisissez Volumes > Persistent Volume Claims.
Sur la page Persistent Volume Claims, cliquez sur Create.
-
Dans la boîte de dialogue Create PVC, configurez les paramètres.
Si aucun PV n'existe encore, définissez Allocation Mode sur Create Volume pour créer un PV directement.
Paramètre Description Obligatoire PVC Type Sélectionnez NAS. Oui Name Nom du PVC. Il doit être unique au sein du cluster. Oui Allocation Mode Sélectionnez Existing Volumes pour lier le PVC au PV créé à l'étape 1. Oui Existing Volumes Cliquez sur Select PV, trouvez le PV cible et cliquez sur Select dans la colonne Actions. Oui Capacity Capacité demandée par le PVC. Elle ne peut pas dépasser la capacité du PV lié. Oui Cliquez sur OK. Une fois le PVC créé, son statut passe à Bound, confirmant qu'il est lié au PV.
Étape 3 : Créer une application
Dans le volet de navigation de gauche de la page des détails du cluster, choisissez Workloads > Deployments.
Sur la page Deployments, cliquez sur Create From Image.
-
Configurez les paramètres clés ci-dessous, puis cliquez sur Create. Pour tous les autres paramètres, consultez la section Créer une application sans état à l'aide d'un Deployment.
Section Paramètre Exemple Basic Information Name nas-testBasic Information Replicas 2Container Image Name anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6Container Required Resources 0,25 cœur, 512 Mio Volume Mount Source Sélectionnez le PVC créé à l'étape 2, par exemple pvc-nas.Volume Container Path /data Vérifiez le statut du déploiement : sur la page Deployments, cliquez sur le nom de l'application, puis confirmez que tous les pods de l'onglet Pods sont dans l'état Running.
Monter un volume NAS à l'aide de kubectl
Les trois fichiers YAML ci-dessous utilisent le pilote CSI (Container Storage Interface) NAS (nasplugin.csi.alibabacloud.com) pour monter le système de fichiers NAS dans les pods.
Étape 1 : Créer un PV
Créez le fichier pv-nas.yaml avec le contenu suivant, puis appliquez-le.
kubectl create -f pv-nas.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-nas
labels:
alicloud-pvname: pv-nas
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: pv-nas
volumeAttributes:
server: "2564f4****-ysu87.cn-shenzhen.nas.aliyuncs.com"
path: "/csi"
mountOptions:
- nolock,tcp,noresvport
- vers=3
| Paramètre | Description | Obligatoire |
|---|---|---|
name |
Nom du PV. | Oui |
labels |
Libellés utilisés par le sélecteur du PVC pour se lier à ce PV. | Non |
storage |
Capacité allouée au PV. | Oui |
accessModes |
Mode d'accès au volume. | Oui |
driver |
Identifiant du pilote NAS CSI : nasplugin.csi.alibabacloud.com. |
Oui |
volumeHandle |
ID unique de ce PV. Il doit être unique parmi tous les PV du cluster. | Oui |
server |
Nom de domaine de la cible de montage NAS. | Oui |
path |
Sous-répertoire du système de fichiers NAS à monter. Pour Extreme NAS, il doit s'agir d'un sous-répertoire de /share. |
Oui |
vers |
Version du protocole NFS. Utilisez 3 — Extreme NAS prend uniquement en charge la version v3. |
Oui |
Étape 2 : Créer un PVC
Créez le fichier pvc-nas.yaml avec le contenu suivant. Le champ selector utilise le libellé du PV pour lier ce PVC au PV spécifique créé à l'étape 1.
kubectl create -f pvc-nas.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
| Paramètre | Description |
|---|---|
name |
Nom du PVC. |
accessModes |
Doit correspondre au mode d'accès du PV. |
storage |
Capacité demandée. Elle ne peut pas dépasser la capacité du PV. |
matchLabels |
Sélecteur de libellés qui lie ce PVC au PV cible. |
Étape 3 : Créer un Deployment
Créez le fichier nas.yaml avec le contenu suivant. Cela crée un Deployment nommé nas-static avec deux répliques, chacune montant le PVC sur /data.
kubectl create -f nas.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nas-static
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: pvc-nas
mountPath: "/data"
volumes:
- name: pvc-nas
persistentVolumeClaim:
claimName: pvc-nas
| Paramètre | Description |
|---|---|
mountPath |
Chemin à l'intérieur du conteneur où le volume NAS est monté. |
claimName |
Nom du PVC à lier. Il doit correspondre au PVC créé à l'étape 2. |
Vérifiez que les pods sont en cours d'exécution :
kubectl get pod
Résultat attendu :
NAME READY STATUS RESTARTS AGE
nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s
nas-static-c5bb4746c-4**** 1/1 Running 0 32s
Vérifier la persistance
Cette procédure confirme que les données écrites dans le volume NAS survivent à la suppression et à la recréation des pods.
-
Exécutez la commande suivante pour afficher les noms des pods de l'application déployée.
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s -
Confirmez que
/dataest initialement vide dans l'un des pods :kubectl exec nas-static-5b5cdb85f6-n**** -- ls /dataAucun résultat n'est renvoyé, ce qui confirme l'absence de fichiers.
-
Créez un fichier de test dans
/data:kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas -
Vérifiez que le fichier a bien été créé :
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /dataRésultat attendu :
nas -
Supprimez le pod :
kubectl delete pod nas-static-5b5cdb85f6-n**** -
Dans un terminal distinct, observez la recréation du pod par Kubernetes :
kubectl get pod -w -l app=nginx -
Une fois que le nouveau pod atteint l'état Running, obtenez son nom :
kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32s -
Vérifiez que le fichier existe toujours dans le pod recréé :
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /dataRésultat attendu :
nasLe fichier
nasest présent, ce qui confirme que les données du volume NAS persistent lors des redémarrages de pods.
Vérifier le stockage partagé
Cette procédure confirme que les données écrites dans le volume NAS depuis un pod sont immédiatement visibles dans tous les autres pods montant le même volume.
-
Affichez les noms des pods où l'application est déployée, puis vérifiez les fichiers dans
/datades deux pods.kubectl get podRésultat attendu :
NAME READY STATUS RESTARTS AGE nas-static-5b5cdb85f6-n**** 1/1 Running 0 32s nas-static-c5bb4746c-4**** 1/1 Running 0 32skubectl exec nas-static-5b5cdb85f6-n**** -- ls /data kubectl exec nas-static-c5bb4746c-4**** -- ls /data -
Créez un fichier dans
/datad'un pod :kubectl exec nas-static-5b5cdb85f6-n**** -- touch /data/nas -
Vérifiez que le fichier apparaît dans les deux pods :
kubectl exec nas-static-5b5cdb85f6-n**** -- ls /dataRésultat attendu :
naskubectl exec nas-static-c5bb4746c-4**** -- ls /dataRésultat attendu :
nasLe même fichier est visible dans les deux pods, ce qui confirme qu'ils partagent le même volume NAS.