Começar a usar o Skaffold no Cloud Deploy

Neste documento, descrevemos como começar a usar o Skaffold como parte do Cloud Deploy, incluindo o seguinte:

  • Como configurar o Skaffold para uso com um pipeline de entrega do Cloud Deploy
  • Como usar o Skaffold e o Cloud Deploy com ferramentas de renderização de terceiros, como Helm e Kustomize
  • Opcionalmente, usar o Skaffold para desenvolvimento local
  • Opcionalmente, use o Skaffold para integração e implantação contínuas (CI/CD)

Por que usar o Skaffold?

Quer saber por que o Cloud Deploy usa o Skaffold e por que você precisa gerenciar uma configuração do Skaffold? Continue lendo.

Tenho experiência com CI/CD, mas não uso o Skaffold no momento

O Skaffold é uma ferramenta de linha de comando de código aberto que melhora a produtividade dos desenvolvedores. Ele orquestra o desenvolvimento contínuo, a integração contínua (CI) e a entrega contínua (CD).

O Skaffold fornece configuração declarativa e portátil usando uma arquitetura conectável, o que permite usar ferramentas diferentes para a fase de renderização.

Quando uma versão é criada, o Cloud Deploy chama o Skaffold para renderizar seus manifestos. No momento da implantação, o Cloud Deploy chama o Skaffold novamente para aplicar esses manifestos e implantar o aplicativo em cada destino no seu progresso. Após a implantação, o Skaffold executa verificações de integridade para monitorar o ambiente de execução de destino para uma implantação bem-sucedida.

Skaffold para desenvolvimento contínuo

Ao usar o Skaffold para desenvolvimento contínuo, as imagens são criadas, testadas e implantadas em um cluster (ou Minikube) conforme você altera seu código. As extensões de ambiente de desenvolvimento integrado do Cloud Code para VS Code e do Cloud Code para IntelliJ integram o Skaffold aos ambientes de desenvolvimento integrado do Visual Studio Code e do JetBrains para desenvolvimento contínuo.

Skaffold para entrega contínua

Também é possível usar o Skaffold para entrega contínua, com etapas de criação, implantação, renderização e aplicação. O Cloud Deploy usa os recursos de renderização e aplicação do Skaffold. Para usar o Cloud Deploy, é necessário pelo menos um arquivo de configuração skaffold.yaml válido.

Com o Skaffold, também é possível fazer a integração com ferramentas de gerenciamento de manifestos de terceiros, como Helm e Kustomize. O uso do Skaffold dessa maneira permite usar os recursos dessas ferramentas para renderizar manifestos. kubectl continua sendo o deployer desses manifestos.

Ainda não conheço a implantação no Kubernetes

Com o Skaffold, é possível configurar um conjunto básico de manifestos para todas as suas implantações. Em seguida, use o mecanismo de renderização do Skaffold por meio do Cloud Deploy para renderizar e implantar cada manifesto específico da implantação de um desses manifestos básicos.

Leia mais sobre como gerenciar manifestos, incluindo exemplos de uso do Skaffold e do Cloud Deploy com ferramentas comuns de criação de modelos de manifesto, como Helm e Kustomize.

O que é necessário para o Cloud Deploy funcionar?

Para usar um pipeline básico de entrega do Cloud Deploy, o arquivo de configuração skaffold.yaml precisa pelo menos da seguinte configuração:

  • As informações do cabeçalho necessárias para todas as configurações do skaffold.yaml:

    apiVersion: skaffold/v2beta28
    Kind: Config
    
  • Uma estrofe deploy, com deploy.kubectl, para implantação no GKE ou no GKE Enterprise, ou deploy.cloudrun para implantação no Cloud Run.

    Para GKE:

    deploy:
      kubectl:
        manifests:
        - ...
    

    Na estrofe manifests, uma lista de todos os manifestos brutos do Kubernetes. Se você planeja usar um renderizador (como Helm ou Kustomize) para renderizar manifestos, consulte Adicionar suporte do Kustomize ao skaffold.yaml e Adicionar suporte do Helm ao skaffold.yaml para ver orientações sobre como configurar o Skaffold para usar essas ferramentas.

    Para o Cloud Run:

    metadata:
      name:
    manifests:
      rawYaml:
      - ...
    deploy:
      cloudrun: {}
    

Criar um arquivo skaffold.yaml

O Google Cloud Deploy usa o Skaffold para renderizar e implantar aplicativos.

Você precisa fornecer, no mínimo, um arquivo skaffold.yaml que identifique os manifestos a serem usados. Veja um exemplo:

apiVersion: skaffold/v2beta28
kind: Config
deploy:
  kubectl:
    manifests:
      - MANIFEST

Nessa configuração, MANIFEST é o caminho para o manifesto ou os manifestos que serão processados pelo Skaffold.

Faça com que o Cloud Deploy gere seu skaffold.yaml

Se você não tiver um arquivo skaffold.yaml, mas tiver um único manifesto do Kubernetes ou um arquivo de definição de serviço do Cloud Run, o Cloud Deploy poderá gerar um arquivo skaffold.yaml para você .

O arquivo Skaffold gerado estará disponível no diretório de teste de origem do Cloud Storage após a conclusão da versão.

O comando a seguir inclui a sinalização --from-k8s-manifest, transmitindo o manifesto do Kubernetes. O Cloud Deploy usa as informações no manifesto para gerar o skaffold.yaml, que será usado para a versão.

gcloud deploy releases create  RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION

Para gerar o skaffold.yaml com base em um YAML de serviço do Cloud Run, use o mesmo comando, mas com --from-run-manifest em vez de --from-k8s-manifest.

O uso de uma dessas sinalizações com a sinalização --skaffold-file ou --source gera um erro.

Como usar o arquivo skaffold.yaml gerado

O skaffold.yaml gerado é adequado para integração, aprendizado e demonstração do Cloud Deploy. Após se familiarizar com o Cloud Deploy e para cargas de trabalho de produção, convém ter uma configuração do Skaffold que diferencia os destinos (usando perfis do Skaffold).

Ao usar o arquivo skaffold.yaml gerado como ponto de partida para criar sua própria configuração diferenciada do Skaffold, use o arquivo no arquivo de origem da renderização, não o arquivo renderizado. A origem da renderização está disponível para download na guia Artefatos da página **Detalhes da versão **.

  • Esse skaffold.yaml gerado é incluído na origem de renderização armazenada em um bucket do Cloud Storage.

    Para visualizar este arquivo, faça o download do arquivo .tar.gz e o extraia.

  • O skaffold.yaml renderizado está disponível em Artefatos de destino.

    Na seção Artefatos de destino, clique em Ver artefatos.

    Página de detalhes da versão, mostrando artefatos de origem e destino da renderização

Como usar o Skaffold para desenvolvimento local

Um dos pontos fortes do Skaffold é que ele pode ser usado para desenvolvimento local e para CI/CD. No modo dev, o Skaffold observa os arquivos de origem e, quando detecta uma alteração, o Skaffold recria as imagens, testa novamente e reimplanta os contêineres em um cluster de minikube (por exemplo) na máquina local.

Ao usar o Skaffold dessa maneira, é possível usar os mesmos comandos localmente para a implantação remota.

Se você usa o Skaffold para desenvolvimento local, pode definir perfis separados do Skaffold para seus destinos e uma estrofe de implantação padrão para desenvolvimento local.

Quando você interrompe o modo dev, o Skaffold limpa os artefatos implantados do cluster.

Como usar o Skaffold para CI/CD

Além de usar o Skaffold para compilação e implantação local contínuas, é possível usar o Skaffold para CI/CD. O Cloud Deploy usa os recursos de CI/CD no Skaffold para renderizar e aplicar seus manifestos e implantar o aplicativo nos destinos definidos, de acordo com as imagens de contêiner criadas usando uma ferramenta de CI como o Cloud Build e um registro de imagens como o Artifact Registry.

Renderizar, implantar e aplicar

O Skaffold separa o processo de renderização do manifesto da implantação. O Cloud Deploy chama skaffold render para renderizar os manifestos e skaffold apply para aplicá-los ao destino.

Essa separação entre renderizar e aplicar permite capturar o estado declarativo completo do aplicativo na configuração, para que ele possa ser aplicado com segurança e repetição (por exemplo, para reversões). Essa técnica também facilita as aprovações. Como os manifestos são renderizados para todos os destinos antes do primeiro lançamento, é possível ver o YAML renderizado que será aplicado a cada destino.

O Cloud Deploy não oferece suporte ao uso de outros implantadores para implantar seu aplicativo. No entanto, é possível usar ferramentas como Helm ou Kustomize para renderização.

Para saber mais sobre como o Cloud Deploy implanta usando kubectl como o implantador, consulte Arquitetura do Cloud Deploy Service.

Sobre os perfis do Skaffold

É possível criar perfis separados do Skaffold, identificados em skaffold.yaml, em uma estrofe profiles:.

Ao usar os perfis do Skaffold com o Cloud Deploy, é possível criar perfis separados para todos ou alguns dos destinos. Por exemplo, perfis diferentes para dev, staging e prod.

Os perfis não são necessários para usar o Skaffold no Cloud Deploy, mas são úteis para definir personalizações de manifesto entre seus destinos, por exemplo, usando diferentes arquivos kustomization.yaml do Kustomize por destino.

Adicionar suporte do Kustomize ao seu skaffold.yaml

A integração da configuração do Kustomize com a configuração do Cloud Deploy/Skaffold consiste no seguinte:

  1. Inclua um arquivo kustomization.yaml entre seus arquivos de configuração.

    É possível armazenar os arquivos de configuração em um diretório local ou em um bucket do Cloud Storage.

  2. No seu arquivo skaffold.yaml, crie uma estrofe deploy para cada perfil.

    Também é possível ter uma estrofe deploy fora de quaisquer perfis definidos, se você não estiver usando perfis ou para uma configuração de implantação padrão não vinculada a um perfil. Veja um exemplo:

    apiVersion: skaffold/v2beta28
    kind: Config
    build:
      artifacts:
        - image: leeroy-web-profiles
          context: leeroy-web-profiles
        - image: leeroy-app-profiles
          context: leeroy-app-profiles
      googleCloudBuild:
        projectId: ${PROJECT_ID}
    profiles:
    - name: local
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/local
    - name: test
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/test
    - name: staging
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/staging
    - name: prod
      deploy:
        kustomize:
          paths:
            - leeroy-app-profiles/kubernetes/prod
    

    A configuração do Skaffold mostrada aqui tem perfis separados para destinos test, staging e prod. Ele também mostra um perfil para desenvolvimento local. Em cada perfil, há uma estrofe deploy.kustomize com um caminho que aponta para o local da personalização a ser usada para esse destino.

Adicionar suporte ao Helm ao skaffold.yaml

Você pode usar o Helm para renderizar seus manifestos. O Cloud Deploy não usa o Helm para implantar seus aplicativos e é compatível apenas com kubectl como implantador.

Para usar o Helm, você precisa dos gráficos do Helm, armazenados em qualquer local que possa ser referenciado no skaffold.yaml. Esse local pode estar em um sistema de arquivos, um repositório, possivelmente com seu skaffold.yaml ou um repositório da Open Container Initiative (OCI).

Para usar um gráfico do Helm, adicione uma estrofe helm ao arquivo skaffold.yaml.

apiVersion: skaffold/v2beta28
kind: Config
build:
  artifacts:
  - image: skaffold-helm-image
deploy:
  helm:
    releases:
    - name: skaffold-helm-image
      chartPath: charts

A referência do skaffold.yaml mostra o que é necessário nessa estrofe helm.

Como usar o kpt com o Skaffold

Recomendamos que você não use o kpt com o Skaffold V1 no Cloud Deploy.

Recursos do Skaffold não compatíveis

Os seguintes recursos do Skaffold não podem ser usados no Cloud Deploy:

A seguir

  • Acesse o site da Skaffold para saber como ele funciona e o que ele pode fazer por você.

  • Pratique usando o Google Cloud Deploy com perfis do Kustomize e do Skaffold.

  • Saiba como o Cloud Deploy seleciona a versão do Skaffold a ser usada, quando a versão do Skaffold é alterada e como determinar qual versão está em uso.

  • Saiba como usar os perfis do Skaffold com ferramentas avançadas de gerenciamento de manifestos, como Helm, Kustomize e kpt.