I container software sono un modo conveniente per eseguire le tue app in più istanze isolate dello spazio utente. Puoi eseguire container su immagini VM pubbliche Linux o Windows Server oppure su un'immagine Container-Optimized OS. I container consentono alle app di essere eseguite con meno dipendenze sulla macchina virtuale (VM) host e in modo indipendente da altre app containerizzate di cui viene eseguito il deployment nella stessa istanza VM. Queste caratteristiche rendono le app containerizzate più portatili, più facili da implementare e da gestire su larga scala.
Questo documento descrive alcune delle tecnologie 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 dell'ambiente container e degli 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, come bilanciamento del carico, node pool, riparazione automatica dei nodi, scalabilità e upgrade automatici, logging e monitoraggio, fornite da Google Cloud .
Scopri come creare un cluster GKE con node pool 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 senza addebiti per l'esecuzione, il test e il deployment dei workload.
Fai una prova senza costi di Compute EngineTecnologie dei container in esecuzione su Compute Engine
In generale, le istanze di Compute Engine possono eseguire quasi tutte le tecnologie o gli strumenti per i container. Puoi eseguire diversi tipi di container sui moderni sistemi operativi Linux. Puoi anche eseguire Docker su Windows Server 2016 o versioni successive. Il seguente elenco include diversi strumenti comuni che puoi utilizzare per eseguire e gestire app containerizzate:
- Docker e Podman sono due tecnologie di containerizzazione popolari 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 all'interno di un ambiente cloud ibrido.
- 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 eseguirli all'interno delle istanze VM di Compute Engine per una soluzione di migrazione 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 su Kubernetes su Compute Engine o su 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 minimalista 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
- Include: Docker, Kubernetes
- Progetto immagine:
cos-cloud
- Famiglia di immagini:
cos-stable
- Fedora CoreOS
- Include: 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 strumenti e tecnologie container specifici su immagini che non li includono per impostazione predefinita, installali manualmente.
Installazione di tecnologie container sulle istanze
Per avviare un singolo container su 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 la sezione Deployment di container sulle VM .
In alternativa, puoi eseguire i carichi di lavoro dei container su Compute Engine utilizzando le tecnologie dei container e gli strumenti di orchestrazione che ti servono. Puoi creare un'istanza da un'immagine VM pubblica e poi installare le tecnologie container che preferisci. Ad esempio:
- Installa Docker sulle istanze Compute Engine per poter eseguire le immagini container Docker su queste istanze.
- Installa Podman sulle istanze Compute Engine come alternativa al runtime dei container Docker.
- Installa Kubernetes sulle tue istanze per fornire l'orchestrazione dei container sia per i container Docker che per quelli Open Container Initiative (OCI).
In alcune situazioni, potresti aver bisogno di versioni specifiche di queste tecnologie per assicurarti che funzionino correttamente insieme. Ad esempio, Kubernetes in genere funziona meglio con versioni specifiche di Docker. In genere, puoi installare le versioni più recenti di queste tecnologie per ottenere il miglior risultato.
Installazione di Docker sulle immagini Windows Server
Windows Server 2016 e versioni successive includono il supporto dei container. Se prevedi di eseguire container Docker su un'istanza Windows Server, puoi installare Docker su un'immagine di base di 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.
Inizia creando un'istanza Windows Server utilizzando un'immagine pubblica di Windows Server 2019 o versioni successive. Per il miglior supporto dei container, ti consigliamo di utilizzare la versione LTSC più recente di Windows Server. Per saperne di più su LTSC, consulta Canali di manutenzione di Windows Server.
Installa Docker
Installa Docker su Windows. Per saperne di più, vedi 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 seguente comando scarica l'immagine container Windows nanoserver
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 di rete predefinita di Docker è 1500 byte. Se hai configurato l'MTU della rete VPC anche su 1500 byte, puoi ignorare il resto di questa sezione. Tuttavia, se nella tua rete utilizzi l'MTU VPC predefinito di 1460 byte, devi eseguire una configurazione aggiuntiva su ogni istanza.
Imposta l'MTU per tutte le interfacce di rete (sia Ethernet che vEthernet) su 1460
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à dai container a internet potrebbe essere instabile perché, per impostazione predefinita, l'interfaccia di rete del container utilizza anche un MTU di 1500
. Per i comandi per impostare correttamente l'MTU per ogni container, consulta la sezione MTU del container.
Potresti dover eseguire nuovamente questi comandi MTU periodicamente durante la configurazione della rete Docker. Per tutti i dettagli, consulta la sezione Problemi noti.
Esecuzione di container Windows
Esistono molte risorse disponibili per iniziare a utilizzare i container Windows:
- Microsoft fornisce una vasta documentazione sui container Windows.
Docker Hub può essere utilizzato come repository per archiviare ed estrarre i container Windows.
Problemi noti con i container Windows
Ritiro di Windows Server 2019 per le immagini container
Google ha offerto 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 interrotto la distribuzione e il supporto di Mirantis Container Runtime per Windows Server. Sebbene Google abbia potuto continuare a pubblicare questa famiglia di immagini fino al 30 ottobre 2023, ora è deprecata 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 essere eseguite senza interruzioni. Tuttavia, la creazione di istanze per nuove istanze basate su queste immagini non andrà a buon fine dopo questa data.
Le immagini personalizzate derivate da queste immagini prima del 30 ottobre 2023 continueranno a funzionare. Tuttavia, le immagini personalizzate non riceveranno automaticamente gli aggiornamenti di Patch Tuesday di Windows né le versioni aggiornate di Mirantis Container Runtime.
Se vuoi continuare a utilizzare immagini con Mirantis Container Runtime preinstallato, Mirantis Inc offre immagini su Google Cloud Marketplace. Il costo di queste immagini VM include l'assistenza e le licenze per Mirantis Container Runtime direttamente da Mirantis. I clienti interessati a utilizzare Mirantis Container Runtime autonomo possono anche scaricarlo direttamente dal sito web di Mirantis.
Se vuoi eseguire la migrazione a un runtime del container alternativo come Docker CE, segui le istruzioni riportate sopra.
I container non sono compatibili tra le versioni di Windows
I container basati su versioni precedenti di Windows non funzionano nelle istanze Compute Engine che eseguono versioni più recenti di Windows. Docker esegue il pull della versione Windows Server 2019 di un container per impostazione predefinita. Ciò significa che l'esecuzione del seguente comando in un'istanza che esegue Windows Server versione 1709 o 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 di Microsoft sulla compatibilità delle versioni dei contenitori Windows contiene ulteriori informazioni. Per risolvere i problemi di incompatibilità tra le versioni dei container Windows, specifica il tag corrispondente alla tua versione di Windows quando esegui il pull e l'esecuzione dei container. Ad esempio, in un'istanza di Windows Server,
versione 20H2, utilizza il seguente comando per eseguire un prompt dei comandi nel
container nanoserver
versione 20H2 anziché nel container 2019 LTSC (1809) predefinito:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
Le incompatibilità MTU influiscono sulla connettività di istanze e container
Quando crei una rete di container su un'istanza Windows utilizzando i comandi docker
network create
o New-VMSwitch
, l'MTU dell'interfaccia di rete dell'istanza viene in genere forzato a 1500
. L'interfaccia di rete predefinita all'interno di un nuovo container Docker in genere utilizza anche un MTU di 1500
.
Se la tua rete VPC ha un MTU di 1460
, potresti
riscontrare i seguenti problemi:
La sessione RDP può interrompersi e potresti non riuscire a riconnetterti. Questo problema si verifica quando viene creata una rete di container trasparenti.
La risoluzione DNS all'interno del container potrebbe non riuscire.
La risoluzione DNS è riuscita, ma la creazione di una connessione HTTP dal container 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 container
su 1460
. In alternativa, puoi
impostare l'MTU per il VPC su 1500
, ma ciò
richiede l'arresto o la migrazione di tutte le VM.
1. Impostazione dell'MTU per le interfacce di rete dell'istanza Windows
Esegui il seguente comando in un terminale PowerShell sull'istanza Windows per impostare l'MTU per tutte le interfacce di rete (Ethernet e 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
ed eseguire i comandi netsh
per riparare l'MTU. Per evitare di doverlo fare, ti consigliamo di eseguire i comandi docker network ...
o New-VMSwitch
nell'ambito di uno script che esegue anche il comando di riparazione MTU.
2. Impostazione dell'MTU per le interfacce di rete dei container Windows
L'MTU per un container Windows deve essere impostata durante l'esecuzione del container, dall'interno del container o dall'istanza che lo ospita. Se PowerShell è disponibile nel container, puoi eseguire questo comando in modo interattivo o da uno script nel container 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 container in esecuzione:
PS C:\> Get-NetIPInterface -IncludeAllCompartments |
Where-Object InterfaceAlias -like "vEthernet*" |
Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460
Impossibile avviare i container Hyper-V
I contenitori Hyper-V non sono attualmente supportati su Compute Engine.
Passaggi successivi
- Crea e avvia un'istanza che puoi utilizzare per eseguire applicazioni containerizzate.
- Scopri di più sulle istanze Compute Engine.
- Scopri di più su Google Kubernetes Engine, che puoi utilizzare per eseguire i container su Google Cloud senza gestire direttamente le istanze Compute Engine.
- Scopri di più su Kubernetes.
- Scopri come utilizzare Artifact Registry per archiviare privatamente le immagini container in Google Cloud.