Os contentores de software são uma forma conveniente de executar as suas apps em várias instâncias de espaço do utilizador isoladas. Pode executar contentores em imagens de VMs públicas do Linux ou do Windows Server, ou numa imagem do SO otimizado para contentores. Os contentores permitem que as suas apps sejam executadas com menos dependências na máquina virtual (VM) anfitriã e que sejam executadas independentemente de outras apps contentorizadas que implemente na mesma instância de VM. Estas caraterísticas tornam as apps contentorizadas mais portáteis, fáceis de implementar e fáceis de manter em grande escala.
Este documento descreve algumas das tecnologias de contentores mais comuns que pode usar para executar contentores em instâncias do Compute Engine. Pode usar estas tecnologias na maioria das imagens de VMs públicas fornecidas pelo Compute Engine.
Execute contentores no Compute Engine quando precisar de controlo total sobre o ambiente de contentores e as ferramentas de orquestração de contentores.
Em alternativa, pode usar o Google Kubernetes Engine (GKE) para simplificar as tarefas de gestão de clusters e orquestração de contentores, para que não tenha de gerir as instâncias de VMs subjacentes. O GKE oferece um ambiente gerido para implementar, gerir e dimensionar as suas aplicações contentorizadas através da infraestrutura Google.
O ambiente do GKE consiste em várias máquinas (mais especificamente, instâncias do Compute Engine) agrupadas para formar um cluster. Quando executa um cluster do GKE, beneficia das funcionalidades de gestão de clusters avançadas, como o balanceamento de carga, os conjuntos de nós, a autorreparação de nós, a escala automática e as atualizações, bem como o registo e a monitorização, que o GKE Google Cloud oferece.
Saiba como criar um cluster do GKE com pools de nós que executam o Microsoft Windows Server.
Experimente
Se está a usar o Google Cloud pela primeira vez, crie uma conta para avaliar o desempenho do Compute Engine em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.
Experimente o Compute Engine gratuitamenteTecnologias de contentores executadas no Compute Engine
Em geral, as instâncias do Compute Engine podem executar quase qualquer tecnologia ou ferramenta de contentores. Pode executar vários tipos diferentes de contentores em sistemas operativos Linux modernos. Também pode executar o Docker no Windows Server 2016 ou posterior. A seguinte lista inclui várias ferramentas comuns que pode usar para executar e gerir apps contentorizadas:
- O Docker e o Podman são duas tecnologias de contentores populares que lhe permitem executar apps contentorizadas.
- O Kubernetes é uma plataforma de orquestração de contentores que pode usar para gerir e dimensionar os contentores em execução em várias instâncias ou num ambiente de nuvem híbrida.
- Os contentores no Compute Engine oferecem uma forma fácil de implementar contentores em instâncias de VM do Compute Engine ou grupos de instâncias geridas.
- Pode converter os seus sistemas existentes em imagens LXD e executá-los em instâncias de VM do Compute Engine para uma solução de migração de lift-and-shift. O LXD é executado em imagens do Ubuntu.
Além disso, pode usar o Artifact Registry para gerir versões de imagens de contentores. O Artifact Registry funciona como uma localização central para armazenar e gerir as suas imagens de contentores antes de as implementar no Kubernetes no Compute Engine ou em clusters do Google Kubernetes Engine.
Imagens de VM otimizadas para contentores
O Compute Engine oferece várias imagens de VMs públicas que pode usar para criar instâncias e executar as suas cargas de trabalho de contentores. Algumas destas imagens de VMs públicas têm um sistema operativo otimizado para contentores minimalista que inclui versões mais recentes do Docker, Podman ou Kubernetes pré-instaladas. As seguintes famílias de imagens públicas foram concebidas especificamente para executar contentores:
- SO otimizado para contentores da Google
- Inclui: Docker, Kubernetes
- Projeto de imagem:
cos-cloud
- Família de imagens:
cos-stable
- Fedora CoreOS
- Inclui: Podman, Docker
- Projeto de imagem:
fedora-coreos-cloud
- Família de imagens:
fedora-coreos-stable
- Ubuntu
- Inclui: LXD
- Projeto de imagem:
ubuntu-os-cloud
- Família de imagens:
ubuntu-2004-lts
Se precisar de executar ferramentas e tecnologias de contentores específicas em imagens que não as incluam por predefinição, instale essas tecnologias manualmente.
Instalar tecnologias de contentores nas suas instâncias
Para iniciar um único contentor numa instância, pode especificar uma imagem de contentor quando criar uma instância. O Compute Engine fornece automaticamente uma imagem do SO otimizado para contentores atualizada com o Docker instalado e inicia o seu contentor quando a VM é iniciada. Para mais informações, consulte o artigo Implementar contentores em VMs .
Em alternativa, pode executar as suas cargas de trabalho de contentores no Compute Engine usando as tecnologias de contentores e as ferramentas de orquestração de que precisa. Pode criar uma instância a partir de uma imagem de VM pública e, em seguida, instalar as tecnologias de contentores que quiser. Por exemplo:
- Instale o Docker em instâncias do Compute Engine para poder executar as suas imagens de contentores do Docker nessas instâncias.
- Instale o Podman em instâncias do Compute Engine como alternativa ao tempo de execução do contentor Docker.
- Instale o Kubernetes nas suas instâncias para fornecer orquestração de contentores para contentores Docker e Open Container Initiative (OCI).
Em algumas situações, pode precisar de versões específicas destas tecnologias para garantir que funcionam corretamente em conjunto. Por exemplo, o Kubernetes funciona normalmente melhor com versões específicas do Docker. Normalmente, pode instalar as versões mais recentes destas tecnologias para obter o melhor resultado.
Instalar o Docker em imagens do Windows Server
O Windows Server 2016 e versões posteriores incluem suporte de contentores. Se planear executar contentores Docker numa instância do Windows Server, pode instalar o Docker numa imagem base do Windows Server ou usar imagens do mercado da Mirantis.
Se quiser instalar o Docker CE na imagem base do Windows Server, siga os passos descritos abaixo.
Comece por criar uma instância do Windows Server com uma imagem pública do Windows Server 2019 ou posterior. Para ter o melhor suporte de contentores, recomendamos que use a versão LTSC mais recente do Windows Server. Para mais informações sobre o LTSC, consulte o artigo Canais de manutenção do Windows Server.
Instale o Docker
Instale o Docker no Windows. Para mais informações, consulte o artigo Prepare o Windows para contentores. Reinicie a instância após a conclusão da instalação.
Passos de configuração adicionais
Nesta altura, pode usar o Docker para executar contentores na instância. Por exemplo, o comando seguinte transfere a imagem do contentor do Windows e executa uma linha de comandos num contentor do nanoserver
:nanoserver
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
O MTU de rede predefinido do Docker é de 1500 bytes. Se também tiver configurado o MTU da sua rede VPC para 1500 bytes, pode ignorar o resto desta secção. No entanto, se estiver a usar o MTU da VPC predefinido de 1460 bytes na sua rede, tem de fazer alguma configuração adicional em cada instância.
Defina a MTU para todas as interfaces de rede (Ethernet e vEthernet) para 1460
executando os seguintes comandos num terminal do PowerShell em cada instância:
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)
Mesmo depois de alterar a MTU da instância, a conetividade dos contentores à Internet pode ser instável porque, por predefinição, a interface de rede do contentor também usa uma MTU de 1500
. Para ver os comandos que definem a MTU corretamente para todos os contentores, consulte a secção MTU do contentor.
Pode ter de executar periodicamente estes comandos de MTU à medida que configura a rede do Docker. Para ver todos os detalhes, consulte a secção de problemas conhecidos.
Executar contentores Windows
Existem muitos recursos disponíveis para começar a usar contentores Windows:
- A Microsoft oferece uma extensa documentação sobre contentores do Windows.
O Docker Hub pode ser usado como um repositório para armazenar e extrair contentores do Windows.
Problemas conhecidos com contentores Windows
Descontinuação das imagens do Windows Server 2019 para contentores
A Google ofereceu uma família de imagens do Windows Server com o Mirantis Container Runtime (anteriormente Docker EE) pré-instalado:
- Windows
- Inclui: Docker
- Projeto de imagem:
windows-cloud
- Família de imagens:
windows-2019-core-for-containers
No início de 2023, a Microsoft deixou de distribuir e suportar o Mirantis Container Runtime para o Windows Server. Embora a Google tenha conseguido continuar a publicar esta família de imagens até 30 de outubro de 2023, a família de imagens está agora descontinuada e todas as imagens na família foram marcadas como obsoletas.
As máquinas virtuais baseadas nestas imagens criadas antes de 30 de outubro de 2023 vão continuar a ser executadas sem interrupções. No entanto, a criação de instâncias para novas instâncias baseadas nestas imagens vai falhar após essa data.
As imagens personalizadas derivadas destas imagens antes de 30 de outubro de 2023 vão continuar a funcionar. No entanto, as imagens personalizadas não recebem automaticamente atualizações do Windows da Patch Tuesday, nem versões atualizadas do Mirantis Container Runtime.
Se quiser continuar a usar imagens com o Mirantis Container Runtime pré-instalado, a Mirantis Inc oferece imagens no Google Cloud Marketplace. O custo destas imagens de VMs inclui apoio técnico e licenciamento para o Mirantis Container Runtime diretamente da Mirantis. Os clientes interessados em usar o Mirantis Container Runtime autónomo também podem transferi-lo diretamente do Website da Mirantis.
Se quiser migrar para um tempo de execução de contentores alternativo, como o Docker CE, siga as instruções acima.
Os contentores são incompatíveis entre versões do Windows
Os contentores criados em versões anteriores do Windows não funcionam em instâncias do Compute Engine que executam versões mais recentes do Windows. Por predefinição, o Docker extrai a versão do Windows Server 2019 de um contentor. Isto significa que a execução do seguinte comando numa instância com o Windows Server versão 1709 ou mais recente resulta num erro:
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)
A página de compatibilidade da versão do contentor do Windows da Microsoft contém mais informações. Para contornar as incompatibilidades da versão do contentor do Windows, especifique a etiqueta correspondente à sua versão do Windows quando extrair e executar contentores. Por exemplo, numa instância do Windows Server, versão 20H2, use o seguinte comando para executar uma linha de comandos no contentor nanoserver
da versão 20H2 em vez do contentor 2019 LTSC (1809) predefinido:
PS C:\> docker run -it mcr.microsoft.com/windows/nanoserver:1809 cmd.exe
As incompatibilidades de MTU afetam a conetividade da instância e do contentor
Quando cria uma rede de contentores numa instância do Windows através dos comandos docker
network create
ou New-VMSwitch
, a MTU da interface de rede da instância é normalmente forçada a 1500
. Normalmente, a interface de rede predefinida num novo contentor Docker também usa uma MTU de 1500
.
Se a sua rede de VPC tiver uma MTU de 1460
, pode ter os seguintes problemas:
A sessão RDP pode parar e pode não conseguir voltar a ligar. Isto acontece quando cria uma rede de contentores transparentes.
A resolução de DNS no contentor pode falhar.
A resolução de DNS é bem-sucedida, mas o estabelecimento de uma ligação HTTP do contentor à Internet pode falhar.
A solução alternativa recomendada para estas limitações requer dois passos:
definir a MTU para as interfaces de rede da instância como 1460
e definir a MTU para as interfaces de rede do contentor
como 1460
. Em alternativa, pode definir a MTU para a VPC como 1500
, mas isto requer que pare ou migre todas as suas VMs.
1. Definir a MTU para as interfaces de rede da instância do Windows
Execute o seguinte comando num terminal do PowerShell na instância do Windows para definir a MTU para todas as interfaces de rede (Ethernet e vEthernet):
PS C:\> Get-NetAdapter | Where-Object Name -like "*Ethernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
Verifique se os MTUs da interface Ethernet e vEthernet da instância estão definidos como
1460
através deste 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 não conseguir executar estes comandos porque já não consegue estabelecer ligação a uma instância através do RDP, pode estabelecer ligação à instância através da consola
série, iniciar um comando cmd
e executar os comandos netsh
aí para reparar a MTU. Para evitar ter de
fazer isto, recomendamos que execute quaisquer comandos docker network ...
ou New-VMSwitch
como parte de um script que também execute o comando de reparação da MTU.
2. Definir a MTU para as interfaces de rede do contentor do Windows
A MTU de um contentor do Windows tem de ser definida enquanto o contentor está em execução, a partir do interior do contentor ou da instância que aloja o contentor. Se o PowerShell estiver disponível no seu contentor, pode executar este comando de forma interativa ou a partir de um script no contentor para definir corretamente a MTU:
PS C:\> Get-NetAdapter | Where-Object Name -like "vEthernet*" | ForEach-Object {
& netsh interface ipv4 set subinterface $_.InterfaceIndex mtu=1460 store=persistent
}
Em alternativa, pode executar este comando na instância do Windows para definir a MTU para todos os contentores em execução:
PS C:\> Get-NetIPInterface -IncludeAllCompartments |
Where-Object InterfaceAlias -like "vEthernet*" |
Set-NetIPInterface -IncludeAllCompartments -NlMtuBytes 1460
Falha ao iniciar contentores do Hyper-V
De momento, os contentores Hyper-V não são suportados no Compute Engine.
O que se segue?
- Crie e inicie uma instância que pode usar para executar aplicações de contentores.
- Saiba mais sobre as instâncias do Compute Engine.
- Saiba mais sobre o Google Kubernetes Engine, que pode usar para executar os seus contentores no Google Cloud sem gerir as instâncias do Compute Engine.
- Saiba mais acerca do Kubernetes.
- Saiba como usar o Artifact Registry para armazenar as suas imagens de contentores de forma privada no Google Cloud.