Vue imprimable multi-pages de cette section. .
Mise à jour
- 1: Mise à jour des clusters etcd et des applications
- 2: Mettre à jour etcd de la version v3.6 à la version v3.7
- 3: Mettre à jour etcd de la version v3.5 à la version v3.6
- 4: Mettre à jour etcd de 3.4 à 3.5
- 5: Mettre à jour etcd de 3.3 à 3.4
- 6: Mettre à jour etcd de 3.2 vers 3.3
- 7: Mettre à jour etcd de 3.1 vers 3.2
- 8: Mettre à jour etcd de la version 3.0 à la 3.1
- 9: Mettre à jour etcd de la version 2.3 à la 3.0
1 - Mise à jour des clusters etcd et des applications
Cette section contient les documents spécifiques à la mise à jour des clusters etcd et des applications.
Politique de mise à jour
Avant la mise à jour, notez qu’etcd ne prend en charge que les deux cas de mise à jour suivants :
- Mise à jour corrective : Mise à jour entre des versions correctives du même numéro de version mineure (par exemple, 3.7.0 → 3.7.1).
- Mise à jour mineure : Mise à jour d’une version mineure à la fois (par exemple, 3.6 → 3.7). Les mises à jour qui sautent une version mineure ne sont pas prises en charge et risquent d’échouer. Mettez à jour vers la dernière version corrective avant de passer à la version mineure suivante.
Mise à jour d’un cluster etcd v3.x
- Mise à niveau d’etcd de la version 3.0 vers la 3.1
- Mise à niveau d’etcd de la version 3.1 vers la 3.2
- Mise à niveau d’etcd de la version 3.2 vers la 3.3
- Mise à niveau d’etcd de la version 3.3 vers la 3.4
- Mise à niveau d’etcd de la version 3.4 vers la 3.5
- Mise à niveau d’etcd de la version 3.5 vers la 3.6
- Mise à niveau d’etcd de la version 3.6 vers la 3.7
Mise à niveau depuis etcd v2.3
2 - Mettre à jour etcd de la version v3.6 à la version v3.7
Dans le cas général, la mise à niveau d’etcd v3.6 vers v3.7 peut être une mise à niveau progressive sans interruption de service :
- un à un, arrêtez les processus etcd v3.6 et remplacez-les par des processus etcd v3.7
- après avoir lancé tous les processus v3.7, les nouvelles fonctionnalités de la version v3.7 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Mise à jour 3.6
Avant de procéder à la mise à niveau vers 3.7, assurez-vous que tous vos membres 3.6 ont été mis à jour vers 3.6.11 ou une version ultérieure. Les correctifs 3.6 antérieurs peuvent ne pas être compatibles avec une mise à niveau progressive vers 3.7.
Magasin V2
Le magasin v2 a été entièrement supprimé dans la version 3.7. L’API HTTP v2 (--enable-v2), l’émulation v2 sur v3 (--experimental-enable-v2v3), le service de découverte v2, le paquet client/v2 et le chargement des fichiers d’instantané v2 ont tous disparu. Consultez les références aux changements de rupture dans CHANGELOG-3.7
.
Si vous effectuez une mise à jour à partir d’un cluster 3.6, ces drapeaux sont déjà absents et aucune action n’est requise. Si vous migrez depuis une version antérieure avec des données v2 personnalisées, suivez le guide de migration v2 avant la mise à jour.
Refactorisation Go
La version 3.7 contient des refontes internes importantes qui n’affectent pas les mises à jour normales, mais qui méritent d’être prises en compte lors de la mise à jour d’intégrations personnalisées :
- Migration de
gogo/protobufversgoogle.golang.org/protobufstandard (suivi dans #14533 ). - Migration des bibliothèques de journalisation et d’étiquetage dépréciées
go-grpc-middlewarev1 vers les intercepteurs v2 (#20420 ). - Les intercepteurs gRPC OpenTelemetry ont été mis à jour vers
otelgrpcv0.61.0, remplaçant les composants dépréciésUnaryServerInterceptoretStreamServerInterceptorparNewServerHandler(#20017 ).
Si vous intégrez etcd en tant que bibliothèque, effectuez la compilation contre l’API clientv3, ou dépendez de packages internes, examinez le CHANGELOG
avant de procéder à la mise à jour.
Drapeaux supprimés
Tous les drapeaux --experimental-* obsolètes ont été supprimés dans la version 3.7 (#19959
). Dans la version 3.6, chacun de ces drapeaux a été remplacé soit par un drapeau non expérimental du même nom, soit par une entrée --feature-gates. Si vous avez encore l’un de ces drapeaux défini, remplacez-le par l’équivalent de la version 3.6 avant de passer à la version 3.7, sinon le processus de la version 3.7 ne pourra pas démarrer.
Reportez-vous au guide de mise à jour v3.5 vers v3.6
pour la correspondance de chaque drapeau supprimé vers son équivalent non expérimental ou son entrée --feature-gates.
Drapeaux ajoutés
Aucun.
Drapeaux avec de nouvelles valeurs par défaut
Aucun.
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.7, le cluster en cours d’exécution doit être la version 3.6.11 ou ultérieure. Si le cluster utilise une version mineure antérieure, veuillez d’abord mettre à jour vers la version 3.6 ; etcd ne prend en charge la mise à jour que d’une version mineure à la fois.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, téléchargez la sauvegarde d’instantané . Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour annuler la mise à jour et revenir à la version précédente d’etcd.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster est considéré comme mis à jour uniquement lorsque tous ses membres ont été mis à jour vers la version v3.7. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Retour arrière
Avant de mettre à jour votre cluster etcd, créez et téléchargez une sauvegarde sous forme d’instantané de votre cluster etcd. Cet instantané peut être utilisé pour restaurer le cluster dans son état antérieur à la mise à jour si nécessaire. Si des utilisateurs rencontrent des problèmes pendant la mise à jour, ils doivent d’abord identifier et résoudre la cause racine. Si le cluster est toujours dans un état mixte, où au moins un membre reste sur la version v3.6, il est possible de remplacer le binaire ou l’image par la version v3.6 antérieure, ou de restaurer directement le cluster à l’aide de l’instantané. Dans cet état mixte, le cluster continue de fonctionner en tant que cluster v3.6, permettant ainsi un retour arrière sans suivre un processus formel de rétrogradation.
Toutefois, une fois que tous les membres ont été mis à jour vers la version 3.7, le cluster est considéré comme entièrement mis à jour et la restauration à une version antérieure à l’aide des binaires n’est plus possible. Dans ce cas, les seules options de récupération sont de restaurer à partir de l’instantané pris avant la mise à jour ou de suivre le guide officiel de rétrogradation en cas de problème lors de la mise à jour.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.6 composé de trois membres, exécuté sur une machine locale. La sortie ci-dessous provient d’une exécution réelle contre etcd v3.6.12 et etcd v3.7.0-rc.0 sur un hôte unique utilisant trois ports de boucle locale.
Étape 1 : vérifier les exigences de mise à jour
Le cluster est-il sain et en cours d’exécution avec la version 3.6.11 ou ultérieure ?
Étape 2 : télécharger la sauvegarde d’instantané depuis le leader
Téléchargez l’instantané de sauvegarde afin de disposer d’une voie de retour en cas de problème.
Le leader etcd possède toujours les données d’application les plus récentes ; récupérez donc l’instantané depuis le leader :
Étape 3 : arrêter un serveur etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue. Le leader transfère son rôle avant de s’arrêter :
Étape 4 : redémarrer le serveur etcd avec la même configuration
Redémarrez le serveur etcd avec la même configuration, mais avec le binaire etcd mis à jour.
Le nouvel etcd v3.7 publiera ses informations dans le cluster. À ce stade, le cluster continue de fonctionner selon le protocole v3.6, qui constitue la version la plus basse commune.
{"level":"info","ts":"2026-06-02T07:01:58.920780+0300","caller":"membership/cluster.go:296","msg":"set cluster version from store","cluster-version":"3.6"}
{"level":"info","ts":"2026-06-02T07:01:58.979186+0300","caller":"etcdserver/server.go:1828","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","cluster-id":"7dee9ba76d59ed53","publish-timeout":"7s"}
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le nouveau binaire etcd v3.7 :
Les membres non mis à jour et le membre mis à jour vont générer des messages concernant l’état à version mixte jusqu’à ce que l’intégralité du cluster soit mise à jour. Cela est attendu et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.7.
Étape 5 : répéter l’étape 3 et l’étape 4 pour les membres restants
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version v3.7 :
{"level":"info","ts":"2026-06-02T07:02:36.054783+0300","caller":"etcdserver/server.go:2311","msg":"updating cluster version using v3 API","from":"3.6","to":"3.7"}
{"level":"info","ts":"2026-06-02T07:02:36.059345+0300","caller":"membership/cluster.go:593","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.6","to":"3.7"}
{"level":"info","ts":"2026-06-02T07:02:36.059409+0300","caller":"etcdserver/server.go:2326","msg":"cluster version is updated","cluster-version":"3.7"}
3 - Mettre à jour etcd de la version v3.5 à la version v3.6
Dans le cas général, la mise à niveau d’etcd v3.5 vers v3.6 peut être une mise à niveau progressive sans interruption de service :
- un à un, arrêtez les processus etcd v3.5 et remplacez-les par des processus etcd v3.6
- après avoir lancé tous les processus v3.6, les nouvelles fonctionnalités de la version v3.6 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Mise à jour 3.5
Avant de mettre à jour vers la version 3.6, assurez-vous que tous vos membres 3.5 sont mis à jour vers la version 3.5.32 ou ultérieure
. Les correctifs 3.5.24 à 3.5.26 corrigent plusieurs blocages potentiels liés à la mise à jour ; 3.5.32
ajoute --v2-deprecation=write-only-skip-check et étend etcdutl check v2store afin d’inspecter les enregistrements WAL ainsi que l’instantané v2.
Magasin V2
Si le drapeau --enable-v2 n’est pas configuré ou est défini à false, aucune action supplémentaire n’est requise.
Si --enable-v2 est configuré, exécutez la commande etcdutl check v2store pour vérifier si le v2store contient des données non liées aux membres (données personnalisées). Si aucune donnée personnalisée n’est présente, le drapeau peut être supprimé en toute sécurité. Sinon, consultez le guide de migration v2
pour plus de détails.
Drapeaux ajoutés
Drapeaux supprimés
Drapeaux obsolètes
Le drapeau etcd --experimental-bootstrap-defrag-threshold-megabytes a été déprécié.
Le drapeau etcd --experimental-compaction-batch-limit a été déprécié.
Le drapeau etcd --experimental-compact-hash-check-time a été déprécié.
Le drapeau etcd --experimental-compaction-sleep-interval a été déprécié.
Le drapeau etcd --experimental-corrupt-check-time a été déprécié.
Le drapeau etcd --experimental-enable-distributed-tracing a été déprécié.
Le drapeau etcd --experimental-distributed-tracing-address a été déprécié.
Le drapeau etcd --experimental-distributed-tracing-instance-id a été déprécié.
Le drapeau etcd --experimental-distributed-tracing-sampling-rate a été déprécié.
Le drapeau etcd --experimental-distributed-tracing-service-name a été déprécié.
Le drapeau etcd --experimental-downgrade-check-time a été déprécié.
Le drapeau etcd --experimental-max-learners a été déprécié.
Le drapeau etcd --experimental-memory-mlock a été déprécié.
Le drapeau etcd --experimental-peer-skip-client-san-verification a été déprécié.
Le drapeau etcd --experimental-snapshot-catchup-entries a été déprécié.
Le drapeau etcd --experimental-warning-apply-duration a été déprécié.
Le drapeau etcd --experimental-warning-unary-request-duration a été déprécié.
Le drapeau etcd --experimental-watch-progress-notify-interval a été déprécié.
Migration des options expérimentales de v3.5 vers les portes fonctionnelles
Porte fonctionnelle correspondant à etcd --experimental-compact-hash-check-enabled=true
Porte fonctionnelle correspondant à etcd --experimental-initial-corrupt-check=true
Porte fonctionnelle correspondant à etcd --experimental-enable-lease-checkpoint=true
Porte fonctionnelle correspondant à etcd --experimental-enable-lease-checkpoint-persist=true
Porte fonctionnelle correspondant à etcd --experimental-stop-grpc-service-on-defrag=true
Porte fonctionnelle correspondant à etcd --experimental-txn-mode-write-with-shared-buffer=false
Drapeaux avec de nouvelles valeurs par défaut
Valeur par défaut d’origine du drapeau etcd --snapshot-count=100000
Valeur par défaut d’origine du drapeau etcd --v2-deprecation='not-yet'
Valeur par défaut d’origine du drapeau etcd --discovery-fallback='proxy'
Différence entre les métriques Prometheus
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.6, le cluster en cours d’exécution doit être la version 3.5 ou ultérieure. Si la version est antérieure à 3.5, veuillez mettre à jour vers la version 3.5 avant de procéder à la mise à jour vers la version 3.6.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, téléchargez la sauvegarde d’instantané
. Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour annuler
la mise à jour et revenir à la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version v3.6. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Retour arrière
Avant de mettre à jour votre cluster etcd, créez et téléchargez une sauvegarde sous forme d’instantané de votre cluster etcd. Cet instantané peut être utilisé pour restaurer le cluster dans son état antérieur à la mise à jour si nécessaire. Si les utilisateurs rencontrent des problèmes pendant la mise à jour, ils doivent d’abord identifier et résoudre la cause racine. Si le cluster est toujours dans un état mixte — où au moins un membre reste sur la version v3.5 —, il est possible de remplacer le binaire ou l’image par la version v3.5 antérieure, ou de restaurer directement le cluster à l’aide de l’instantané. Dans cet état mixte, le cluster continue de fonctionner en tant que cluster v3.5, permettant ainsi un retour arrière sans suivre un processus formel de rétrogradation.
Toutefois, une fois que tous les membres ont été mis à jour vers la version v3.6, le cluster est considéré comme entièrement mis à jour et le simple remplacement des binaires n’est plus un retour arrière valide. Les options de récupération consistent à restaurer depuis l’instantané pris avant la mise à jour ou à suivre le guide officiel de rétrogradation pour revenir à la version d’origine en assurant la cohérence et en évitant toute corruption des données.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.5 composé de 3 membres, en cours d’exécution sur une machine locale.
Étape 1 : vérifier les exigences de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.5.x ?
Étape 2 : télécharger la sauvegarde d’instantané depuis le leader
Téléchargez l’instantané de sauvegarde afin de disposer d’une voie de retour en cas de problème.
Le leader etcd possède toujours les données d’application les plus récentes ; récupérez donc l’instantané depuis le leader :
Étape 3 : arrêter un serveur etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Étape 4 : redémarrer le serveur etcd avec la même configuration
Redémarrez le serveur etcd avec la même configuration, mais avec le binaire etcd mis à jour.
Le nouvel etcd v3.6 publiera ses informations dans le cluster. À ce stade, le cluster continue de fonctionner selon le protocole v3.5, qui constitue la version la plus basse commune.
{"level":"info","ts":"2025-03-01T04:40:36.828+0530","caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.889+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"bf9071f4639c75cc","from":"3.0","to":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.828+0530","caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
{"level":"info","ts":"2025-03-01T04:40:36.894+0530","caller":"etcdserver/server.go:1686","msg":"published local member to cluster through raft","local-member-id":"bf9071f4639c75cc","local-member-attributes":"{Name:node1 ClientURLs:[http://127.0.0.1:2379]}","cluster-id":"59a05384c9b79ee","publish-timeout":"7s"}
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le nouveau binaire etcd v3.6 :
Les membres non mis à jour afficheront des avertissements tels que les suivants jusqu’à ce que tout le cluster soit mis à jour.
Cela est attendu et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.6 :
Étape 5 : répéter l’étape 3 et l’étape 4 pour les membres restants
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version v3.6 :
Membre 1 :
{"level":"info","ts":"2025-03-01T04:58:32.375+0530","caller":"etcdserver/server.go:2149","msg":"updating cluster version using v3 API","from":"3.5","to":"3.6"}{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"etcdserver/server.go:2164","msg":"cluster version is updated","cluster-version":"3.6"}
Membre 2 :
{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"91bc3c398fb3c146","from":"3.5","to":"3.6"}
Membre 3 :
{"level":"info","ts":"2025-03-01T04:58:32.377+0530","caller":"membership/cluster.go:539","msg":"updated cluster version","cluster-id":"59a05384c9b79ee","local-member-id":"fd422379fda50e48","from":"3.5","to":"3.6"}
4 - Mettre à jour etcd de 3.4 à 3.5
Dans le cas général, la mise à niveau d’etcd 3.4 vers 3.5 peut être effectuée sans interruption de service, en mode mise à niveau progressive :
- un par un, arrêtez les processus etcd v3.4 et remplacez-les par des processus etcd v3.5
- après avoir lancé tous les processus v3.5, les nouvelles fonctionnalités de la version v3.5 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
Si votre cluster a l’authentification activée, la mise à niveau progressive à partir d’une version 3.4 ou antérieure n’est pas prise en charge, car la version 3.5 modifie le format des entrées WAL liées à l’authentification .
Changements de rupture mis en évidence dans la version 3.5.
Métriques Prometheus etcd_debugging_mvcc_db_total_size_in_bytes obsolètes
v3.5 a promu les métriques Prometheus etcd_debugging_mvcc_db_total_size_in_bytes à etcd_mvcc_db_total_size_in_bytes, afin de favoriser la surveillance du stockage etcd. La version v3.5 déprécie complètement etcd_debugging_mvcc_db_total_size_in_bytes.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Métriques Prometheus etcd_debugging_mvcc_put_total obsolètes
v3.5 a promu les métriques Prometheus etcd_debugging_mvcc_put_total à etcd_mvcc_put_total, afin de favoriser la surveillance du stockage etcd. La version v3.5 déprécie complètement etcd_debugging_mvcc_put_total.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Métriques Prometheus etcd_debugging_mvcc_delete_total obsolètes
v3.5 a promu les métriques Prometheus etcd_debugging_mvcc_delete_total à etcd_mvcc_delete_total, afin de favoriser la surveillance du stockage etcd. La version v3.5 déprécie complètement etcd_debugging_mvcc_delete_total.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Métriques Prometheus etcd_debugging_mvcc_txn_total obsolètes
v3.5 a promu les métriques Prometheus etcd_debugging_mvcc_txn_total à etcd_mvcc_txn_total, afin de favoriser la surveillance du stockage etcd. La version v3.5 déprécie complètement etcd_debugging_mvcc_txn_total.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Métriques Prometheus etcd_debugging_mvcc_range_total obsolètes
v3.5 a promu les métriques Prometheus etcd_debugging_mvcc_range_total à etcd_mvcc_range_total, afin de favoriser la surveillance du stockage etcd. La version v3.5 déprécie complètement etcd_debugging_mvcc_range_total.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation de etcd --logger capnslog
La version 3.5 utilise par défaut --logger=zap afin de prendre en charge plusieurs sorties de journalisation et la journalisation structurée.
etcd --logger=capnslog a été déprécié à partir de la version 3.5, et --logger=zap est désormais la valeur par défaut.
v3.4 ajoute la prise en charge de etcd --logger=zap pour la journalisation structurée et plusieurs sorties de journal. La motivation principale est de favoriser la surveillance automatisée d’etcd, plutôt que d’analyser les journaux serveur lorsqu’il commence à présenter des anomalies. Les développements futurs viseront à réduire au minimum la quantité de logs générés par etcd, et à faciliter sa surveillance grâce aux métriques et aux alertes. etcd --logger=capnslog sera déprécié à partir de v3.5.
Dépréciation de etcd --log-output
v3.4 a renommé etcd --log-output en --log-outputs
afin de prendre en charge plusieurs sorties de journalisation.
etcd --log-output a été déprécié à partir de la version 3.5.
Dépréciation de le drapeau etcd --debug (maintenant --log-level=debug)
Le drapeau etcd --debug a été déprécié.
Dépréciation de etcd --log-package-levels
Le drapeau etcd --log-package-levels pour capnslog a été déprécié.
Maintenant, etcd --logger=zap est la valeur par défaut.
Dépréciation de [CLIENT-URL]/config/local/log
L’endpoint /config/local/log est déprécié à partir de la version 3.5, tout comme le drapeau etcd --log-package-levels.
Modifier les points d’accès HTTP de la passerelle gRPC (obsolète /v3beta)
Avant
Après
/v3beta a été supprimé dans la version 3.5.
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.5, le cluster en cours d’exécution doit être la version 3.4 ou ultérieure. Si la version est antérieure à 3.4, veuillez mettre à jour vers la version 3.4 avant de procéder à la mise à jour vers la version 3.5.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, téléchargez l’instantané de sauvegarde
. Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour rétrograder
vers la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3. Pour les données v2, consultez sauvegarde du magasin de données v2
.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version 3.5. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Limitations
Note : Si le cluster ne contient que des données v3 et aucune donnée v2, il n’est pas soumis à cette limitation.
Si le cluster sert un jeu de données v2 dont la taille dépasse 50 Mo, chaque membre nouvellement mis à jour peut prendre jusqu’à deux minutes pour rattraper le cluster existant. Vérifiez la taille d’un instantané récent afin d’estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre deux minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.5, le cluster sera mis à jour vers la v3.5, et un retour en arrière depuis cet état finalisé est impossible. Toutefois, si un seul membre reste en version v3.4, le cluster et ses opérations restent “v3.4”, et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v3.4 sur tous les membres.
Veuillez télécharger la sauvegarde d’instantané afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.4 à trois membres en cours d’exécution sur une machine locale.
Étape 1 : vérifier les exigences de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.4.x ?
Étape 2 : télécharger la sauvegarde d’instantané depuis le leader
Téléchargez l’instantané de sauvegarde afin de disposer d’une voie de retour en cas de problème.
Le leader etcd possède toujours les données d’application les plus récentes ; récupérez donc l’instantané depuis le leader :
Étape 3 : arrêter un serveur etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Étape 4 : redémarrer le serveur etcd avec la même configuration
Redémarrez le serveur etcd avec la même configuration, mais avec le binaire etcd mis à jour.
Le nouvel etcd v3.5 publiera ses informations dans le cluster. À ce stade, le cluster continue de fonctionner selon le protocole v3.4, qui constitue la version la plus basse commune.
{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.4"}
{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}
Vérifiez que chaque membre, puis l’intégralité du cluster, deviennent sains avec le nouveau binaire etcd v3.5 :
Les membres non mis à jour afficheront des avertissements tels que les suivants jusqu’à ce que tout le cluster soit mis à jour.
Cela est attendu et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.5 :
Étape 5 : répéter l’étape 3 et l’étape 4 pour les membres restants
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.5 :
Membre 1 :
{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.5"}
Membre 2 :
{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.4","from":"3.5"}{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
Membre 3 :
{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.4","from":"3.5"}{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.5"}
5 - Mettre à jour etcd de 3.3 à 3.4
Dans le cas général, la mise à niveau d’etcd 3.3 vers 3.4 peut s’effectuer sans interruption de service, par mise à niveau progressive :
- un par un, arrêtez les processus etcd v3.3 et remplacez-les par des processus etcd v3.4
- après avoir lancé tous les processus v3.4, les nouvelles fonctionnalités de la version v3.4 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
Changements de rupture mis en évidence dans la version 3.4.
Rendre ETCDCTL_API=3 etcdctl par défaut
ETCDCTL_API=3 est désormais la valeur par défaut.
Rendre etcd --enable-v2=false par défaut
etcd --enable-v2=false
est désormais la valeur par défaut.
Cela signifie qu’à moins que etcd --enable-v2=true ne soit spécifié, le serveur etcd v3.4 n’acceptera pas les requêtes de l’API v2.
Si l’API v2 était utilisée, assurez-vous d’activer l’API v2 dans la version 3.4 :
D’autres API HTTP fonctionneront toujours (par exemple [CLIENT-URL]/metrics, [CLIENT-URL]/health, passerelle gRPC v3).
Dépréciation des drapeaux etcd --ca-file et etcd --peer-ca-file
Les drapeaux --ca-file et --peer-ca-file sont obsolètes ; ils ont été dépréciés depuis la version v2.1.
Note : la configuration de ce paramètre active automatiquement l’authentification par certificat client, quelle que soit la valeur définie pour --client-cert-auth.
Erreur grpc.ErrClientConnClosing obsolète
grpc.ErrClientConnClosing a été déprécié dans gRPC >= 1.10
.
Exiger grpc.WithBlock pour la connexion client
Le nouveau répartiteur de charge client
utilise un résolveur asynchrone pour transmettre les points de terminaison à la fonction gRPC dial. En conséquence, le client v3.4 exige l’option grpc.WithBlock pour attendre que la connexion sous-jacente soit active.
Dépréciation des métriques Prometheus etcd_debugging_mvcc_db_total_size_in_bytes
v3.4 promeut les métriques Prometheus etcd_debugging_mvcc_db_total_size_in_bytes vers etcd_mvcc_db_total_size_in_bytes, afin d’encourager la surveillance du stockage etcd.
etcd_debugging_mvcc_db_total_size_in_bytes est toujours fourni dans la version 3.4 pour des raisons de compatibilité descendante. Il sera complètement obsolète dans la version 3.5.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation des métriques Prometheus etcd_debugging_mvcc_put_total
v3.4 promeut les métriques Prometheus etcd_debugging_mvcc_put_total vers etcd_mvcc_put_total, afin d’encourager la surveillance du stockage etcd.
etcd_debugging_mvcc_put_total est toujours fourni dans la version 3.4 pour des raisons de compatibilité descendante. Il sera complètement obsolète dans la version 3.5.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation des métriques Prometheus etcd_debugging_mvcc_delete_total
v3.4 promeut les métriques Prometheus etcd_debugging_mvcc_delete_total vers etcd_mvcc_delete_total, afin d’encourager la surveillance du stockage etcd.
etcd_debugging_mvcc_delete_total est toujours fourni dans la version 3.4 pour des raisons de compatibilité descendante. Il sera complètement obsolète dans la version 3.5.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation des métriques Prometheus etcd_debugging_mvcc_txn_total
v3.4 promeut les métriques Prometheus etcd_debugging_mvcc_txn_total vers etcd_mvcc_txn_total, afin d’encourager la surveillance du stockage etcd.
etcd_debugging_mvcc_txn_total est toujours fourni dans la version 3.4 pour des raisons de compatibilité descendante. Il sera complètement obsolète dans la version 3.5.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation des métriques Prometheus etcd_debugging_mvcc_range_total
v3.4 promeut les métriques Prometheus etcd_debugging_mvcc_range_total vers etcd_mvcc_range_total, afin d’encourager la surveillance du stockage etcd.
etcd_debugging_mvcc_range_total est toujours fourni dans la version 3.4 pour des raisons de compatibilité descendante. Il sera complètement obsolète dans la version 3.5.
Notez que les métriques de l’espace de noms etcd_debugging_* sont marquées comme expérimentales. Au fur et à mesure que nous améliorons le guide de surveillance, certaines métriques pourraient être promues.
Dépréciation du drapeau etcd --log-output (maintenant --log-outputs)
Renommez etcd --log-output en --log-outputs
pour prendre en charge plusieurs sorties de journalisation. etcd --logger=capnslog ne prend pas en charge plusieurs sorties de journalisation.
etcd --log-output sera obsolète à partir de la version 3.5. etcd --logger=capnslog sera obsolète à partir de la version 3.5.
v3.4 ajoute la prise en charge de etcd --logger=zap --log-outputs=stderr pour la journalisation structurée et plusieurs sorties de journal. La motivation principale est de favoriser la surveillance automatisée d’etcd, plutôt que d’analyser les journaux serveur après une panne. Les développements futurs viseront à réduire au minimum la quantité de logs générés par etcd, et à faciliter sa surveillance grâce aux métriques et aux alertes. etcd --logger=capnslog sera déprécié à partir de v3.5.
Changer le type de champ log-outputs dans etcd --config-file en []string
À présent que log-outputs (ancien nom de champ log-output) accepte plusieurs sorties de journalisation, le champ du fichier YAML de configuration etcd log-outputs doit être modifié en type []string comme indiqué ci-dessous :
Renommer embed.Config.LogOutput en embed.Config.LogOutputs
embed.Config.LogOutput a été renommé en embed.Config.LogOutputs
afin de prendre en charge plusieurs sorties de journalisation. Le type de embed.Config.LogOutput est également passé de string à []string
afin de prendre en charge plusieurs sorties de journalisation.
v3.5 déprécie capnslog
v3.5 dépréciera le drapeau etcd --log-package-levels pour capnslog ; etcd --logger=zap --log-outputs=stderr sera la valeur par défaut. v3.5 dépréciera l’endpoint [CLIENT-URL]/config/local/log.
Dépréciation du drapeau etcd --debug (maintenant --log-level=debug)
La version 3.4 déprécie l’utilisation du drapeau etcd --debug
. À la place, utilisez le drapeau etcd --log-level=debug.
Champ pkg/transport.TLSInfo.CAFile obsolète
Champ pkg/transport.TLSInfo.CAFile obsolète.
Modifier embed.Config.SnapCount en embed.Config.SnapshotCount
Pour rester cohérent avec le nom du drapeau etcd --snapshot-count, le champ embed.Config.SnapCount a été renommé en embed.Config.SnapshotCount :
Modifier etcdserver.ServerConfig.SnapCount en etcdserver.ServerConfig.SnapshotCount
Pour rester cohérent avec le nom du drapeau etcd --snapshot-count, le champ etcdserver.ServerConfig.SnapCount a été renommé en etcdserver.ServerConfig.SnapshotCount :
Signature de fonction modifiée dans le package wal
Les signatures de fonction de wal ont été modifiées pour prendre en charge le journalisateur structuré.
Modifier le type IntervalTree dans le package pkg/adt
pkg/adt.IntervalTree est désormais défini comme une interface.
Dépréciation de embed.Config.SetupLogging
embed.Config.SetupLogging a été supprimé afin d’éviter une configuration incorrecte de la journalisation, et est désormais configuré automatiquement.
Modifier les points d’entrée HTTP de la passerelle gRPC (remplacé /v3beta par /v3)
Avant
Après
Les requêtes vers les points de terminaison /v3beta seront redirigées vers /v3, et /v3beta sera supprimé dans la version 3.5.
Balises d’image conteneur obsolètes
latest et les balises de version mineure sont obsolètes :
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.4, le cluster en cours d’exécution doit être la version 3.3 ou ultérieure. Si la version est antérieure à 3.3, veuillez mettre à jour vers la version 3.3 avant de procéder à la mise à jour vers la version 3.4.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, téléchargez la sauvegarde d’instantané
. Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour rétrograder
vers la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3. Pour les données v2, consultez sauvegarde du magasin de données v2
.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version 3.4. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Limitations
Note : Si le cluster ne contient que des données v3 et aucune donnée v2, il n’est pas soumis à cette limitation.
Si le cluster sert un jeu de données v2 dont la taille dépasse 50 Mo, chaque membre nouvellement mis à jour peut prendre jusqu’à deux minutes pour rattraper le cluster existant. Vérifiez la taille d’un instantané récent afin d’estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre deux minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.4, le cluster sera mis à jour vers la version v3.4, et un retour en arrière depuis cet état finalisé est impossible. Toutefois, si un seul membre reste en version v3.3, le cluster et ses opérations restent “v3.3”, et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v3.3 sur tous les membres.
Veuillez télécharger la sauvegarde d’instantané afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.3 composé de 3 membres, en cours d’exécution sur une machine locale.
Étape 1 : vérifier les exigences de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.3.x ?
Étape 2 : télécharger la sauvegarde d’instantané depuis le leader
Téléchargez l’instantané de sauvegarde afin de disposer d’une voie de retour en cas de problème.
Le leader etcd possède toujours les données d’application les plus récentes ; récupérez donc l’instantané depuis le leader :
Étape 3 : arrêter un serveur etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Étape 4 : redémarrer le serveur etcd avec la même configuration
Redémarrez le serveur etcd avec la même configuration, mais avec le binaire etcd mis à jour.
Le nouvel etcd v3.4 publiera ses informations dans le cluster. À ce stade, le cluster continue de fonctionner selon le protocole v3.3, qui constitue la version la plus basse commune.
{"level":"info","ts":1526586617.1647713,"caller":"membership/cluster.go:485","msg":"set initial cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1648536,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.0"}
{"level":"info","ts":1526586617.1649303,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"7339c4e5e833c029","from":"3.0","from":"3.3"}
{"level":"info","ts":1526586617.1649797,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.3"}
{"level":"info","ts":1526586617.2107732,"caller":"etcdserver/server.go:1770","msg":"published local member to cluster through raft","local-member-id":"7339c4e5e833c029","local-member-attributes":"{Name:s1 ClientURLs:[http://localhost:2379]}","request-path":"/0/members/7339c4e5e833c029/attributes","cluster-id":"7dee9ba76d59ed53","publish-timeout":7}
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le binaire etcd v3.4 nouvellement installé :
Les membres non mis à jour afficheront des avertissements tels que les suivants jusqu’à ce que tout le cluster soit mis à jour.
Cela est attendu et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.4 :
Étape 5 : répéter l’étape 3 et l’étape 4 pour les membres restants
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.4 :
Membre 1 :
{"level":"info","ts":1526586949.0920913,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}{"level":"info","ts":1526586949.0921566,"caller":"etcdserver/server.go:2272","msg":"cluster version is updated","cluster-version":"3.4"}
Membre 2 :
{"level":"info","ts":1526586949.092117,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"729934363faa4a24","from":"3.3","from":"3.4"}{"level":"info","ts":1526586949.0923078,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
Membre 3 :
{"level":"info","ts":1526586949.0921423,"caller":"membership/cluster.go:473","msg":"updated cluster version","cluster-id":"7dee9ba76d59ed53","local-member-id":"b548c2511513015","from":"3.3","from":"3.4"}{"level":"info","ts":1526586949.0922918,"caller":"api/capability.go:76","msg":"enabled capabilities for version","cluster-version":"3.4"}
6 - Mettre à jour etcd de 3.2 vers 3.3
Dans le cas général, la mise à niveau d’etcd 3.2 vers 3.3 peut être effectuée sans interruption de service, par mise à niveau progressive :
- un par un, arrêtez les processus etcd v3.2 et remplacez-les par des processus etcd v3.3
- après avoir lancé tous les processus v3.3, les nouvelles fonctionnalités de la version v3.3 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
si vous activez l’authentification et utilisez des baux (avec une durée de vie courte), il y a de fortes chances de rencontrer un problème
entraînant une incohérence des données. Il est fortement recommandé de mettre à jour vers 3.2.31 ou ultérieur avant toute mise à jour vers 3.3, afin de corriger ce problème. En outre, si un utilisateur sans autorisation envoie une requête LeaseRevoke à un nœud 3.3 pendant la mise à jour, cela peut encore provoquer une corruption des données. Le mieux est donc de s’assurer que votre environnement ne contient pas d’appels anormaux avant la mise à jour ; consultez #11691
pour plus de détails.
Changements de rupture mis en évidence dans 3.3.
Changement du type de valeur du drapeau etcd --auto-compaction-retention en string
Le drapeau --auto-compaction-retention a été modifié pour accepter des valeurs de type chaîne
avec une granularité plus fine
. À présent que --auto-compaction-retention accepte des valeurs de type chaîne, le champ du fichier YAML de configuration etcd auto-compaction-retention doit être de type string. Auparavant, --config-file etcd.config.yaml pouvait inclure le champ auto-compaction-retention: 24, désormais il doit être auto-compaction-retention: "24" ou auto-compaction-retention: "24h". Si configuré comme --auto-compaction-mode periodic --auto-compaction-retention "24h", la valeur de durée pour le drapeau --auto-compaction-retention doit être valide pour la fonction time.ParseDuration
en Go.
Modifier *etcdserver.ServerConfig en etcdserver.ServerConfig
etcdserver.EtcdServer a modifié le type de son champ membre *etcdserver.ServerConfig en etcdserver.ServerConfig. Et etcdserver.NewServer prend désormais etcdserver.ServerConfig, plutôt que *etcdserver.ServerConfig.
Avant et après (par exemple k8s.io/kubernetes/test/e2e_node/services/etcd.go )
Ajout du champ embed.Config.LogOutput
Notez que ce champ a été renommé en embed.Config.LogOutputs et est de type []string à partir de la version 3.4. Consultez le guide de mise à jour vers la version 3.4
pour plus de détails.
Le champ LogOutput est ajouté à embed.Config :
Auparavant, les avertissements du serveur gRPC étaient journalisés dans etcdserver.
À compter de la version 3.3, les journaux du serveur gRPC sont désactivés par défaut.
Notez que la méthode embed.Config.SetupLogging a été dépréciée à partir de la version v3.4. Consultez le guide de mise à jour vers la version v3.4
pour plus de détails.
Définissez le champ embed.Config.Debug sur true pour activer les journaux du serveur gRPC.
Modifier la réponse de l’endpoint /health
Précédemment, [endpoint]:[client-port]/health renvoyait une valeur JSON marshalisée manuellement. La version 3.3 définit désormais la structure etcdhttp.Health
.
Notez que dans les versions v3.3.0-rc.0, v3.3.0-rc.1 et v3.3.0-rc.2, etcdhttp.Health possède des champs "health" et "errors" de type booléen. Afin de garantir la compatibilité descendante, nous avons rétabli le champ "health" vers le type string et supprimé le champ "errors". Les informations de santé supplémentaires seront fournies via des API séparées.
Modifier les points d’entrée HTTP de la passerelle gRPC (remplacé /v3alpha par /v3beta)
Avant
Après
Les requêtes vers les points de terminaison /v3alpha seront redirigées vers /v3beta, et /v3alpha sera supprimé dans la version 3.4.
Modifier les limites de taille maximale des requêtes
3.3 permet désormais des limites de taille de requête personnalisées pour le serveur et le côté client. Dans les versions précédentes (v3.2.10, v3.2.11), la taille de réponse du client était limitée à 4 MiB.
Les limites de requêtes côté serveur peuvent être configurées à l’aide du drapeau --max-request-bytes :
Ou configurez le champ embed.Config.MaxRequestBytes :
Si non spécifié, la limite côté serveur est par défaut de 1,5 MiB.
Les limites de requêtes côté client doivent être configurées en fonction des limites côté serveur.
Si non spécifié, la limite d’envoi côté client est par défaut fixée à 2 MiB (1,5 MiB + surcharge gRPC) et la limite de réception à math.MaxInt32. Voir clientv3 godoc
pour plus de détails.
Modifier les signatures des fonctions d’enveloppe du client gRPC brut
3.3 modifie les signatures de fonction du wrapper client gRPC clientv3. Ce changement était nécessaire pour prendre en charge les options personnalisées grpc.CallOption sur les limites de taille de message
.
Avant et après
Changer le type d’erreur de l’API clientv3 Snapshot
Précédemment, l’API clientv3 Snapshot renvoyait des erreurs de type [grpc/*status.statusError] brutes. La version 3.3 les traduit désormais en types d’erreurs publiques correspondants, afin de maintenir une cohérence avec les autres API.
Avant
Après
Changer la sortie de la commande etcdctl lease timetolive
Précédemment, la commande lease timetolive LEASE_ID sur un bail expiré affichait -1s pour le nombre de secondes restantes. La version 3.3 affiche désormais des messages plus clairs.
Avant
Après
Modifier les imports golang.org/x/net/context
clientv3 a déprécié golang.org/x/net/context. Si un projet inclut golang.org/x/net/context dans son répertoire vendor pour d’autres parties du code (par exemple, du code généré par etcd pour les protocoles buffer) et importe github.com/coreos/etcd/clientv3, une version de Go 1.9 ou ultérieure est requise pour la compilation.
Avant
Après
Modifier la dépendance gRPC
3.3 exige désormais grpc/grpc-go
v1.7.5.
Dépréciation de grpclog.Logger
grpclog.Logger a été déprécié en faveur de grpclog.LoggerV2
. clientv3.Logger est désormais grpclog.LoggerV2.
Avant
Après
Dépréciation de grpc.ErrClientConnTimeout
Précédemment, l’erreur grpc.ErrClientConnTimeout était renvoyée en cas de délai d’attente lors de la connexion client. La version 3.3 renvoie désormais context.DeadlineExceeded (voir #8504
).
Avant
Après
Changement du registre conteneur officiel
etcd utilise désormais gcr.io/etcd-development/etcd
comme registre conteneur principal, et quay.io/coreos/etcd
comme secondaire.
Avant
Après
Mises à jour vers v3.3.14 ou une version ultérieure
v3.3.14 a dû intégrer certaines fonctionnalités de la version 3.4, tout en cherchant à minimiser les différences entre les implémentations du répartiteur de charge client. Cette version corrige “kube-apiserver 1.13.x refuse de fonctionner lorsque le premier serveur etcd n’est pas disponible” (kubernetes#72102) .
grpc.ErrClientConnClosing a été déprécié dans gRPC >= 1.10
.
Le nouveau répartiteur de charge client
utilise un résolveur asynchrone pour transmettre les points de terminaison à la fonction de connexion gRPC. En conséquence, v3.3.14
ou une version ultérieure nécessite l’option grpc.WithBlock pour attendre que la connexion sous-jacente soit active.
Veuillez consulter CHANGELOG pour obtenir la liste complète des modifications.
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.3, le cluster en cours d’exécution doit être la version 3.2 ou ultérieure. Si la version est antérieure à 3.2, veuillez mettre à jour vers la version 3.2 avant de procéder à la mise à jour vers la version 3.3.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, sauvegardez les données etcd
. Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour rétrograder
vers la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3. Pour les données v2, consultez sauvegarde du magasin de données v2
.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster est considéré comme mis à jour uniquement lorsque tous ses membres ont été mis à jour vers la version 3.3. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Limitations
Note : Si le cluster ne contient que des données v3 et aucune donnée v2, il n’est pas soumis à cette limitation.
Si le cluster sert un jeu de données v2 dont la taille dépasse 50 Mo, chaque membre nouvellement mis à jour peut prendre jusqu’à deux minutes pour rattraper le cluster existant. Vérifiez la taille d’un instantané récent afin d’estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre deux minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.3, le cluster sera mis à jour vers la v3.3, et un retour en arrière depuis cet état finalisé est impossible. Si toutefois un seul membre reste en version v3.2, le cluster et ses opérations restent “v3.2”, et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v3.2 sur tous les membres.
Veuillez sauvegarder le répertoire de données de tous les membres etcd afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.2 composé de 3 membres, en cours d’exécution sur une machine locale.
1. Vérifier les prérequis de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.2.x ?
2. Arrêtez le processus etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Il est recommandé de procéder à une sauvegarde des données etcd à cette étape afin de disposer d’un chemin de retour en cas de problème :
3. Remplacer le binaire par etcd v3.3 et démarrer le nouveau processus etcd
Le nouvel etcd v3.3 publiera ses informations dans le cluster :
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le nouveau binaire etcd v3.3 :
Les membres mis à jour émettront des avertissements similaires au suivant jusqu’à ce que l’intégralité du cluster soit mise à jour. C’est normal et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.3 :
4. Répétez l’étape 2 à l’étape 3 pour tous les autres membres
5. Terminer
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.3 :
7 - Mettre à jour etcd de 3.1 vers 3.2
Dans le cas général, la mise à niveau d’etcd 3.1 vers 3.2 peut être effectuée sans interruption de service, par mise à niveau progressive :
- un par un, arrêtez les processus etcd v3.1 et remplacez-les par des processus etcd v3.2
- après avoir lancé tous les processus v3.2, les nouvelles fonctionnalités de la version v3.2 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
Changements de rupture mis en évidence dans 3.2.
Changer la valeur par défaut de snapshot-count
Une valeur plus élevée de --snapshot-count conserve davantage d’entrées Raft en mémoire jusqu’à l’instantané, entraînant ainsi une utilisation mémoire plus élevée et récurrente
. Comme le leader conserve les dernières entrées Raft plus longtemps, un suiveur lent dispose de plus de temps pour se synchroniser avant que le leader ne prenne un instantané. --snapshot-count représente un compromis entre une utilisation mémoire plus élevée et une meilleure disponibilité des suiveurs lents.
Depuis la version 3.2, la valeur par défaut de --snapshot-count est passée de 10 000 à 100 000
.
Changement de dépendance gRPC (>=3.2.10)
3.2.10 ou ultérieure exige désormais grpc/grpc-go
v1.7.5 (les versions 3.2.9 et antérieures exigent v1.2.1).
Dépréciation de grpclog.Logger
grpclog.Logger a été déprécié en faveur de grpclog.LoggerV2
. clientv3.Logger est désormais grpclog.LoggerV2.
Avant
Après
Dépréciation de grpc.ErrClientConnTimeout
Précédemment, l’erreur grpc.ErrClientConnTimeout était renvoyée en cas de délai d’attente lors de la connexion client. La version 3.2 renvoie désormais context.DeadlineExceeded (voir #8504
).
Avant
Après
Modifier les limites de taille de requête maximale (>=3.2.10)
3.2.10 et 3.2.11 permettent de définir des limites personnalisées de taille de requête côté serveur. À partir de la version 3.2.12, il est possible de définir des limites personnalisées de taille de requête côté serveur et côté client. Dans les versions antérieures (v3.2.10, v3.2.11), la taille des réponses côté client était limitée à 4 MiB.
Les limites de requêtes côté serveur peuvent être configurées à l’aide du drapeau --max-request-bytes :
Ou configurez le champ embed.Config.MaxRequestBytes :
Si non spécifié, la limite côté serveur est par défaut de 1,5 MiB.
Les limites de requêtes côté client doivent être configurées en fonction des limites côté serveur.
Si non spécifié, la limite d’envoi côté client est par défaut fixée à 2 MiB (1,5 MiB + surcharge gRPC) et la limite de réception à math.MaxInt32. Voir clientv3 godoc
pour plus de détails.
Modifier les enveloppes client gRPC brutes
3.2.12 ou versions ultérieures modifient les signatures de fonction du wrapper client gRPC clientv3. Ce changement était nécessaire pour prendre en charge les options grpc.CallOption sur les limites de taille des messages
.
Avant et après
Modifier l’API clientv3.Lease.TimeToLive
Précédemment, l’API clientv3.Lease.TimeToLive renvoyait lease.ErrLeaseNotFound en cas d’ID de bail inexistant. La version 3.2 renvoie désormais TTL=-1 dans sa réponse, sans erreur (voir #7305
).
Avant
Après
Déplacer clientv3.NewFromConfigFile vers clientv3.yaml.NewConfig
clientv3.NewFromConfigFile est déplacé vers yaml.NewConfig.
Avant
Après
Changement apporté à --listen-peer-urls et --listen-client-urls
3.2 refuse désormais les noms de domaine pour --listen-peer-urls et --listen-client-urls (3.1 n’affichait que des avertissements), car un nom de domaine n’est pas valide pour le lien d’interface réseau. Assurez-vous que ces URL sont correctement formatées en tant que scheme://IP:port.
Consultez issue #6336 pour plus de contextes.
Liste de vérification pour la mise à jour du serveur
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.2, le cluster en cours d’exécution doit être la version 3.1 ou ultérieure. Si la version est antérieure à 3.1, veuillez mettre à jour vers la version 3.1 avant de procéder à la mise à jour vers la version 3.2.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, sauvegardez les données etcd
. Si une erreur survient durant la mise à jour, il sera possible d’utiliser cette sauvegarde pour rétrograder
vers la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3. Pour les données v2, consultez sauvegarde du magasin de données v2
.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version 3.2. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui détermine la version signalée et les fonctionnalités prises en charge.
Limitations
Note : Si le cluster ne contient que des données v3 et aucune donnée v2, il n’est pas soumis à cette limitation.
Si le cluster sert un jeu de données v2 dont la taille dépasse 50 Mo, chaque membre nouvellement mis à jour peut prendre jusqu’à deux minutes pour rattraper le cluster existant. Vérifiez la taille d’un instantané récent afin d’estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre deux minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.2, le cluster sera mis à jour vers la version v3.2, et le retour en arrière depuis cet état finalisé est impossible. Si toutefois un seul membre reste en version v3.1, le cluster et ses opérations restent “v3.1”, et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v3.1 sur tous les membres.
Veuillez sauvegarder le répertoire de données de tous les membres etcd afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd v3.1 composé de 3 membres, en cours d’exécution sur une machine locale.
1. Vérifier les prérequis de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.1.x ?
2. Arrêtez le processus etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Il est recommandé de procéder à une sauvegarde des données etcd à cette étape afin de disposer d’un chemin de retour en cas de problème :
3. Remplacer le binaire par etcd v3.2 et démarrer le nouveau processus etcd
Le nouvel etcd v3.2 publiera ses informations dans le cluster :
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le nouveau binaire etcd v3.2 :
Les membres mis à jour émettront des avertissements similaires au suivant jusqu’à ce que l’intégralité du cluster soit mise à jour. C’est normal et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.2 :
4. Répétez l’étape 2 à l’étape 3 pour tous les autres membres
5. Terminer
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.2 :
8 - Mettre à jour etcd de la version 3.0 à la 3.1
Dans le cas général, la mise à niveau d’etcd 3.0 vers 3.1 peut être effectuée sans interruption de service, par mise à niveau progressive :
- un nœud à la fois, arrêtez les processus etcd v3.0 et remplacez-les par des processus etcd v3.1
- après avoir lancé tous les processus v3.1, les nouvelles fonctionnalités de la version v3.1 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
Surveillance
Les métriques suivantes issues de la version 3.0.x ont été dépréciées en faveur de go-grpc-prometheus :
etcd_grpc_requests_totaletcd_grpc_requests_failed_totaletcd_grpc_active_streamsetcd_grpc_unary_requests_duration_seconds
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.1, le cluster en cours d’exécution doit être la version 3.0 ou ultérieure. Si la version est antérieure à 3.0, veuillez mettre à jour vers la version 3.0 avant de procéder à la mise à jour vers la version 3.1.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl endpoint health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, sauvegardez les données etcd
. Si une erreur survient lors de la mise à jour, il sera possible d’utiliser cette sauvegarde pour rétrograder
vers la version existante d’etcd. Veuillez noter que la commande snapshot ne sauvegarde que les données v3. Pour les données v2, consultez sauvegarde du magasin de données v2
.
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version 3.1. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui détermine la version signalée et les fonctionnalités prises en charge.
Limitations
Note : Si le cluster ne contient que des données v3 et aucune donnée v2, il n’est pas soumis à cette limitation.
Si le cluster sert un jeu de données v2 dont la taille dépasse 50 Mo, chaque membre nouvellement mis à jour peut prendre jusqu’à deux minutes pour rattraper le cluster existant. Vérifiez la taille d’un instantané récent afin d’estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre deux minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.1, le cluster sera mis à jour vers la v3.1, et un retour en arrière depuis cet état finalisé est impossible. Toutefois, si un seul membre reste en version v3.0, le cluster et ses opérations restent “v3.0”, et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v3.0 sur tous les membres.
Veuillez sauvegarder le répertoire de données de tous les membres etcd afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple montre comment mettre à jour un cluster etcd à 3 membres, version 3.0, en cours d’exécution sur une machine locale.
1. Vérifier les prérequis de mise à jour
Le cluster est-il sain et en cours d’exécution sous la version 3.0.x ?
2. Arrêtez le processus etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Il est recommandé de procéder à une sauvegarde des données etcd à cette étape afin de disposer d’un chemin de retour en cas de problème :
3. Remplacer le binaire par etcd v3.1 et démarrer le nouveau processus etcd
Le nouvel etcd v3.1 publiera ses informations dans le cluster :
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le binaire etcd v3.1 nouvellement installé :
Les membres mis à jour émettront des avertissements similaires au suivant jusqu’à ce que l’intégralité du cluster soit mise à jour. C’est normal et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.1 :
4. Répétez l’étape 2 à l’étape 3 pour tous les autres membres
5. Terminer
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.1 :
9 - Mettre à jour etcd de la version 2.3 à la 3.0
Dans le cas général, la mise à niveau d’etcd 2.3 vers 3.0 peut s’effectuer sans interruption de service, par mise à niveau progressive :
- un par un, arrêtez les processus etcd v2.3 et remplacez-les par des processus etcd v3.0
- après avoir lancé tous les processus v3.0, les nouvelles fonctionnalités de la version 3.0 sont disponibles pour le cluster
Avant de lancer la mise à jour , lisez le reste du présent guide afin de vous préparer.
Listes de vérification pour la mise à jour
Lorsque on migre depuis la version v2 sans données v3
, le serveur etcd v3.2+ provoque une panne lorsqu’il restaure à partir d’un instantané existant mais qu’aucun fichier v3 ETCD_DATA_DIR/member/snap/db n’est présent. Cela se produit lorsque le serveur a été migré depuis la version v2 sans données v3 précédentes. Cela empêche également la perte accidentelle de données v3 (par exemple, le fichier db pourrait avoir été déplacé). etcd exige que les opérations après migration vers v3 ne soient effectuées que si des données v3 sont présentes. N’effectuez pas la mise à jour vers des versions v3 plus récentes tant que le serveur v3.0 ne contient pas de données v3.
Exigences de mise à jour
Pour mettre à jour un déploiement etcd existant vers la version 3.0, le cluster en cours d’exécution doit être la version 2.3 ou ultérieure. Si la version est antérieure à 2.3, veuillez mettre à jour vers 2.3 avant de procéder à la mise à jour vers la version 3.0.
En outre, pour garantir une mise à niveau progressive sans incident, le cluster en cours d’exécution doit être sain. Vérifiez l’état de santé du cluster à l’aide de la commande etcdctl cluster-health avant de poursuivre.
Préparation
Avant de mettre à jour etcd, testez toujours les services dépendants d’etcd dans un environnement de préproduction avant de déployer la mise à jour dans l’environnement de production.
Avant de commencer, sauvegardez le répertoire de données etcd . Si une erreur survient durant la mise à jour, il sera possible d’utiliser cette sauvegarde pour revenir à la version d’etcd actuellement déployée .
Versions mixtes
Lors d’une mise à jour, un cluster etcd prend en charge des versions mixtes de membres et fonctionne selon le protocole de la version commune la plus basse. Le cluster n’est considéré comme mis à jour qu’une fois que tous ses membres ont été mis à jour vers la version 3.0. En interne, les membres etcd négocient entre eux afin de déterminer la version globale du cluster, qui contrôle la version signalée et les fonctionnalités prises en charge.
Limitations
Il peut falloir jusqu’à 2 minutes pour que le membre nouvellement mis à jour rattrape le cluster existant lorsque la taille totale des données dépasse 50 Mo. Vérifiez la taille d’un instantané récent pour estimer la taille totale des données. Autrement dit, le plus sûr est d’attendre 2 minutes entre chaque mise à jour de membre.
Pour une taille totale de données bien plus importante, de 100 Mo ou plus, ce processus unique peut prendre encore plus de temps. Les administrateurs de clusters etcd très volumineux de cette ampleur peuvent librement contacter l’équipe etcd avant la mise à jour, et nous serons heureux de leur fournir des conseils sur la procédure.
Rétrogradation
Si tous les membres ont été mis à jour vers la version v3.0, le cluster sera mis à jour vers la version v3.0, et le retour à une version antérieure à partir de cet état finalisé est impossible. Si toutefois un seul membre reste en version v2.3, le cluster et ses opérations restent au niveau « v2.3 », et il est possible, depuis cet état de cluster mixte, de revenir à l’utilisation d’un binaire etcd v2.3 sur tous les membres.
Veuillez sauvegarder le répertoire de données de tous les membres etcd afin de permettre la rétrogradation du cluster, même après sa mise à jour complète.
Procédure de mise à jour
Cet exemple détaille la mise à jour d’un cluster etcd v2.3 à trois membres fonctionnant sur une machine locale.
1. Vérifier les prérequis de mise à jour.
Le cluster est-il sain et en cours d’exécution sous la version v.2.3.x ?
2. Arrêtez le processus etcd existant
Lorsque chaque processus etcd est arrêté, les autres membres du cluster enregistrent des erreurs attendues. Cela est normal, car la connexion avec un membre du cluster a été (temporairement) interrompue :
Il est recommandé de procéder à une sauvegarde du répertoire de données etcd afin de disposer d’un chemin de retour en cas de problème :
3. Remplacer le binaire par etcd v3.0 et démarrer le nouveau processus etcd
Le nouvel etcd v3.0 publiera ses informations dans le cluster :
Vérifiez que chaque membre, puis l’ensemble du cluster, devient sain avec le nouveau binaire etcd v3.0 :
Les membres mis à jour émettront des avertissements similaires au suivant jusqu’à ce que l’intégralité du cluster soit mise à jour. C’est normal et cessera une fois que tous les membres du cluster etcd auront été mis à jour vers la version 3.0 :
4. Répétez l’étape 2 à l’étape 3 pour tous les autres membres
5. Terminer
Lorsque tous les membres sont mis à jour, le cluster signalera avec succès la mise à jour vers la version 3.0 :
Considérations complémentaires
- Les variables d’environnement etcdctl ont été mises à jour. Si
ETCDCTL_API=2 etcdctl cluster-healthfonctionne correctement mais queETCDCTL_API=3 etcdctl endpoints healthrenvoieError: grpc: timed out when dialing, veillez à utiliser les nouveaux noms de variables .
Problèmes connus
- etcd < v3.1 ne fonctionne pas correctement s’il est compilé avec Go > v1.7. Consultez Problème 6951 pour plus d’informations.
- Si une erreur telle que
transport: http2Client.notifyError got notified that the client transport was broken unexpected EOF.apparaît dans les journaux du serveur etcd, assurez-vous qu’etcd est une version précompilée ou bien compilée avec (etcd v3.1+ & go v1.7+) ou (etcd <v3.1 & go v1.6.x). - L’ajout d’un membre v3 à un cluster v2.3 pendant une mise à jour n’est pas pris en charge et peut provoquer des paniques. Consultez Problème 7249 pour plus d’informations. Les versions mixtes de membres etcd ne sont autorisées que pendant la migration vers v3. Terminez les mises à jour avant d’effectuer toute modification de la composition du cluster.