web-dev-qa-db-fra.com

Un volume persistant peut-il être redimensionné?

J'exécute un déploiement MySQL sur Kubernetes mais il semble que mon espace alloué n'était pas suffisant, au début j'ai ajouté un volume persistant de 50GB et maintenant j'aimerais étendre cela à 100GB.

J'ai déjà vu qu'une revendication de volume persistant est immuable après la création, mais puis-je simplement redimensionner le volume persistant, puis recréer ma revendication?

20
perrohunter

Oui, à partir du 1.11, les volumes persistants peuvent être redimensionnés sur certains fournisseurs de cloud. Pour augmenter la taille du volume:

  1. Modifiez la taille PVC à l'aide de kubectl edit pvc $your_pvc
  2. Fermez le module à l'aide du volume.

Une fois le pod utilisant le volume terminé, le système de fichiers est développé et la taille du PV est augmentée. Voir le lien ci-dessus pour plus de détails.

12
Dmitry Minkovsky

Il est possible dans Kubernetes 1.9 (alpha en 1.8) pour certains types de volume: gcePersistentDisk, awsElasticBlockStore, Cinder, glusterfs, rbd

Cela nécessite d'activer le plug-in d'admission PersistentVolumeClaimResize et les classes de stockage dont le champ allowVolumeExpansion est défini sur true.

Voir les documents officiels sur https://kubernetes.io/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims

15
csanchez

Non, Kubernetes ne prend pas encore en charge le redimensionnement automatique du volume.

Le redimensionnement du disque est actuellement un processus entièrement manuel.

En supposant que vous avez créé un objet PV Kubernetes avec une capacité donnée et que le PV est lié à un PVC, puis attaché/monté à un nœud pour être utilisé par un pod. Si vous augmentez la taille du volume, les pods continueront à pouvoir utiliser le disque sans problème, mais ils n'auront pas accès à l'espace supplémentaire.

Pour activer l'espace supplémentaire sur le volume, vous devez redimensionner manuellement les partitions. Vous pouvez le faire en suivant les instructions ici . Vous devez d'abord supprimer les modules référençant le volume, attendre qu'il se détache, puis attacher/monter manuellement le volume à une instance VM à laquelle vous avez accès et exécuter les étapes requises). pour le redimensionner.

Problème ouvert # 35941 pour suivre la demande de fonctionnalité.

7
Saad Ali

Il existe ne certaine prise en charge pour cela dans la version 1.8 et supérieure, pour certains types de volume, y compris gcePersistentDisk et awsBlockStore, si certaines fonctionnalités expérimentales sont activées sur le cluster.

Pour les autres types de volume, cela doit être fait manuellement pour l'instant. De plus, le support pour le faire automatiquement lorsque les pods sont en ligne (Nice!) Arrive dans une future version (actuellement prévue pour 1.11) :

Pour l'instant, voici les étapes que j'ai suivies pour le faire manuellement avec un type de volume AzureDisk (pour les disques gérés) qui ne prend actuellement pas en charge le redimensionnement persistant du disque (mais le support arrive également =):

  1. Assurez-vous Les PV ont défini la stratégie de récupération "Conserver".
  2. Supprimez l'ensemble avec état et les modules associés. Kubernetes devrait libérer les PV, même si les statuts PV et PVC resteront Bound. Faites particulièrement attention aux ensembles avec état gérés par un opérateur, tel que Prometheus - il peut être nécessaire de désactiver temporairement l'opérateur. Il peut également être possible d'utiliser Scale pour effectuer un pod à la fois. Cela peut prendre quelques minutes, soyez patient.
  3. Redimensionnez le stockage sous-jacent pour les PV à l'aide de l'API Azure ou du portail.
  4. Montez le stockage sous-jacent sur un VM (tel que le maître Kubernetes) en les ajoutant en tant que "disque" dans les paramètres VM. Dans la VM, utilisez e2fsck et resize2fs pour redimensionner le système de fichiers sur le PV (en supposant un FS ext3/4). Démontez les disques.
  5. Enregistrez la configuration JSON/YAML du PVC associé.
  6. Supprimez le PVC associé. Le PV doit passer à l'état Released.
  7. Modifiez la configuration YAML du PV, après quoi le statut PV doit être Available:
    1. spécifiez la nouvelle taille de volume dans spec.capacity.storage,
    2. retirer le spec.claimrefuid et resourceVersion, et
    3. retirer status.phase.
  8. Modifiez la configuration PVC enregistrée:
    1. retirer le metadata.resourceVersion champ,
    2. supprimer les métadonnées pv.kubernetes.io/bind-completed et pv.kubernetes.io/bound-by-controller annotations, et
    3. changer la spec.resources.requests.storage champ à la taille PV mise à jour, et
    4. supprimez tous les champs à l'intérieur de status.
  9. Créez une nouvelle ressource à l'aide de la configuration PVC modifiée. Le PVC doit démarrer dans l'état Pending, mais le PV et le PVC doivent passer relativement rapidement à Bound.
  10. Recréez le StatefulSet et/ou modifiez la configuration du jeu avec état pour redémarrer les pods.
4
Raman

En termes de `` redimensionnement '' PVC/PV, ce n'est toujours pas pris en charge dans les k8, bien que je pense qu'il pourrait potentiellement arriver en 1.9

Il est possible d'obtenir le même résultat final en traitant avec PVC/PV et (par exemple) GCE PD cependant ..

Par exemple, j'avais un déploiement gitlab, avec un PVC et un PV provisionné dynamiquement via une ressource StorageClass. Voici les étapes que j'ai parcourues:

  1. Prenez un instantané du PD (à condition que vous vous souciez des données)
  2. Assurez-vous que la ReclaimPolicy du PV est "Retain", corrigez si nécessaire comme détaillé ici: https://kubernetes.io/docs/tasks/administer-cluster/change-pv-reclaim-policy/
  3. kubectl describe pv <name-of-pv> (utile lors de la création du manifeste PV ultérieurement)
  4. Supprimez le déploiement/pod (probablement pas essentiel, mais semble plus propre)
  5. Supprimer le PVC et le PV
  6. Assurez-vous que PD est reconnu comme n'étant utilisé par rien (par exemple, console Google, page de calcul/disques)
  7. Redimensionner PD avec le fournisseur de cloud (avec GCE, par exemple, cela peut être fait à une étape antérieure, même si le disque est en cours d'utilisation)
  8. Créez le manifeste k8s PersistentVolume (cela avait précédemment été fait dynamiquement via l'utilisation de la ressource StorageClass). Dans la spécification yaml PersistentVolume, j'avais "gcePersistentDisk: pdName: <name-of-pd>" défini, ainsi que d'autres détails que j'avais saisis à l'étape 3. assurez-vous de mettre à jour le spec.capacity.storage à la nouvelle capacité que vous voulez que le PV ait (bien que ce ne soit pas essentiel, et n'a aucun effet ici, vous pouvez mettre à jour la capacité/valeur de stockage dans votre manifeste PVC, pour la postérité)
  9. kubectl apply (ou équivalent) pour recréer votre déploiement/pod, PVC et PV

remarque: certaines étapes peuvent ne pas être essentielles, telles que la suppression de certaines ressources de déploiement/pod existantes, bien que je préfère personnellement les supprimer, car je sais que ReclaimPolicy est Retain et j'ai un instantané.

4
eversMcc