Container su Compute Engine


I contenitori software sono un modo pratico per eseguire le app in più istanze isolate dello spazio utente. Puoi eseguire i container su immagini VM pubbliche Linux o Windows Server o su un'immagine Container-Optimized OS. I container consentono di eseguire le app con meno dipendenze sulla macchina virtuale (VM) host e indipendentemente da altre app containerizzate di cui esegui il deployment nella stessa istanza VM. Queste caratteristiche rendono le app con contenitori più portatili, più facili da implementare e da gestire su larga scala.

Questo documento descrive alcune delle tecnologie dei container più comuni che puoi utilizzare per eseguire container sulle istanze Compute Engine. Puoi utilizzare queste tecnologie sulla maggior parte delle immagini VM pubbliche fornite da Compute Engine.

Esegui i container su Compute Engine quando hai bisogno di un controllo completo sul tuo ambiente container e sui tuoi strumenti di orchestrazione dei container.

In alternativa, puoi utilizzare Google Kubernetes Engine (GKE) per semplificare le attività di gestione dei cluster e di orchestrazione dei container in modo da non dover gestire le istanze VM sottostanti. GKE fornisce un ambiente gestito per il deployment, la gestione e la scalabilità delle applicazioni containerizzate utilizzando l'infrastruttura Google.

L'ambiente GKE è composto da più macchine (in particolare, istanze di Compute Engine) raggruppate per formare un cluster. Quando esegui un cluster GKE, puoi avvalerti delle funzionalità avanzate di gestione dei cluster offerte da Google Cloud, come il bilanciamento del carico, i pool di nodi, la riparazione automatica dei nodi, la scalabilità e gli upgrade automatici, nonché il logging e il monitoraggio.

Scopri come creare un cluster GKE con pool di nodi che eseguono Microsoft Windows Server.

Provalo

Se non conosci Google Cloud, crea un account per valutare le prestazioni di Compute Engine in scenari reali. I nuovi clienti ricevono anche 300 $ di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.

Prova Compute Engine gratuitamente

Tecnologie dei contenitori in esecuzione su Compute Engine

In generale, le istanze Compute Engine possono eseguire quasi qualsiasi tecnologia o strumento per i container. Puoi eseguire diversi tipi di container sui sistemi operativi Linux moderni. Puoi anche eseguire Docker su Windows Server 2016 o versioni successive. L'elenco seguente include diversi strumenti comuni che puoi utilizzare per eseguire e gestire le app containerizzate:

  • Docker e Podman sono due popolari tecnologie di containerizzazione che ti consentono di eseguire app containerizzate.
  • Kubernetes è una piattaforma di orchestrazione dei container che puoi utilizzare per gestire e scalare i container in esecuzione su più istanze o in un ambiente cloud ibrido.
  • I container su Compute Engine offrono un modo semplice per eseguire il deployment dei container nelle istanze VM di Compute Engine o nei gruppi di istanze gestite.
  • Puoi convertire i tuoi sistemi esistenti in immagini LXD ed eseguire le all'interno di istanze VM Compute Engine per una soluzione di migrazione di tipo lift-and-shift. LXD viene eseguito su immagini Ubuntu.

Inoltre, puoi utilizzare Artifact Registry per gestire le versioni delle immagini container. Artifact Registry funge da posizione centrale per archiviare e gestire le immagini container prima di eseguirne il deployment in Kubernetes su Compute Engine o nei cluster Google Kubernetes Engine.

Immagini VM ottimizzate per i container

Compute Engine fornisce diverse immagini VM pubbliche che puoi utilizzare per creare istanze ed eseguire i carichi di lavoro dei container. Alcune di queste immagini VM pubbliche hanno un sistema operativo minimalistico ottimizzato per i container che include versioni più recenti di Docker, Podman o Kubernetes preinstallate. Le seguenti famiglie di immagini pubbliche sono progettate specificamente per l'esecuzione di container:

  • Container-Optimized OS di Google
    • Sono inclusi: Docker, Kubernetes
    • Progetto immagine: cos-cloud
    • Famiglia di immagini: cos-stable
  • Fedora CoreOS
    • Sono inclusi: Podman, Docker
    • Progetto immagine: fedora-coreos-cloud
    • Famiglia di immagini: fedora-coreos-stable
  • Ubuntu
    • Include: LXD
    • Progetto immagine: ubuntu-os-cloud
    • Famiglia di immagini: ubuntu-2004-lts

Se devi eseguire tecnologie e strumenti per i container specifici su immagini che non le includono per impostazione predefinita, installa queste tecnologie manualmente.

Installazione di tecnologie dei contenitori sulle istanze

Per avviare un singolo container in un'istanza, puoi specificare un'immagine container quando crei un'istanza. Compute Engine fornisce automaticamente un'immagine Container-Optimized OS aggiornata con Docker installato e avvia il container all'avvio della VM. Per ulteriori informazioni, consulta Eseguire il deployment dei contenitori sulle VM .

In alternativa, puoi eseguire i carichi di lavoro dei container su Compute Engine utilizzando le tecnologie e gli strumenti di orchestrazione dei container di cui hai bisogno. Puoi creare un'istanza da un'immagine VM pubblica e poi installare le tecnologie dei container che preferisci. Ad esempio:

In alcuni casi, potresti richiedere versioni specifiche di queste tecnologie per assicurarti che funzionino correttamente insieme. Ad esempio, Kubernetes solitamente funziona al meglio con versioni specifiche di Docker. In genere, puoi installare le versioni più recenti di queste tecnologie per ottenere il risultato migliore.

Installazione di Docker sulle immagini Windows Server

Windows Server 2016 e le versioni successive includono il supporto dei container. Se prevedi di eseguire i container Docker su un'istanza Windows Server, puoi installare Docker su un'immagine di base Windows Server o utilizzare le immagini del marketplace di Mirantis.

Se vuoi installare Docker CE sull'immagine di base di Windows Server, segui i passaggi descritti di seguito.

Per iniziare, crea un'istanza di Windows Server utilizzando un'immagine pubblica di Windows Server 2019 o versioni successive. Per il miglior supporto dei contenitori, ti consigliamo di utilizzare la versione LTSC più recente di Windows Server. Per ulteriori informazioni su LTSC, consulta Canali di assistenza di Windows Server.

Installa Docker

Installa Docker su Windows. Per ulteriori informazioni, consulta Preparare Windows per i container. Riavvia l'istanza al termine dell'installazione.

Ulteriori passaggi di configurazione

A questo punto puoi utilizzare Docker per eseguire i container nell'istanza. Ad esempio, il comando seguente scarica l'immagine del container nanoserver di Windows ed esegue un prompt dei comandi all'interno di un container nanoserver:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

L'MTU della rete predefinita di Docker è 1500 byte. Se hai configurato anche l'MTU della rete VPC su 1500 byte, puoi ignorare il resto di questa sezione. Tuttavia, se nella tua rete utilizzi il valore MTU VPC predefinito di 1460 byte, devi eseguire alcune configurazioni aggiuntive su ogni istanza.

Imposta MTU su 1460 per tutte le interfacce di rete (Ethernet e vEthernet) eseguendo i seguenti comandi in un terminale PowerShell su ogni istanza:

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1     306804     668688  Ethernet
  1460                1          0       1282  vEthernet (nat)

Anche dopo aver modificato l'MTU dell'istanza, la connettività dei container a internet potrebbe essere instabile perché, per impostazione predefinita, anche l'interfaccia di rete del container utilizza un MTU di 1500. Per i comandi per impostare correttamente l'MTU per ogni contenitore, consulta la sezione MTU del contenitore.

Potresti dover eseguire nuovamente periodicamente questi comandi MTU durante la configurazione della rete Docker. Per maggiori dettagli, consulta la sezione relativa ai problemi noti.

Eseguire container Windows

Esistono molte risorse disponibili per iniziare a utilizzare i container Windows:

  • Microsoft fornisce una documentazione completa sui container Windows.
  • Docker Hub può essere utilizzato come repository per archiviare e scaricare i container Windows.

Problemi noti con i contenitori Windows

Ritiro delle immagini di Windows Server 2019 per i container

Google offriva una famiglia di immagini Windows Server con Mirantis Container Runtime (in precedenza Docker EE) preinstallato:

  • Windows
    • Include: Docker
    • Progetto immagine: windows-cloud
    • Famiglia di immagini: windows-2019-core-for-containers

All'inizio del 2023, Microsoft ha smesso di distribuire e supportare il runtime dei container Mirantis per Windows Server. Sebbene Google sia riuscita a continuare a pubblicare questa famiglia di immagini fino al 30 ottobre 2023, ora è stata ritirata e tutte le immagini al suo interno sono state contrassegnate come obsolete.

Le macchine virtuali basate su queste immagini create prima del 30 ottobre 2023 continueranno a funzionare senza interruzioni. Tuttavia, la creazione di nuove istanze basate su queste immagini non andrà a buon fine dopo questa data.

Le immagini personalizzate ricavate da queste immagini prima del 30 ottobre 2023 continueranno a funzionare. Tuttavia, le immagini personalizzate non riceveranno automaticamente gli aggiornamenti di Windows del Patch Tuesday né le versioni aggiornate del runtime del contenitore Mirantis.

Se vuoi continuare a utilizzare le immagini con il runtime del contenitore Mirantis preinstallato, Mirantis Inc offre immagini su Google Cloud Marketplace. Il costo di queste immagini VM include il supporto e la licenza per Mirantis Container Runtime direttamente da Mirantis. I clienti interessati a utilizzare il runtime dei contenitori Mirantis autonomo possono anche scaricarlo direttamente dal sito web di Mirantis.

Se vuoi eseguire la migrazione a un runtime del contenitore alternativo come Docker CE, segui le istruzioni riportate sopra.

I container non sono compatibili tra le versioni di Windows

I container creati su versioni precedenti di Windows non funzionano nelle istanze Compute Engine che eseguono versioni più recenti di Windows. Per impostazione predefinita, Docker estrae la versione Windows Server 2019 di un contenitore. Ciò significa che l'esecuzione del seguente comando in un'istanza che esegue Windows Server 1709 o versioni successive genera un errore:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver cmd.exe
docker: Error response from daemon: container
9a1eb8bbcba4e91792be65f3c40b5a1aee062f02fbc60a78444b47d043438069 encountered an
error during CreateContainer: failure in a Windows system call: The operating
system of the container does not match the operating system of the host.
(0xc0370101)

La pagina Compatibilità delle versioni dei contenitori Windows di Microsoft contiene ulteriori informazioni. Per aggirare le incompatibilità delle versioni dei container Windows, specifica il tag corrispondente alla tua versione di Windows quando estrai ed esegui i container. Ad esempio, in un'istanza Windows Server, nella versione 20H2, utilizza il seguente comando per eseguire un prompt dei comandi nel contenitore nanoserver della versione 20H2 anziché nel contenitore 2019 LTSC (1809) predefinito:

PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe

Le incompatibilità MTU influiscono sulla connettività delle istanze e dei container

Quando crei una rete di contenitori su un'istanza Windows utilizzando i comandi docker network create o New-VMSwitch, l'MTU dell'interfaccia di rete dell'istanza è in genere impostato su 1500. Anche l'interfaccia di rete predefinita all'interno di un nuovo contenitore Docker solitamente utilizza un MTU di 1500. Se la tua rete VPC ha un'MTU pari a 1460, potresti riscontrare i seguenti problemi:

  • La sessione RDP può interrompersi e potresti non essere in grado di riconnetterti. È noto che questo accade quando viene creata una rete di contenitori trasparenti.

  • La risoluzione DNS all'interno del contenitore potrebbe non riuscire.

  • La risoluzione DNS è riuscita, ma la creazione di una connessione HTTP dal contenitore a internet potrebbe non riuscire.

La soluzione alternativa consigliata per queste limitazioni richiede due passaggi: impostare l'MTU per le interfacce di rete dell'istanza su 1460 e impostare l'MTU per le interfacce di rete del contenitore su 1460. In alternativa, puoi impostare l'MTU per la VPC su 1500, ma questo richiede l'interruzione o la migrazione di tutte le VM.

1. Impostazione del valore MTU per le interfacce di rete dell'istanza Windows

Esegui il seguente comando in un terminale PowerShell nell'istanza Windows per impostare l'MTU per tutte le interfacce di rete (sia Ethernet che vEthernet):

PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

Verifica che gli MTU delle interfacce Ethernet e vEthernet dell'istanza siano impostati su 1460 utilizzando questo comando:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295            1          0          0  Loopback Pseudo-Interface 1
  1460                1  628295912    2613170  Ethernet
  1460                1      37793     223909  vEthernet (nat)

Se non riesci a eseguire questi comandi perché non riesci più a connetterti a un'istanza utilizzando RDP, puoi connetterti all'istanza tramite la console seriale, avviare un prompt cmd e eseguire i comandi netsh per riparare l'MTU. Per evitare di dover eseguire questo passaggio, consigliamo di eseguire i comandi docker network ... o New-VMSwitch all'interno di uno script che esegua anche il comando di riparazione MTU.

2. Impostazione del valore MTU per le interfacce di rete dei container Windows

L'MTU per un contenitore Windows deve essere impostato mentre il contenitore è in esecuzione, dall'interno del contenitore o dall'istanza che lo ospita. Se PowerShell è disponibile nel tuo contenitore, puoi eseguire questo comando in modo interattivo o da uno script nel contenitore per impostare correttamente l'MTU:

PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
  & netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}

In alternativa, puoi eseguire questo comando sull'istanza Windows per impostare l'MTU per tutti i contenitori in esecuzione:

PS C:\> Get-NetIPInterface -IncludeAllCompartments |
  Where-Object InterfaceAlias -like "vEthernet*" |
  Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460

I container Hyper-V non riescono ad avviarsi

I contenitori Hyper-V non sono attualmente supportati su Compute Engine.

Passaggi successivi