Executar um aplicativo do Kubernetes no Cloud Code para o Cloud Shell

O Cloud Code permite que você execute facilmente seu aplicativo em um cluster do Kubernetes e visualize-o ao vivo, aproveitando skaffold dev. É possível executar o aplicativo em um cluster local (como Minikube ou Docker Desktop), Google Kubernetes Engine ou qualquer outro provedor de nuvem.

Como executar o aplicativo

  1. Abra a paleta de comandos (pressione Ctrl/Cmd+Shift+P) e execute o comando Cloud Code: Run on Kubernetes.
  2. Confirme se você quer usar o contexto do Kubernetes atual para executar o aplicativo (ou alternar para um preferido). Para mais informações sobre como configurar um contexto do Kubernetes, consulte Como configurar.
  3. Se você escolheu um cluster remoto como contexto, quando solicitado, escolha um registro de imagem para enviar as imagens. Se você estiver usando o Container Registry, poderá navegar até um registro atual ou especificar o nome de um registro a ser criado. Se o projeto tiver a API Artifact Registry ativada e pelo menos um repositório do Artifact Registry, é possível navegar e selecionar um repositório existente do Artifact Registry. de dados.

    Os exemplos a seguir demonstram como especificar onde as imagens de contêiner são armazenadas para alguns registros comuns:

    Artifact Registry {region}-docker.pkg.dev/{project_id}/{repo-name}
    Container Registry gcr.io/{project_id}
    Docker Hub docker.io/{account}
    Verifique se você tem a autenticação correta se estiver usando um repositório particular do Docker Hub.

    O Cloud Code concatena esse registro de imagem com o nome da imagem especificado nos manifestos do Kubernetes para gerar o nome final do repositório de imagens.

    Para mais informações, consulte o guia de processamento de registros de imagem.

    Essa escolha é armazenada em sua configuração de inicialização cloudcode.kubernetes (encontrada em .vscode/launch.json)

    O Cloud Code, em seguida, cria os contêineres, os envia para o registro, aplica as configurações do Kubernetes ao cluster e aguarda o lançamento.

    Após a conclusão do lançamento, o Cloud Code encaminha automaticamente todas as portas de contêiner declaradas para sua máquina e exibe os URLs na janela de saída para que você possa navegar pelo aplicativo ativo.

  4. Depois que a sessão for concluída, use os seguintes comandos do menu de contexto:

    • Abrir os registros de implantação: abra os registros de aplicativo de uma implantação específica com o Explorador de registros do Cloud Code
    • Open Service URL: abra o URL do serviço do aplicativo de um serviço específico em um navegador da Web.
  5. Se você tiver desativado o modo de exibição na configuração de inicialização e quiser fazer alterações no aplicativo, reconstruí-lo e reimplantá-lo, no painel "Sessões de desenvolvimento", pause a ação de execução e clique em Ícone "Recriar e reimplantar" Reconstruir e reimplantar o aplicativo.

  6. Para interromper a execução do aplicativo, clique em Ícone de parada de depuração Stop na barra de ferramentas de depuração.

    Depois que você interrompe o aplicativo, todos os recursos implantados do Kubernetes são excluídos do cluster. É possível alterar esse comportamento usando a sinalização cleanUp na sua configuração de inicialização.

Como ativar a sincronização de arquivos do Skaffold e a recarga dinâmica

Para melhorar a eficiência do fluxo de trabalho de desenvolvimento local e evitar a necessidade de recriar, reimplantar e reiniciar os pods, o Skaffold aceita copiar arquivos alterados para um contêiner implantado. Isso significa que, ao fazer mudanças em arquivos estáticos e de código-fonte, você verá as alterações entrarem em vigor em segundos, criando um ciclo de feedback acelerado.

Em arquivos estáticos, como HTML e CSS, o comportamento de cópia desse arquivo é chamado de sincronização de arquivos.

Para arquivos de código-fonte, esse comportamento é chamado de recarga dinâmica e é compatível com os seguintes tipos de arquivo:

  • Go: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj.
  • Node.js: *.js, *.mjs, *.coffee, *.litcoffee, *.json

Com a recarga dinâmica configurada, o Skaffold detecta alterações nos arquivos compatíveis e sincroniza essas alterações no contêiner em execução no cluster. As alterações nos tipos de arquivo que não são compatíveis com a recarga dinâmica acionam uma recriação de imagens e uma reinicialização do pod.

A sincronização automática de arquivos e a recarga dinâmica são ativadas por padrão quando você está trabalhando com o Buildpacks como o builder preferido. Para outros builders como o Docker, você pode especificar uma seção sync no arquivo skaffold.yaml para o artefato que está sendo personalizado.

A configuração de sincronização pode ser uma das seguintes (em ordem de preferência):

  • auto (apenas para artefatos Jib e Buildpacks. Esse será o padrão se não for especificado para Buildpacks.
  • infer
  • manual

O exemplo de seção sync a seguir em um arquivo skaffold.yaml especifica uma sincronização manual para sincronizar todos os arquivos HTML /static-html com a pasta static em um contêiner:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

Para uma análise detalhada sobre a sincronização de arquivos e a especificação de regras de sincronização, consulte o guia do Skyffold sobre sincronização de arquivos.

Como escolher um builder e um ambiente de compilação

Em um projeto que não contém um arquivo skaffold.yaml na raiz ou não faz referência a skaffold.yaml no arquivo .vscode/launch.json, é possível usar a IU do Cloud Code para escolher um builder e um ambiente de build. A criação local é gratuita, já que ela usa seus próprios recursos. Criar com o Cloud Build é bom para máquinas mais lentas ou que não correspondem à arquitetura do processador do cluster de destino. Para informações sobre o custo da criação do aplicativo usando o Cloud Build, consulte Preços do Cloud Build.

Se você estiver usando uma das amostras, para usar a IU, exclua o arquivo skaffold.yaml antes de executar uma ação de criação. Para ver os passos para escolher um builder e um ambiente de build sem a IU, consulte Como criar manualmente uma configuração do Skaffold.

  1. Em um projeto sem um arquivo skaffold.yaml, abra a paleta de comandos (pressione Ctrl/Cmd+Shift+P ou clique em Ver > Paleta de comandos) e execute Cloud Code: Run on Kubernetes ou Cloud Code: Debug no Kubernetes.

  2. Escolha um ambiente de criação.

    Se você escolher o Cloud Build, especifique o registro de imagens.

  3. Especifique um builder (Docker ou Buildpack) para cada imagem e as respectivas configurações.

  4. Marque ou desmarque qualquer uma das opções de configuração e clique em Depurar ou Executar.

As opções escolhidas são salvas em um arquivo skaffold.yaml que pode ser editado diretamente para maior personalização.

Como personalizar a configuração de inicialização

Para configurar como seu aplicativo é executado, personalize o arquivo skaffold.yaml.

Também é possível configurar a inicialização especificando os seguintes campos na configuração cloudcode.kubernetes no seu arquivo .vscode/launch.json:

  • skaffoldConfig: especifica o arquivo de configuração do skaffold que contém as definições de compilação e implantação.
  • profile: especifica seu perfil skaffold preferido. Se não for definido, o perfil padrão será usado.
  • imageRegistry: especifica o registro de imagens para onde as imagens serão enviadas.
  • watch: especifique se é preciso acompanhar as alterações no espaço de trabalho e execute novamente o aplicativo. A menos que seja explicitamente definido como falso, verdadeiro por padrão.
  • cleanUp: especificar se os recursos implantados do Kubernetes serão excluídos no cluster após o encerramento do aplicativo. A menos que seja explicitamente definido como falso, verdadeiro por padrão.
  • portForward: especifique se quer encaminhar portas para os recursos expostos do Kubernetes no cluster para a máquina local. A menos que seja explicitamente definido como falso, verdadeiro por padrão.