Je gère un déploiement d'élasticsearch à Kubettes. Je vois que le stockage de disque se rapproche pleinement. Je voudrais donc augmenter la taille des volumes persistants.
Je veux changer cette valeur dans l'ensemble de l'état:
spec.
volumeClaimTemplates[0].spec.resources.requests.storage : "10Gi"
Mais lorsque je fais cela en utilisant le tableau de bord Kubettes, je reçois le message suivant:
Erreur Interne du Serveur
Stipulerset.apps "ES-CLUSTER" n'est pas valide: Spécification: Interdit: Mises à jour de StateFeCset> Spécifications des champs autres que 'Replicas', "Modèle" et "UpdateStrategy" sont interdites.
Cela me fait penser que je devrai supprimer mon ensemble d'état existant et déployer un nouveau.
Est-il possible d'augmenter le stockage de disque PER-POD sans interruption de service ni perte de données?
J'ai plusieurs pods de données élastiques de recherche et utilisez-le des répliques Count = 1, donc si je suis capable de les descendre et de mettre à niveau le stockage de disque une gousse à la fois, il ne devrait pas y avoir de problème. Je ne vois tout simplement pas comment procéder cela compte tenu de la restriction indiquée ci-dessus.
Même Tho redimensionner des volumes persistants à l'aide de Kubettes de Kubettes 1.11 , il semble y avoir des problèmes avec cela.
Comme indiqué dans GitHub: StateFeSet: Soutien Redimensionner le stockage en PVC dans les K8s V1.11 # 68737
En raison de cette limitation, de nombreux opérateurs de base de données pour Kubettes ne prennent pas en charge le redimensionnement en PVC. C'est un problème critique car lorsque votre base de données devient plus grande que prévu - vous n'avez pas le choix et il est nécessaire de sauvegarder dB et de recréer la nouvelle DB à partir de la sauvegarde.
Vous devez le redimensionner en supprimant l'état d'état, cela signifierait que vous supprimerez tous les gousses et cela causera des temps d'arrêt.
Un travail autour a été publié par DaveWHArevey
J'ai rencontré cette limitation sur Elasticsearch en raison du travail que je devais faire pour éviter que les volumes EBS ne puissent être affectés car ils sont dans la mauvaise zone de disponibilité, c'est-à-dire que j'avais créé une étate au-pouvoir par az. Si je veux modifier certaines caractéristiques de stockage, je crée une nouvelle "AZ" à l'aide de la même classe de stockage, puis migrez toutes les données sur des pods dans ce nouveau AZ, puis détruisez l'ancien AZ.
J'espère que ça vous aide un peu.
Pour appliquer ce directeur à un tableau de barre, j'ai pu effectuer ce qui suit, en fonction de la saisie ci-dessus, ainsi que des indications sur ce thread: https://github.com/kubettes/kubernet/kubernet //kubernet # Issuecomment-469647348
L'exemple ci-dessous utilise les valeurs suivantes:
Ces valeurs peuvent être trouvées dans votre environnement en utilisant les commandes suivantes:
kubectl get pvc
kubectl get sts
helm list
Et voici les étapes de mise à jour de la taille de PV dans l'état d'état d'une carte de barre:
kubectl edit storageClass standard
et définir/assurer allowvolumeExpansion: vrai (il était déjà dans mon cas)kubectl delete sts --cascade=false rabbitmq-server
kubectl edit pvc data-rabbitmq-server-0
et changement SPEC taille à 50gihelm upgrade --recreate-pods --reuse-values -f rabbit-values.yaml rabbitmq-server stable/rabbitmq
Remarque: la dernière étape utilise --recreate-pods
Drapeau afin de forcer un redémarrage des gousses, ce qui déclenche le redimensionnement du système de fichiers réel. Il provoque également des temps d'arrêt de ces pod. Si vous voulez essayer de le faire sans temps d'arrêt, vous pouvez essayer de supprimer cet indicateur et de tuer/redémarrer manuellement une gousse à la fois, ou quelque chose.
A reconstitué cette procédure ensemble basée sur d'autres commentaires sur https://github.com/kubettes/kubettes/kubettes/issues/68737 . J'ai testé cela sur Kubettes 1.14:
kubectl edit pvc <name>
Pour chaque PVC dans l'état d'état, augmenter sa capacité.kubectl delete sts --cascade=false <name>
Pour supprimer l'état d'état et laisser ses gousses.kubectl apply -f <name>
Pour recréer l'état d'état.kubectl rollout restart sts <name>
Pour redémarrer les pods, une à la fois. Pendant le redémarrage, le PVC de la POD sera redimensionné.Si vous souhaitez surveiller ce qui se passe, exécutez deux autres fenêtres shell avec ces commandes, avant l'une des commandes ci-dessus:
kubectl get pod -w
kubectl get pvc -w
Voici un script complet pour redimensionner les volumes STS en fonction d'autres réponses. Je n'avais pas à --cascade=false
Lors de la suppression des ST car il aurait été mis à l'échelle à 0 avant cette étape.
kubectl get -o jsonpath='{.allowVolumeExpansion}' sc <SC-NAME>
# should return true, otherwise, patch it:
kubectl patch -p '{"allowVolumeExpansion": true}' sc <SC-NAME>
# then run the first command again
# we need the original replica count, so let's save it before scaling down
REPLICAS=`kubectl get -o jsonpath='{.spec.replicas}' sts/<STS-NAME>`
kubectl scale sts/<STS-NAME> --replicas 0
NEW_SIZE=128Gi
for i in `seq 0 $[REPLICAS-1]`; do
PVC=<PVC-NAME-PREFIX>-$i
echo "Updating PVC $PVC"
# Print the current size:
kubectl get -o jsonpath='{.spec.resources.requests.storage} ' pvc/$PVC
# Set the new size:
kubectl patch -p '{"spec": {"resources": {"requests": {"storage": "'$NEW_SIZE'"}}}}' pvc/$PVC
# Verify the PV:
echo "Waiting for 10 seconds so that the PV picks up the change..."
echo "If you still see the same size, do not worry, to see the new size just run this script again"
sleep 10
PV=`kubectl get -o jsonpath='{.spec.volumeName}' pvc/$PVC`
kubectl get -o jsonpath='{.spec.capacity.storage} ' pv/$PV
echo "Done"
done
kubectl delete sts <STS-NAME>
for i in `seq 0 $[REPLICAS-1]`; do
PVC=<PVC-NAME-PREFIX>-$i
echo "Verifying the size of PVC $PVC"
# Verify the current size:
kubectl get -o jsonpath='{.status.capacity.storage} ' pvc/$PVC
done