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
- Usar o Skaffold e o Cloud Deploy com ferramentas de renderização de terceiros, como Helm e Kustomize
- Opcionalmente, usando o Skaffold para desenvolvimento local
- Opcionalmente, usar 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 uma configuração declarativa e portátil, usando uma arquitetura plugável, permitindo o uso de diferentes ferramentas 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 na sua progressão. 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
Quando você usa o Skaffold para desenvolvimento contínuo, as imagens são criadas, testadas e implantadas em um cluster (ou Minikube) à medida que você altera seu código. As extensões do ambiente de desenvolvimento integrado do Cloud Code para VS Code e do Cloud Code for 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 as 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, você precisa de pelo menos um arquivo de
configuração skaffold.yaml
válido.
Também é possível usar o Skaffold para fazer a integração com ferramentas de gerenciamento de manifesto
de terceiros, como Helm e Kustomize (links em inglês).
Usar o Skaffold dessa maneira permite utilizar os recursos dessas ferramentas para renderizar
manifestos. kubectl
continua sendo o deployer desses manifestos.
Ainda não tenho experiência com implantações 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 o Helm e o 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/v4beta7 kind: Config
Uma estrofe
manifests
para GKE, GKE Enterprise ou Cloud Run listando todos os manifestos brutos do Kubernetes, a menos que você esteja usando uma ferramenta de gerenciamento de manifestos, como Helm ou Kustomize.Confira um exemplo com um manifesto bruto do Kubernetes:
manifests: rawYaml: - deployment.yaml
Se você planeja usar um renderizador (como Helm ou Kustomize) para renderizar manifestos, consulte Adicionar suporte do Helm ao skaffold.yaml e Adicionar suporte do Kustomize ao skaffold.yaml para receber orientações sobre como configurar o Skaffold para usar essas ferramentas.
Para exemplos do Helm e do Kustomize, consulte Gerenciar manifestos.
Uma estrofe
deploy
, comdeploy.kubectl
, para implantação no GKE ou no GKE Enterprise, oudeploy.cloudrun
para implantação no Cloud Run.Para destinos do GKE e do GKE Enterprise:
deploy: kubectl: {}
A estrofe de implantação implanta os manifestos do aplicativo que foram fornecidos na estrofe de manifestos.
Para destinos do Cloud Run:
deploy: cloudrun: {}
A estrofe de implantação implanta os manifestos do aplicativo fornecidos nas estrofes dos manifestos.
Se você estiver usando destinos personalizados, seu
skaffold.yaml
precisará ter o cabeçalho (apiVersion
e kind:
), além das
ações personalizadas
que o destino personalizado vai usar se o tipo de destino personalizado ainda
não fizer referência a uma
configuração remota do Skaffold.
Criar um arquivo skaffold.yaml
O Cloud Deploy usa o Skaffold para renderizar e implantar os aplicativos.
Para cada versão, é necessário fornecer pelo menos um arquivo skaffold.yaml
que
identifique os manifestos a serem usados. Consulte a
seção anterior
para conferir orientações sobre o que precisa ser inserido nesse arquivo.
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
, passando o manifesto do Kubernetes. O Cloud Deploy usa as informações no
manifesto para gerar o skaffold.yaml
, que é então 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 qualquer 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. Depois de se familiarizar com o Cloud Deploy
e para cargas de trabalho de produção, convém ter uma configuração do Skaffold
que diferencie seus 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 no arquivo renderizado. A origem da renderização está
disponível para download na guia Artefatos da página **Detalhes da
versão **.
Essa
skaffold.yaml
gerada é incluída na origem de renderização armazenada em um bucket do Cloud Storage.Para acessar este arquivo, faça o download do arquivo
.tar.gz
e extraia-o.O
skaffold.yaml
renderizado está disponível em Artefatos de destino.Na seção Artefatos de destino, clique em Exibir artefatos.
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, recria as imagens, testa novamente e reimplanta os contêineres em um cluster minikube (por exemplo) na máquina local.
Ao usar o Skaffold dessa maneira, é possível usar os mesmos comandos localmente da implantação remota.
Se você usa o Skaffold para desenvolvimento local, pode definir perfis separados para os 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 criação e implantação locais 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, com 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 de 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 seu aplicativo na configuração para que ele possa ser aplicado de forma segura e repetida (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 o 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 de serviço do Cloud Deploy.
Sobre os perfis do Skaffold
É possível criar perfis separados do Skaffold, identificados em skaffold.yaml
, em estrofe profiles:
.
Ao usar 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 para o Kustomize ao seu skaffold.yaml
A integração da configuração do Kustomize com a configuração do Cloud Deploy/Skaffold consiste no seguinte:
Inclua um arquivo
kustomization.yaml
entre os arquivos de configuração.É possível armazenar os arquivos de configuração em um diretório local ou em um bucket do Cloud Storage.
No seu arquivo
skaffold.yaml
, crie uma estrofedeploy
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.Confira a seguir um exemplo de configuração do Skaffold que mostra estrofes de
deploy
por perfil e usa um app de exemplo fictício chamadomy-app
:apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}
A configuração do Skaffold mostrada aqui tem perfis separados para os destinos
test
,staging
eprod
. Ele também mostra um perfil para desenvolvimento local. Em cada perfil, há uma estrofedeploy.kustomize
com um caminho que aponta para o local da personalização a ser usada no destino.
Adicionar suporte ao Helm ao skaffold.yaml
O Helm pode ser usado para renderizar seus manifestos. O Cloud Deploy não usa
o Helm para implantar seus aplicativos e é compatível apenas com kubectl
como um 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
Open Container Initiative (OCI).
Para usar um gráfico do Helm, adicione uma estrofe helm
ao
arquivo skaffold.yaml
.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
A referência de skaffold.yaml
mostra o que é necessário nessa estrofe de helm
.
Recursos incompatíveis do Skaffold
Os seguintes recursos do Skaffold não podem ser usados no Cloud Deploy:
-
Não há suporte para o uso de
--module=
para selecionar módulos específicos parabuild
,render
,apply
e assim por diante. Módulos estáticos são aceitos. No Helm, a capacidade de criar um namespace, se nenhum existir.
A seguir
Acesse o site da Skaffold para saber como ele funciona e o que ele pode fazer por você.
Pratique o uso do Cloud Deploy com os perfis Kustomize e 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 manifesto, como Helm, Kustomize e kpt.