Lo scenario target ideale
Sì, è necessario utilizzare un bilanciamento del carico e aggiornare un'istanza alla volta. Non sono sicuro di dove arrivi la comunicazione tra container.
Ad esempio, immagina di avere un bilanciamento del carico che serve il tuo sito A. Gli utenti si connettono ad esso solo come e lo conoscono solo come "A". Il bilanciamento del carico sa che ci sono due o più backend (B, C, ecc.) E non importa se sono VM o container.
Quindi, si desidera aggiornare i backend, che in questo caso sono istanze di Apache.
- togliere B dai backend idonei per il bilanciamento del carico in modo che non accetti più traffico.
- attendere che le richieste attualmente attive vengano servite e le connessioni esistenti chiuse.
- aggiorna il contenitore o la macchina virtuale sottostante che serve B
- riavviare B, attendere il caricamento e iniziare a lavorare
- prova B per assicurarti di soddisfare correttamente le nuove richieste
- aggiungere B al pool back-end del bilanciamento del carico per riattivare il traffico
Quindi, fai lo stesso processo per C, D, ecc.
Si noti che esiste una richiesta aperta per gli aggiornamenti sul posto dei contenitori Docker , da novembre 2013, ma non sembra avere molti progressi, quindi la soluzione di cui sopra è ciò che si dovrebbe fare nel frattempo.
Cosa fare per un sito live esistente
Presumibilmente, lo stai chiedendo perché stai già eseguendo un sito live in questo modello e desideri aggiornarlo senza tempi di inattività. Quindi, dobbiamo raggiungere lo stato target ideale sopra, ma in modo incrementale.
Supponiamo che:
- hai un nome DNS che punta al tuo contenitore
- il tuo contenitore gira su qualche indirizzo IP
- i tuoi utenti non conoscono l'indirizzo IP del contenitore e non sono codificati da nessuna parte
Se questi presupposti sono falsi, è necessario innanzitutto correggerlo in modo che sia corretto.
Quindi, attenersi alla seguente procedura:
- creare un bilanciamento del carico su un nuovo IP e puntarlo al contenitore esistente come unico back-end
- cambia DNS in modo che punti direttamente al bilanciamento del carico anziché all'IP del contenitore
- aggiungere un backend Apache identico con la stessa configurazione del contenitore VM +
- ora hai un bilanciamento del carico con due backend B e C, quindi segui le istruzioni nella sezione "scenario target ideale" per aggiornarli uno alla volta
Come aggiornare un bilanciamento del carico
Il modo semplice (ospitato)
L'opzione più semplice è non eseguire il proprio bilanciamento. Ad esempio, se si utilizza una piattaforma cloud che fornisce il bilanciamento del carico come servizio, è consigliabile utilizzarlo e quindi la manutenzione e l'aggiornamento del bilanciamento del carico non rappresentano un problema.
Il modo manuale
Se si esegue il proprio bilanciamento del carico, sarà utile aggiungere un altro livello di riferimento indiretto (ovvero DNS). Supponiamo che:
- che abbiamo un nome host che si risolve nell'IP del nostro bilanciamento del carico A che vorremmo aggiornare
- il nostro bilanciamento del carico ha un pool back-end di P1, P2, ecc.
Procediamo come segue:
e hai finito.
Dettagli, diagrammi e strumenti
Vedi questi articoli e strumenti che possono aiutarti ad automatizzare il processo, ma l'idea generale è la stessa:
La morale
"Tutti i problemi nell'informatica possono essere risolti da un altro livello di riferimento indiretto, tranne ovviamente per il problema di un numero eccessivo di riferimenti indiretti." - David Wheeler