En cas d'échec des conteneurs, les données des applications avec état stockées dans le stockage des conteneurs peuvent être perdues ou devenir peu fiables. Le stockage persistant permet de remédier à ce risque. Cette rubrique explique comment utiliser des disques provisionnés dynamiquement pour mettre en œuvre un stockage persistant.
Fonctionnement
Créez une PVC qui référence un StorageClass.
Déployez votre application avec un volume qui référence la PVC.
Le provisioner crée automatiquement un disque et le lie à la PVC en tant que PV.
Chaque cluster ACK inclut un provisioner par défaut.
Prérequis
Un cluster géré ACK est créé.
kubectl est connecté au cluster.
Un provisioner de disque est installé dans le cluster.
StorageClasses par défaut
ACK crée quatre StorageClasses par défaut lors de l'initialisation du cluster. Elles ne fonctionnent que pour les clusters mono-zone. Pour les clusters multi-zones, créez un StorageClass personnalisé.
| Nom du StorageClass | Type de disque | Description |
|---|---|---|
alicloud-disk-common |
Disque de base | Stockage standard de référence |
alicloud-disk-efficiency |
SSD amélioré (ESSD) | Équilibre entre performances et coût |
alicloud-disk-ssd |
SSD | Stockage haute performance |
alicloud-disk-available |
Haute disponibilité | Crée un SSD si disponible ; sinon, utilise un ultra disque. |
Création d'un StorageClass personnalisé
Créez un StorageClass personnalisé si les paramètres par défaut ne répondent pas à vos besoins, par exemple dans les clusters multi-zones.
-
Créez un fichier nommé
storageclass.yaml:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: alicloud-disk-ssd-hangzhou-b provisioner: alicloud/disk reclaimPolicy: Retain parameters: type: cloud_ssd regionId: cn-hangzhou zoneId: cn-hangzhou-b fstype: "ext4" readonly: "false" -
Créez le StorageClass :
kubectl create -f storageclass.yaml
Paramètres du StorageClass
| Paramètre | Description |
|---|---|
provisioner |
Plugin du provisioner de disque. Définissez la valeur sur alicloud/disk. |
reclaimPolicy |
Comportement du disque lors de la suppression de la PVC. Valeurs valides : Delete, Retain. Par défaut : Delete. |
type |
Type de disque. Valeurs valides : cloud, cloud_efficiency, cloud_ssd, available. |
regionId |
Région du disque. Doit correspondre à la région du cluster. Facultatif. |
zoneId |
Zone du disque. Facultatif. Cluster mono-zone : ID de la zone. Cluster multi-zones : IDs séparés par des virgules (par exemple, cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c). |
fstype |
Type de système de fichiers. Facultatif. Par défaut : ext4. |
readonly |
Indique si le disque est en lecture seule. Facultatif. Valeurs valides : true, false. Par défaut : false. |
encrypted |
Indique si le disque doit être chiffré. Facultatif. Valeurs valides : true, false. Par défaut : false. |
Si vous définissez
reclaimPolicy
sur
Delete
, le disque est automatiquement supprimé lorsque vous supprimez la PVC. Les données du disque ne peuvent pas être récupérées.
Création d'une PVC
-
Créez un fichier nommé
pvc-ssd.yaml:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: disk-ssd spec: accessModes: - ReadWriteOnce storageClassName: alicloud-disk-ssd-hangzhou-b resources: requests: storage: 20Gi -
Créez la PVC :
kubectl create -f pvc-ssd.yaml
Création d'un Deployment
-
Créez un fichier nommé
pvc-dynamic.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-dynamic labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - name: disk-pvc mountPath: "/data" volumes: - name: disk-pvc persistentVolumeClaim: claimName: disk-ssd -
Créez le Deployment :
kubectl create -f nginx-dynamic.yaml
Vérification du stockage persistant
Assurez-vous que le disque est monté et que les données persistent après le redémarrage des pods.
Confirmation du montage du disque
-
Recherchez le nom du pod :
kubectl get pod | grep dynamicSortie attendue :
nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 3m -
Vérifiez que le disque est monté sur
/data:kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- df | grep dataSortie attendue :
/dev/vdh 20511312 45080 20449848 1% /data -
Listez les fichiers dans
/data:kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataSortie attendue :
lost+found
Écriture de données de test et vérification de la persistance
-
Créez un fichier de test sur le disque :
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- touch /data/dynamic -
Confirmez l'existence du fichier :
kubectl exec nginx-dynamic-5c74594ccb-zl9pf -- ls /dataSortie attendue :
dynamic lost+found -
Supprimez le pod pour déclencher son remplacement :
kubectl delete pod nginx-dynamic-5c74594ccb-zl9pfSortie attendue :
pod "nginx-dynamic-5c74594ccb-zl9pf" deleted -
Dans un terminal distinct, surveillez le cycle de vie du pod :
kubectl get pod -w -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-zl9pf 2/2 Running 0 6m48s nginx-dynamic-5c74594ccb-zl9pf 2/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Pending 0 0s nginx-dynamic-5c74594ccb-45sd4 0/2 Init:0/1 0 0s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m32s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-zl9pf 0/2 Terminating 0 7m33s nginx-dynamic-5c74594ccb-45sd4 0/2 PodInitializing 0 5s nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 22s -
Récupérez le nom du nouveau pod :
kubectl get podSortie attendue :
NAME READY STATUS RESTARTS AGE nginx-dynamic-5c74594ccb-45sd4 2/2 Running 0 2m -
Vérifiez que le fichier de test existe toujours dans le nouveau pod :
kubectl exec nginx-dynamic-5c74594ccb-45sd4 -- ls /dataSortie attendue :
dynamic lost+foundLe fichier
dynamicpersiste après la recréation du pod, ce qui confirme que le disque assure un stockage persistant.