Lorsqu'un conteneur plante, les données métier des charges de travail avec état peuvent être perdues ou devenir peu fiables. Le stockage persistant permet de pallier ce risque. Cette rubrique explique comment utiliser un volume de disque cloud provisionné statiquement pour le stockage persistant avec Flexvolume.
Prérequis
Effectuez les tâches suivantes :
Contexte
Cas d'utilisation des disques cloud :
Services nécessitant des E/S disque élevées et ne requérant pas de partage de données, tels que MySQL et Redis.
Écriture rapide des journaux.
Persistance des données au-delà du cycle de vie d'un pod.
Si vous disposez déjà d'un disque cloud, utilisez un volume provisionné statiquement.
Créez manuellement un Persistent Volume (PV) et une Persistent Volume Claim (PVC) pour utiliser un volume de disque cloud provisionné statiquement.
Limitations
Un disque cloud ne peut être monté que sur un seul pod à la fois.
Un disque cloud ne peut être monté que sur un nœud situé dans la même zone.
Créer un PV
-
Créez un fichier nommé pv-static.yaml.
apiVersion: v1 kind: PersistentVolume metadata: name: <your-disk-id> labels: alicloud-pvname: <your-disk-id> failure-domain.beta.kubernetes.io/zone: <your-zone> failure-domain.beta.kubernetes.io/region: <your-region> spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce flexVolume: driver: "alicloud/disk" fsType: "ext4" options: volumeId: "<your-disk-id>"Remarquealicloud-pvname: <your-disk-id>: nom du PV. Il doit correspondre à l'ID de votre disque cloud.failure-domain.beta.kubernetes.io/zone: <your-zone>: zone du disque cloud, par exemple cn-hangzhou-b.failure-domain.beta.kubernetes.io/region: <your-region>: région du disque cloud, par exemple cn-hangzhou.
Pour les clusters multi-zones, spécifiez
failure-domain.beta.kubernetes.io/zoneetfailure-domain.beta.kubernetes.io/regionafin de garantir que les pods sont planifiés dans la même zone que le disque cloud. -
Créez le PV.
kubectl create -f pv-static.yamlVerification Result
Connectez-vous à la console de gestion Container Service.
Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le cluster cible ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche de la page de gestion du cluster, sélectionnez . Le PV s'affiche avec une capacité de 20Gi, un mode d'accès ReadWriteOnce, une politique de récupération Retain et un statut Available.
Créer une PVC
-
Créez un fichier nommé pvc-static.yaml.
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-disk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi selector: matchLabels: alicloud-pvname: <your-disk-id> -
Créez la PVC.
kubectl create -f pvc-static.yamlVerification Result
Connectez-vous à la console de gestion Container Service.
Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le cluster cible ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche de la page de gestion du cluster, sélectionnez .
La PVC s'affiche sur la page Persistent Volume Claims.
Créer une application
-
Créez un fichier nommé static.yaml.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-static 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: pvc-disk -
Créez l'application.
kubectl create -f static.yamlVerification Result
Connectez-vous à la console de gestion Container Service.
Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le cluster cible ou sur Details dans la colonne Actions.
Dans le volet de navigation de gauche de la page de gestion du cluster, sélectionnez .
L'application s'affiche sur la page Deployments.
Vérifier la persistance des données
-
Récupérez le nom du pod.
kubectl get pod | grep staticSortie attendue :
nginx-static-78c7dcb9d7-g**** 2/2 Running 0 32s -
Vérifiez que le disque cloud est monté sur /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- df | grep dataSortie attendue :
/dev/vdf 20511312 45080 20449848 1% /data -
Listez les fichiers dans /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /dataSortie attendue :
lost+found -
Créez un fichier nommé static dans /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- touch /data/static -
Listez les fichiers dans /data.
kubectl exec nginx-static-78c7dcb9d7-g**** -- ls /dataSortie attendue :
static lost+found -
Supprimez le pod
nginx-static-78c7dcb9d7-g****.kubectl delete pod nginx-static-78c7dcb9d7-g****Sortie attendue :
pod "nginx-static-78c7dcb9d7-g****" deleted -
Dans un terminal distinct, observez Kubernetes supprimer et recréer le pod.
kubectl get pod -w -l app=nginxSortie attendue :
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-g**** 2/2 Running 0 50s nginx-static-78c7dcb9d7-g**** 2/2 Terminating 0 72s nginx-static-78c7dcb9d7-h**** 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/2 Pending 0 0s nginx-static-78c7dcb9d7-h**** 0/2 Init:0/1 0 0s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 73s nginx-static-78c7dcb9d7-h**** 0/2 Init:0/1 0 5s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-g**** 0/2 Terminating 0 78s nginx-static-78c7dcb9d7-h**** 0/2 PodInitializing 0 6s nginx-static-78c7dcb9d7-h**** 2/2 Running 0 8s -
Récupérez le nom du pod recréé.
kubectl get podSortie attendue :
NAME READY STATUS RESTARTS AGE nginx-static-78c7dcb9d7-h**** 2/2 Running 0 14s -
Listez les fichiers dans /data. Le fichier static existe toujours, ce qui confirme que les données sur le disque cloud persistent lors des redémarrages de pod.
kubectl exec nginx-static-78c7dcb9d7-h**** -- ls /dataSortie attendue :
static lost+found