Le scénario cible idéal
Oui, vous devez utiliser un équilibreur de charge et mettre à jour une instance à la fois. Je ne sais pas où intervient la communication entre conteneurs.
À titre d'exemple, imaginez que vous disposez d'un équilibreur de charge qui dessert votre site A. Les utilisateurs ne s'y connectent qu'en tant que et le connaissent uniquement en tant que «A». L'équilibreur de charge sait qu'il existe deux ou plusieurs backends (B, C, etc.), et qu'il s'agisse de VM ou de conteneurs, peu importe.
Ensuite, vous souhaitez mettre à niveau les backends, qui dans ce cas sont des instances Apache.
- supprimer B des backends éligibles pour l'équilibreur de charge afin qu'il n'accepte plus de trafic.
- attendez que les demandes en direct soient traitées et que les connexions existantes soient fermées.
- mettre à jour le conteneur ou la machine virtuelle sous-jacente qui dessert B
- redémarrez B, attendez qu'il se charge et commencez à travailler
- testez B pour vous assurer qu'il répond correctement aux nouvelles demandes
- ajoutez B au pool d'arrière-plan de l'équilibreur de charge pour réactiver le trafic
Ensuite, faites le même processus pour C, D, etc.
Notez qu'il y a une demande ouverte de mises à niveau sur place des conteneurs Docker , à partir de novembre 2013, mais il ne semble pas avoir beaucoup de progrès, donc la solution ci-dessus est ce que vous devez faire dans l'intervalle.
Que faire pour un site en ligne existant
Vraisemblablement, vous posez cette question parce que vous exécutez déjà un site en direct dans ce modèle et que vous souhaitez le mettre à niveau sans temps d'arrêt. Donc, nous devons atteindre l'état cible idéal ci-dessus, mais progressivement.
Supposons que:
- vous avez un nom DNS pointant vers votre conteneur
- votre conteneur fonctionne sur une adresse IP
- vos utilisateurs ne connaissent pas l'adresse IP du conteneur et elle n'est codée en dur nulle part
Si ces hypothèses sont fausses, vous devez d'abord les corriger de manière à ce qu'elles soient correctes.
Ensuite, suivez ces étapes:
- créer un équilibreur de charge sur une nouvelle adresse IP et le pointer vers le conteneur existant comme seul backend
- changer le DNS pour pointer vers l'équilibreur de charge plutôt que l'IP du conteneur directement
- ajouter un backend Apache identique avec la même configuration de conteneur VM +
- vous avez maintenant un équilibreur de charge avec deux backends B et C, alors suivez les instructions de la section "scénario cible idéal" pour les mettre à niveau une par une
Comment mettre à jour un équilibreur de charge
La manière simple (hébergée)
L'option la plus simple consiste à ne pas exécuter votre propre équilibreur. Par exemple, si vous utilisez une plateforme cloud qui fournit l'équilibrage de charge en tant que service, envisagez de l'utiliser, puis la maintenance et la mise à jour de l'équilibreur de charge ne sont pas un problème.
La voie manuelle
Si vous exécutez votre propre équilibreur de charge, l'ajout d'une autre couche d'indirection (c'est-à-dire DNS) vous aidera. Supposons ce qui suit:
- que nous avons un nom d'hôte se résolvant à l'IP de notre équilibreur de charge A que nous aimerions mettre à jour
- notre équilibreur de charge dispose d'un pool backend de P1, P2, etc.
Nous procédons comme suit:
et tu as fini.
Détails, diagrammes et outillage
Voir ces articles et outils qui peuvent vous aider à automatiser le processus, mais l'idée générale est la même:
Le moral
"Tous les problèmes de l'informatique peuvent être résolus par un autre niveau d'indirection, à l'exception bien sûr du problème des trop nombreuses indirections." - David Wheeler