Contêineres no Compute Engine

Contêineres de software são uma forma conveniente de executar os aplicativos em várias instâncias de espaço de usuário isoladas. Execute contêineres em imagens públicas de VM do Linux ou Windows Server 2016 ou em uma imagem do Container-Optimized OS. Contêineres permitem que os aplicativos sejam executados com menos dependências na máquina virtual host e de forma independente de outros aplicativos em contêineres implementados na mesma instância da máquina virtual. Essas características tornam aplicativos em contêineres mais portáveis, mais fáceis de implementar e de manter em escala.

Este documento descreve algumas das tecnologias de contêineres mais comuns que você pode usar para executar contêineres em instâncias do Compute Engine. É possível usar essas tecnologias na maioria das imagens públicas de VM que o Google Compute Engine fornece.

Execute contêineres no Compute Engine quando for preciso controle completo sobre o ambiente de contêineres e as ferramentas de orquestração de contêineres. Como alternativa, use o Google Kubernetes Engine para simplificar o gerenciamento de cluster e tarefas de orquestração do contêiner. Assim, não será preciso gerenciar as instâncias da máquina virtual subjacente.

Tecnologias de contêiner que são executadas no Compute Engine

Em geral, as instâncias do Compute Engine podem executar qualquer tecnologia ou ferramenta de contêiner. Você pode executar vários tipos de contêineres em sistemas operacionais Linux modernos, além de poder executar o Docker no Windows Server 2016. A lista a seguir inclui várias ferramentas comuns que você pode usar para executar e gerenciar aplicativos em contêineres:

  • Docker e rkt são duas tecnologias muito conhecidas de contêineres que facilitam a execução de aplicativos em contêineres.
  • Kubernetes é uma plataforma de orquestração de contêineres que pode ser usada para gerenciar e escalonar os contêineres em execução em várias instâncias ou em um ambiente de nuvem híbrida.
  • Os contêineres no Compute Engine são uma maneira fácil de implantar contêineres em instâncias de VMs do Compute Engine ou em grupos de instâncias gerenciadas.
  • É possível converter os sistemas existentes em imagens do LXD e executá-las dentro das instâncias da máquina virtual do Compute Engine para conseguir uma solução simples de migração lift-and-shift. O LXD é executado em imagens do Ubuntu.

Além disso, você pode usar o Container Registry para gerenciar versões de imagens de contêiner. O Container Registry serve como local central de armazenamento e gerenciamento de suas imagens de contêiner antes de implantá-las no Kubernetes do Compute Engine ou nos clusters do Google Kubernetes Engine.

Imagens de VM otimizadas para contêineres

O Compute Engine fornece várias imagens de VM públicas que podem ser usadas para criar instâncias e executar as cargas de trabalho de contêineres. Algumas dessas imagens de VM públicas têm um sistema operacional minimalista otimizado para contêineres que inclui versões mais novas pré-instaladas do Docker, do rkt ou do Kubernetes. As seguintes famílias de imagens públicas são projetadas especificamente para executar contêineres:

  • SO do Google otimizado para contêineres
    • Inclui: Docker, Kubernetes
    • Projeto da imagem: cos-cloud
    • Família de imagens: cos-stable
  • CoreOS
    • Inclui: Docker, rkt, Kubernetes
    • Projeto da imagem: coreos-cloud
    • Família de imagens: coreos-stable
  • Ubuntu
    • Inclui: LXD
    • Projeto da imagem: ubuntu-os-cloud
    • Família de imagens: ubuntu-1604-lts
  • Windows
    • Inclui: Docker
    • Projeto da imagem: windows-cloud
    • Família de imagens: windows-1803-core-for-containers

Se for necessário executar ferramentas e tecnologias específicas de contêiner em imagens que não as incluem por padrão, instale-as manualmente.

Como instalar tecnologias de contêiner nas instâncias

Para iniciar um único contêiner em uma instância, especifique uma imagem de contêiner ao criar uma instância. O Compute Engine fornece automaticamente uma imagem atualizada do Container-Optimized OS com o Docker instalado e inicia o contêiner quando a VM é inicializada. Consulte Como implantar contêineres em VMs para ver mais informações.

Como alternativa, execute as cargas de trabalho de contêiner no Compute Engine usando as tecnologias de contêiner e as ferramentas de orquestração necessárias. É possível criar uma instância a partir de uma imagem de VM pública e, em seguida, instalar as tecnologias de contêiner desejadas. Por exemplo:

Em algumas situações, talvez sejam necessárias versões específicas dessas tecnologias para garantir que funcionem corretamente em conjunto. Por exemplo, o Kubernetes normalmente é executado de forma melhor com versões específicas do Docker. Normalmente, você pode instalar as versões mais recentes destas tecnologias para obter o melhor resultado.

Como instalar o Docker em imagens do Windows Server 2016

O Windows Server 2016 e as versões posteriores são compatíveis com os contêineres. Se você quiser executar contêineres do Docker em uma instância do Windows Server, o Google recomendará começar com a imagem pública do Windows Server for Containers. Essa imagem tem os componentes a seguir instalados:

Se você quiser instalar o Docker na imagem base do Windows Server e executar aplicativos em contêiner, em vez de usar a imagem do Windows Server for Containers, siga as etapas descritas abaixo.

Comece criando uma instância do Windows Server usando o Windows Server 2016 ou uma imagem pública posterior. Para receber o melhor suporte de contêiner, o Google recomenda usar a versão semestral do Windows Server, como Windows Server, versão 1803.

Instalar o Docker

  1. Conecte-se à instância do Windows.

  2. Abra um terminal do PowerShell como administrador.

  3. Instale o Docker dos repositórios da Microsoft:

    PS C:\> Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
    
    PS C:\> Install-Package -Name docker -ProviderName DockerMsftProvider
    
  4. Execute os seguintes comandos para contornar problemas conhecidos com os contêineres do Windows no Google Compute Engine:

    • Desativar união de segmentos de recebimento:

      PS C:\> netsh netkvm setparam 0 *RscIPv4 0
      
    • Ativar IPv6:

      PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
      /v DisabledComponents /t REG_DWORD /d 0x0 /f
      
  5. Reinicie a instância:

    PS C:\> Restart-Computer -Force
    

Etapas de configuração adicionais

Neste ponto, você pode usar o Docker para executar contêineres na instância. Por exemplo, o comando a seguir faz o download da imagem do contêiner nanoserver do Windows e executa um prompt de comando dentro de um contêiner nanoserver:

PS C:\> docker run -it microsoft/nanoserver:1803 cmd.exe

No entanto, há um problema conhecido com a MTU de rede padrão do Docker que afeta a conectividade com a instância e a conectividade dos contêineres com a Internet. Para contornar esse problema, execute os seguintes comandos em um terminal do PowerShell na instância para ver os nomes de interface e defina a MTU vEthernet como 1460:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295                1          0       5720  Loopback Pseudo-Interface 1
  1500                1      76091     292077  vEthernet (nat)
PS C:\> netsh interface ipv4 set subinterface `
"vEthernet (nat)" mtu=1460 store=persistent

Mesmo depois de reparar a MTU da instância, a conectividade dos contêineres com a Internet poderá ficar instável, porque a interface de rede do contêiner também usará uma MTU de 1500 por padrão. Para estabelecer conectividade total, repita estes comandos de MTU (o nome da interface será diferente) no próprio contêiner. Não se esqueça de corrigir a MTU dessa maneira ao gerar e executar novas imagens de contêiner.

Talvez seja necessário executar novamente esses comandos de MTU de maneira periódica à medida que você configurar a rede do Docker. Leia a seção de problemas conhecidos para ver os detalhes completos.

Como executar contêineres do Windows

Há muitos recursos disponíveis para dar os primeiros passos nos contêineres do Windows:

Problemas conhecidos nos contêineres do Windows

Os contêineres são incompatíveis com versões do Windows

Os contêineres criados em versões mais antigas do Windows não funcionarão nas instâncias do Compute Engine que executam versões mais recentes. Por padrão, o Docker executa o pull da versão do Windows Server 2016 de um contêiner. Isso significa que, ao executar o comando abaixo em uma instância com o Windows Server, a versão 1709 resultará em um erro:

PS C:\> docker run -it microsoft/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 Compatibilidade de versão de contêiner do Windows da Microsoft contém mais informações. Para resolver as incompatibilidades da versão do contêiner do Windows, certifique-se de especificar a tag correspondente à sua versão do Windows durante o pull e execução dos contêineres. Por exemplo, em uma instância do Windows Server versão 1709, use o seguinte comando para executar um prompt de comando no contêiner nanoserver da versão 1709, em vez do contêiner padrão 2016:

PS C:\> docker run -it microsoft/nanoserver:1709 cmd.exe

As incompatibilidades de MTU afetam a conectividade com a instância e o contêiner

Quando você cria uma rede de contêiner em uma instância do Windows usando os comandos docker network create ou New-VMSwitch, a MTU da interface de rede da instância normalmente é forçada para 1500. A interface de rede padrão em um novo contêiner do Docker também costuma usar uma MTU de 1500. O Google Cloud Platform permite uma MTU de apenas 1460, portanto, quando a MTU é forçada para 1500, você pode ter os seguintes problemas:

  • A sessão RDP pode parar e talvez você não consiga se reconectar. Isso costuma acontecer ao criar uma rede de contêiner transparente.

  • A resolução DNS no contêiner pode falhar.

  • A resolução DNS é bem-sucedida, mas o estabelecimento de uma conexão HTTP do contêiner com a Internet pode falhar.

Para recuperar-se dessa situação, execute os seguintes comandos em um terminal do PowerShell na instância ou no contêiner para ver os nomes de interface e redefinir a MTU:

PS C:\> netsh interface ipv4 show subinterfaces
   MTU  MediaSenseState   Bytes In  Bytes Out  Interface
------  ---------------  ---------  ---------  -------------
4294967295                1          0       5720  Loopback Pseudo-Interface 1
  1500                1      76091     292077  vEthernet (HNSTransparent)
PS C:\> netsh interface ipv4 set subinterface `
"vEthernet (HNSTransparent)" mtu=1460 store=persistent

Caso não seja possível executar esses comandos por não conseguir mais se conectar a uma instância por RDP, conecte-se à instância por meio do console serial, inicie um prompt do cmd e execute nele os comandos netsh para reparar a MTU. Para evitar a realização desse procedimento, execute os comandos docker network ... ou New-VMSwitch como parte de um script que também executa os comandos de reparos da MTU.

Falha ao iniciar contêineres do Docker

Pode haver falha ao iniciar um contêiner com docker run com o seguinte erro:

C:\Program Files\Docker\docker.exe: Error response from daemon: container ...
encountered an error during CreateContainer: failure in a Windows system call:
Element not found. (0x490)

Este problema ocorre em instâncias do Windows Server 2016 com o Windows Update KB4015217 instalado. Para contornar o problema, ative o IPv6 na instância usando o seguinte comando do PowerShell:

PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
/v DisabledComponents /t REG_DWORD /d 0x0 /f

Depois de ativar o IPv6, reinicie a instância:

PS C:\> Restart-Computer -Force

Se esse problema for corrigido em futuras atualizações do sistema operacional, você poderá restaurar a configuração original do IPv6:

PS C:\> reg add HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters `
/v DisabledComponents /t REG_DWORD /d 0xff /f

Contêineres do Hyper-V falham ao iniciar

Os contêineres do Hyper-V não são compatíveis no Compute Engine no momento.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine