Como migrar contêineres para o Google Cloud: como migrar o Kubernetes para o GKE

Este documento ajuda você a planejar, projetar e implementar a migração de um ambiente autogerenciado do Kubernetes para o Google Kubernetes Engine (GKE). Se feita incorretamente, a migração de aplicativos de um ambiente para outro pode ser uma tarefa desafiadora. Portanto, você precisa planejar e executar a migração com cuidado.

Este documento faz parte de uma série sobre a migração para o Google Cloud. Se você tiver interesse em uma visão geral da série, consulte Migração para o Google Cloud: como escolher seu caminho de migração.

Este documento faz parte de uma série que discute a migração de contêineres para o Google Cloud:

Este documento é útil se você planeja migrar de um ambiente autogerenciado do Kubernetes para o GKE. É possível que seu ambiente seja executado localmente, em um ambiente de hospedagem particular ou em outro provedor de nuvem. Este documento também é útil se você estiver avaliando a oportunidade de migrar e quiser saber como funciona esse processo.

Ao usar o GKE, você tem os seguintes benefícios:

Este documento pressupõe que você leu e está familiarizado com as seguintes tarefas:

No diagrama a seguir, veja o caminho da sua jornada de migração.

Caminho de migração com quatro fases.

A cada passo da migração, siga as fases definidas em Migração para o Google Cloud: primeiros passos:

  1. Como avaliar e descobrir as cargas de trabalho.
  2. Como planejar e criar uma base.
  3. Como implantar suas cargas de trabalho.
  4. Como otimizar seu ambiente.

Como avaliar seu ambiente

Na fase de avaliação, você determina os requisitos e as dependências para migrar o ambiente autogerenciado do Kubernetes para o GKE:

  1. Crie um inventário abrangente dos seus aplicativos.
  2. Catalogue seus apps de acordo com as propriedades e dependências deles.
  3. Treine e instrua suas equipes no Google Cloud.
  4. Crie um experimento e uma prova de conceito no Google Cloud.
  5. Calcule o custo total de propriedade (TCO) do ambiente de destino.
  6. Escolha as cargas de trabalho que você quer migrar primeiro.

As seções a seguir dependem da Migração para o Google Cloud: como avaliar e descobrir suas cargas de trabalho.

Criar seus inventários

Para definir o escopo da migração, você precisa entender o ambiente atual do Kubernetes. Primeiro, você coleta informações sobre os clusters e, em seguida, concentra-se nas cargas de trabalho implantadas nesses clusters e nas dependências delas. No final da fase de avaliação, você tem dois inventários: um para os clusters e outro para as cargas de trabalho implantadas nesses clusters.

Para criar o inventário dos clusters, considere o seguinte para cada cluster:

  • Número e tipo de nós. Quando você sabe a quantidade de nós e as características de cada nó no ambiente atual, você dimensiona os clusters ao migrar para o GKE. Os nós no novo ambiente são executados em uma geração de arquitetura de hardware diferente daquelas que você usa no ambiente. O desempenho de cada geração de arquitetura é diferente. Portanto, o número de nós necessários no novo ambiente pode ser diferente do ambiente. Avalie qualquer tipo de hardware que você esteja usando nos nós, como dispositivos de armazenamento de alto desempenho, GPUs e TPUs.
  • Cluster interno ou externo. Avalie a quais agentes, internos ou externos, cada cluster está exposto. Para oferecer suporte aos casos de uso, essa avaliação inclui as cargas de trabalho em execução no cluster e as interfaces que interagem com os clusters.
  • Multilocação Se você estiver gerenciando clusters multilocatários no seu ambiente, avalie se ele funciona no novo ambiente do Google Cloud. Agora é um bom momento para avaliar como melhorar seus clusters multilocatários porque sua estratégia multilocatário influencia a forma como você cria sua base no Google Cloud.
  • Versão do Kubernetes Colete informações sobre a versão do Kubernetes dos clusters para avaliar se há incompatibilidade entre essas versões e as disponíveis no GKE. Se você estiver executando uma versão mais antiga ou lançada recentemente, talvez esteja usando recursos indisponíveis no GKE. Talvez os recursos estejam obsoletos ou a versão do Kubernetes que os envia ainda não esteja disponível no GKE.
  • Ciclo de upgrade do Kubernetes. Para manter um ambiente confiável, entenda como você está lidando com upgrades do Kubernetes e como seu ciclo de upgrade está relacionado aos upgrades do GKE.
  • Pools de nós. Se você estiver usando qualquer forma de agrupamento de nós, considere como esses agrupamentos são mapeados para o conceito de pools de nós no GKE porque seus critérios de agrupamento talvez não sejam adequados para o GKE.
  • Inicialização do nó. Avalie como inicializar cada nó antes de marcá-lo como disponível para executar suas cargas de trabalho. Assim, é possível transferir esses procedimentos de inicialização para o GKE.

Os itens a seguir que você avalia no seu inventário concentram-se na segurança da infraestrutura e dos clusters do Kubernetes:

  • Namespaces: Se você usa namespaces do Kubernetes nos clusters para separar recursos logicamente, avalie quais recursos estão em cada namespace e entenda por que você criou essa separação. Por exemplo, é possível usar namespaces como parte da sua estratégia de multilocação. Talvez você tenha cargas de trabalho implantadas em namespaces reservados para componentes do sistema do Kubernetes e talvez não tenha tanto controle no GKE.
  • Controle de acesso baseado em papéis (RBAC) Se você usa a autorização RBAC nos clusters, liste uma descrição de todos os ClusterRoles e ClusterRoleBindings configurados nos clusters.
  • Políticas de rede: Liste todas as políticas de rede configuradas nos clusters e entenda como as políticas de rede funcionam no GKE.
  • Políticas e contextos de segurança do pod. Colete informações sobre o PodSecurityPolicies e Contextos de segurança do pod que você configurou nos clusters e saiba como eles funcionam no GKE.
  • Contas de serviço. Se algum processo no cluster estiver interagindo com o servidor da API Kubernetes, colete informações sobre as contas de serviço que estão sendo usadas.

Depois de concluir o inventário de clusters do Kubernetes e avaliar a segurança do ambiente, crie o inventário das cargas de trabalho implantadas nesses clusters. Ao avaliar suas cargas de trabalho, colete informações sobre os seguintes aspectos:

  • Pods e controladores. Para dimensionar os clusters no novo ambiente, avalie quantas instâncias de cada carga de trabalho você implantou e se está usando ResourceQuotas, e calcule os limites de consumo de recursos. Reúna informações sobre as cargas de trabalho em execução nos nós do plano de controle de cada cluster e os controladores que cada carga de trabalho usa. Por exemplo, quantas implantações você está usando? Quantos DaemonSets você está usando?
  • Jobs e CronJobs. Os clusters e as cargas de trabalho podem precisar executar jobs ou cron jobs como parte dos procedimentos de inicialização ou operação. Avalie quantas instâncias de Jobs e CronJobs você implantou e as responsabilidades e critérios de conclusão de cada instância.
  • Escalonadores automáticos do pod horizontal. Para migrar suas políticas de escalonamento automático no novo ambiente, saiba como o escalonador automático do pod horizontal funciona no GKE.
  • Cargas de trabalho sem estado e com estado. As cargas de trabalho sem estado não armazenam dados ou estado no cluster nem no armazenamento permanente. Os aplicativos com estado salvam dados para uso posterior. Para cada carga de trabalho, avalie quais componentes são sem estado e quais são com estado, tendo em vista que migrar cargas de trabalho com estado normalmente é mais difícil do que migrar sem estado.
  • Recursos do Kubernetes. No inventário do cluster, você sabe qual versão do Kubernetes cada cluster executa. Revise as Notas de lançamento de cada versão do Kubernetes para saber quais recursos são enviados e quais recursos estão obsoletos. Em seguida, avalie suas cargas de trabalho em relação aos recursos do Kubernetes necessários. A meta desta tarefa é saber se você está usando recursos obsoletos ou que ainda não estão disponíveis no GKE. Se você encontrar recursos indisponíveis, migre dos recursos obsoletos e adote os novos quando eles estiverem disponíveis no GKE.
  • Storage. Para cargas de trabalho com estado, avalie se elas usam PersistenceVolumeClaims. Liste todos os requisitos de armazenamento, como tamanho e modo de acesso, e como esses PersistenceVolumeClaims são mapeados para PersistenceVolumes. Para contabilizar o crescimento futuro, avalie se você precisa expandir qualquer PersistenceVolumeClaim.
  • Configuração e injeção de segredo. Para evitar a recriação dos artefatos implantáveis sempre que houver uma alteração na configuração do ambiente, injete a configuração e os segredos nos pods usando ConfigMaps e Secrets. Para cada carga de trabalho, avalie quais ConfigMaps e Secrets a carga de trabalho está usando e como você está preenchendo esses objetos.
  • Dependências Suas cargas de trabalho provavelmente não funcionam isoladamente. Talvez elas tenham dependências internas ao cluster ou dependências de sistemas externos. Colete as dependências para cada carga de trabalho e se as cargas de trabalho tiverem tolerância quando as dependências estiverem indisponíveis. Por exemplo, dependências comuns incluem sistemas de arquivos distribuídos, bancos de dados, plataformas de distribuição secretas, sistemas de gerenciamento de identidade e acesso, mecanismos de descoberta de serviços e outros sistemas externos.
  • Serviços do Kubernetes Para expor suas cargas de trabalho a clientes internos e externos, use Serviços. Para cada serviço, você precisa saber o tipo. Para serviços expostos externamente, avalie como esses serviços interagem com o restante da sua infraestrutura. Por exemplo, como sua infraestrutura é compatível com serviços LoadBalancer e objetos de Entrada? Quais controladores de Entrada você implantou nos clusters?
  • Service mesh. Se você estiver usando uma malha de serviço no ambiente, avalie como ela é configurada. Você também precisa saber quantos clusters ela abrange, quais serviços fazem parte da malha e como modificar a topologia da malha. Por exemplo, você está usando o mecanismo de injeção automática para adicionar serviços à malha automaticamente?
  • Taints e tolerâncias e afinidade e antiafinidade. Para cada pod e nó, avalie se você configurou taints, tolerâncias ou afinidades de nós para personalizar a programação de pods nos clusters do Kubernetes. Essas propriedades também fornecem insights sobre possíveis configurações não homogêneas de nós ou pods e podem fazer com que os pods, os nós ou ambos precisem ser avaliados com foco e cuidado especiais. Por exemplo, se você configurou um conjunto específico de pods para ser programado apenas em determinados nós no cluster do Kubernetes, isso pode significar que os pods precisam de recursos especializados disponíveis apenas nesses nós.

Depois de avaliar os clusters e as cargas de trabalho, avalie o restante dos serviços e aspectos de suporte na infraestrutura, como os seguintes:

Concluir a avaliação

Depois de criar os inventários relacionados aos clusters e às cargas de trabalho do Kubernetes, conclua as outras atividades da fase de avaliação em Migração para o Google Cloud: como avaliar e descobrir suas cargas de trabalho.

Como planejar e criar sua base

Na fase de planejamento e criação, você provisiona e configura a infraestrutura e os serviços de nuvem compatíveis com suas cargas de trabalho no Google Cloud:

  1. Crie uma hierarquia de recursos.
  2. Configure o gerenciamento de identidade e acesso.
  3. Configure o faturamento.
  4. Configure a conectividade de rede.
  5. Aumente sua segurança.
  6. Configure o monitoramento e os alertas.

Se você já adotou a infraestrutura como código para gerenciar as cargas de trabalho no ambiente do Kubernetes, aplique o mesmo processo ao ambiente do Google Cloud. Você analisa os descritores do Kubernetes porque alguns recursos do Google Cloud que o GKE provisiona automaticamente são configuráveis usando rótulos e anotações do Kubernetes. Por exemplo, é possível provisionar um balanceador de carga interno em vez de um externo adicionando uma anotação a um serviço LoadBalancer.

As seções a seguir baseiam-se em Migração para o Google Cloud: como criar sua base.

Criar uma hierarquia de recursos

Para projetar uma hierarquia de recursos eficiente, pense em como suas estruturas empresariais e organizacionais são mapeadas para o Google Cloud, conforme detalhado em Migração para o Google Cloud: como criar sua base e Como preparar um ambiente do GKE para produção.

Por exemplo, caso precise de um ambiente multilocatário no GKE, é possível escolher entre as seguintes opções:

  • Criação de um projeto do Google Cloud para cada locatário.
  • Compartilhamento de um projeto entre locatários diferentes e provisionamento de vários clusters do GKE.
  • Uso de namespaces do Kubernetes.

Sua escolha depende das suas necessidades de isolamento, complexidade e escalabilidade. Por exemplo, um projeto por locatário faz com que os locatários sejam isolados, mas o gerenciamento da hierarquia de recursos se torna mais complexo devido ao grande número de projetos. No entanto, embora o gerenciamento de namespaces do Kubernetes seja relativamente mais fácil do que uma hierarquia de recursos complexa, essa opção não garante tanto isolamento. Por exemplo, o plano de controle pode ser compartilhado entre os locatários.

Configure o gerenciamento de identidade e acesso

O gerenciamento de identidade e acesso fornece as ferramentas para configurar centralmente o controle de acesso detalhado aos recursos da nuvem. Para mais informações, consulte Gerenciamento de identidade e acesso e Como preparar um ambiente do Google GKE para produção.

Analise como o RBAC do Kubernetes interage com o gerenciamento de identidade e acesso no Google Cloud e configure o RBAC de acordo com os requisitos coletados na fase de avaliação.

Configurar o faturamento

Antes de provisionar recursos do Google Cloud, configure o Faturamento do Cloud e entenda o modelo de preços do GKE. Veja mais informações em Faturamento.

Configurar a conectividade de rede

A configuração de rede é um aspecto fundamental do seu ambiente. Avalie o modelo de rede do GKE e os requisitos de conectividade das suas cargas de trabalho. Em seguida, é possível começar a planejar sua configuração de rede. Para mais informações, consulte conectividade e rede.

Aumentar sua segurança

Entender as diferenças entre o modelo de segurança do ambiente e o modelo do Google Cloud e como aumentar a segurança dos clusters do GKE é essencial para proteger os recursos críticos. Para mais informações, consulte Segurança.

Configurar o monitoramento e os alertas

Ter uma visão clara do desempenho da infraestrutura e das cargas de trabalho é fundamental para encontrar áreas de melhoria. O GKE tem integrações avançadas com o pacote de operações do Google Cloud. Assim, você recebe informações de registro e monitoramento sobre clusters e cargas de trabalho do GKE dentro desses clusters. Para mais informações, consulte monitoramento e alertas.

Como implantar suas cargas de trabalho

Na fase de implantação, faça o seguinte:

  1. Provisione e configure a plataforma e os ambientes de execução.
  2. Migre dados do ambiente antigo para o novo.
  3. Implante suas cargas de trabalho.

As seções a seguir baseiam-se em Migração para o Google Cloud: como transferir grandes conjuntos de dados, Migração para o Google Cloud: como implantar suas cargas de trabalho e Migração para o Google Cloud: como migrar de implantações manuais para implantações automatizadas em contêineres.

Provisionar e configurar a plataforma e os ambientes de execução

Antes de migrar qualquer carga de trabalho para o novo ambiente do Google Cloud, você precisa provisionar os clusters do GKE.

Após a fase de avaliação, você tem conhecimento suficiente para provisionar os clusters do GKE no novo ambiente do Google Cloud para atender às suas necessidades. É possível provisionar o seguinte:

Depois de criar os clusters do GKE e antes de implantar qualquer carga de trabalho, provisione e configure namespaces, RBAC, políticas de rede, ResourceQuotas e PodSecurityPolicies para cada cluster do GKE.

Migrar dados do ambiente antigo para o novo

Agora é possível transferir dados necessários para suas cargas de trabalho com estado.

Migração para o Google Cloud: como transferir grandes conjuntos de dados contém orientações sobre este tópico. Se você planeja modernizar as cargas de trabalho para aplicar uma arquitetura de microsserviços, ou se já a adotou, ou se precisar de orientações sobre janelas de transferência e estratégias de manutenção programadas, consulte Como migrar um aplicativo monolítico para microsserviços no GKE Para mais informações sobre as opções de armazenamento de dados disponíveis no GKE, consulte configuração de armazenamento. Por exemplo, é possível usar discos permanentes do Compute Engine, zonais ou replicados em uma região, ou usar o Filestore.

Você provisiona toda a infraestrutura de armazenamento necessária antes de mover seus dados. Se você estiver usando provisionadores do StorageClass, configure-os nos novos clusters.

Implantar cargas de trabalho

Para implantar suas cargas de trabalho, crie e implemente um processo de implantação de acordo com seus requisitos. Se você não estiver satisfeito com seus processos de implantação e quiser migrar para um processo mais moderno e automatizado, consulte Migração para o Google Cloud: como migrar de implantações manuais para implantações automatizadas em contêineres. Ele guia contém orientações para migrar de implantações manuais para ferramentas de automação e orquestração de contêineres. A fase de implantação também é uma chance de modernizar suas cargas de trabalho. Por exemplo, se você estiver usando pods no ambiente, considere migrar essas cargas de trabalho para Implantações.

Quando o processo de implantação estiver pronto, implante suas cargas de trabalho no GKE.

Como otimizar seu ambiente

A otimização é a última fase da migração. Nesta fase, você torna seu ambiente mais eficiente do que antes. Nesta fase, você executa várias iterações de um loop repetível até que o ambiente atenda aos requisitos de otimização. As etapas desse loop repetível são as seguintes:

  1. Avaliação do ambiente, das equipes e do ciclo de otimização atuais.
  2. Estabelecimento dos seus requisitos e metas de otimização.
  3. Otimização do seu ambiente e das suas equipes.
  4. Ajuste do loop de otimização.

As seções a seguir baseiam-se na Migração para o Google Cloud: como otimizar seu ambiente.

Avaliar o ambiente, as equipes e o loop de otimização atuais

Embora a primeira avaliação se concentre na migração do seu ambiente para o GKE, essa avaliação é personalizada para a fase de otimização.

Estabelecer seus requisitos de otimização

Revise os seguintes requisitos de otimização para seu ambiente do GKE:

  • Implemente processos avançados de implantação. Processos como implantações canário ou implantações azul-verde oferecem mais flexibilidade e aumentam a confiabilidade do ambiente, estendendo os testes e reduzindo o impacto de qualquer problema para os usuários.
  • Configure uma malha de serviço Ao apresentar uma malha de serviço ao seu ambiente, você usa alguns recursos para seus serviços, como observabilidade, gerenciamento de tráfego e autenticação recíproca, e reduz o esforço das equipes de DevOps. É possível implantar uma malha de serviço de vários clusters para segmentar melhor suas cargas de trabalho ou uma malha de serviço expandida para oferecer suporte à migração para o novo ambiente.
  • Configure o escalonamento automático. Você tem diferentes opções complementares para escalonar automaticamente seu ambiente do GKE. É possível escalonar automaticamente os clusters e as cargas de trabalho dentro de cada cluster. Ao configurar o escalonador automático de cluster, é possível redimensionar automaticamente um cluster do GKE com base nas demandas das cargas de trabalho, adicionando ou removendo nós de trabalho no cluster. Se você quiser escalonar automaticamente suas cargas de trabalho, ajuste as solicitações e os limites de consumo da CPU e da memória com o escalonador automático do pod vertical. Ao usar o escalonador automático, não é necessário pensar nos valores a serem especificados para as solicitações de CPU e memória de cada contêiner.
  • Reduza os custos com máquinas virtuais preemptivas (VMs). Se algumas das suas cargas de trabalho forem tolerantes a ambientes de execução sem garantias de disponibilidade, implante essas cargas de trabalho em um pool de nós composto de VMs preemptivas. As VMs preemptivas têm um preço menor do que as VMs padrão do Compute Engine. Assim, é possível reduzir os custos dos clusters.
  • Integre o GKE a outros produtos. Alguns produtos do Google Cloud são integrados ao GKE para aumentar a segurança do seu ambiente. Por exemplo, é possível analisar contêineres em busca de vulnerabilidades ou usar imagens de base gerenciadas no Container Registry.
  • Projete os clusters do GKE para serem fungíveis. Considerando os clusters como faturáveis e automatizando o provisionamento e a configuração, é possível simplificar e generalizar os processos operacionais para mantê-los e também simplificar futuras migrações e upgrades de cluster do GKE. Por exemplo, se você precisar fazer upgrade de um cluster do GKE para uma nova versão do GKE, será possível provisionar e configurar automaticamente um novo cluster atualizado, implantar cargas de trabalho automaticamente no novo cluster e desativar o cluster antigo e desatualizado do GKE.

Embora seja possível atender a alguns desses requisitos de otimização em um ambiente do Kubernetes, é mais fácil no GKE porque não é necessário perder tempo mantendo o cluster em execução. Em vez disso, é possível se concentrar na própria otimização.

Concluir a otimização

Depois de preencher a lista de requisitos de otimização, conclua o restante das atividades da fase de otimização.

A seguir