Faça a gestão de manifestos no Cloud Deploy

Esta página descreve como configurar o Cloud Deploy para renderizar a configuração de cada destino num pipeline de fornecimento.

O Cloud Deploy usa o Skaffold para renderizar os seus manifestos do Kubernetes. O serviço suporta a renderização de manifestos não processados e ferramentas de gestão de manifestos mais avançadas, como o Helm, o Kustomize e o kpt.

O processo de renderização tem duas fases:

  1. A ferramenta de gestão de manifestos gera o manifesto.

  2. O Skaffold substitui as referências de imagens no manifesto pelas imagens que quer implementar na sua versão.

Esta página inclui exemplos de configuração com o Helm e o Kustomize.

Usar o Skaffold para gerar a sua configuração

Se ainda não tiver um ficheiro de configuração do Skaffold (skaffold.yaml), pode usar o Skaffold para gerar um com base no conteúdo do seu repositório.

  1. Instale o Skaffold com a Google Cloud CLI:

    gcloud components install skaffold

  2. Execute skaffold init no repositório que contém os seus manifestos:

    skaffold init --skip-build

Este comando cria um ficheiro skaffold.yaml no seu repositório. Esse ficheiro faz referência aos manifestos nesse repositório. O conteúdo tem o seguinte aspeto:

apiVersion: skaffold/v4beta7
kind: Config
metadata:
  name: sample-app
manifests:
  rawYaml:
    - k8s-manifests/deployment.yaml
    - k8s-manifests/rbac.yaml
    - k8s-manifests/redis.yaml
    - k8s-manifests/service.yaml

Renderização de manifestos não processados

Os manifestos não processados são manifestos que não são geridos por uma ferramenta como o Helm ou o Kustomize e, por isso, não precisam de pré-processamento antes de serem preenchidos e implementados num cluster.

Por predefinição, o Cloud Deploy usa o skaffold render para renderizar os seus manifestos do Kubernetes, substituindo os nomes de imagens não etiquetados pelos nomes de imagens etiquetados das imagens de contentores que está a implementar. Em seguida, quando promove o lançamento, o Cloud Deploy usa skaffold apply para aplicar os manifestos e implementar as imagens no seu cluster do Google Kubernetes Engine.

Uma secção manifests de uma configuração básica tem o seguinte aspeto:

manifests:
  rawYaml:
    - PATH_TO_MANIFEST

Consulte a documentação do Skaffold para mais informações sobre os valores que podem ser transmitidos aqui.

Renderização com o Helm

Pode usar o Cloud Deploy para renderizar os seus gráficos Helm. Para o fazer, inclua detalhes do gráfico Helm numa secção deploy num perfil do Skaffold.

Cada definição deste tipo tem o seguinte aspeto:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  helm:
    releases:
      - name: RELEASE_NAME
        chartPath: PATH_TO_HELM_CHART

Onde:

RELEASE_NAME é o nome da instância do gráfico Helm para esta versão.

PATH_TO_HELM_CHART é o caminho local para um gráfico Helm incluído num pacote ou um diretório de gráficos Helm não incluído num pacote.

Pode usar opções de configuração do Helm adicionais, conforme descrito na documentação do Skaffold

Renderização com o Kustomize

Pode usar o Kustomize com o Cloud Deploy. Para o fazer, indica os ficheiros de personalização a partir da secção deploy na configuração do perfil skaffold.yaml.

Inclui uma configuração do Kustomize separada para cada destino que está a usar com o Kustomize, em cada profile correspondente no seu skaffold.yaml.

Cada definição deste tipo tem o seguinte aspeto:

apiVersion: skaffold/v4beta7
kind: Config
manifests:
  kustomize:
    paths:
      - PATH_TO_KUSTOMIZE

Onde:

PATH_TO_KUSTOMIZE aponta para os seus ficheiros de personalização. A predefinição é ["."]

Pode usar opções de configuração adicionais do Kustomize, conforme descrito na documentação do Skaffold

Configurar manifestos diferentes por alvo

Muitas vezes, cada alvo precisa de uma configuração ligeiramente diferente. Por exemplo, pode ter mais réplicas nas implementações de produção do que nas implementações de preparação.

Pode renderizar um conjunto diferente de manifestos para cada destino, fornecendo cada variação como um perfil do Skaffold diferente.

Perfis com manifestos não processados

Quando trabalha com manifestos não processados, pode direcionar o Cloud Deploy para um ficheiro diferente, consoante o destino. Pode configurar essa opção da seguinte forma:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      rawYaml:
        - prod.yaml
  - name: staging
    manifests:
      rawYaml:
        - staging.yaml

Perfis com o Kustomize

Segue-se um exemplo de skaffold.yaml que tem perfis diferentes para testes e produção com o Kustomize, em que cada perfil aponta para uma personalização diferente:

apiVersion: skaffold/v4beta7
kind: Config
profiles:
  - name: prod
    manifests:
      kustomize:
        paths:
          - environments/prod
  - name: staging
    manifests:
      kustomize:
        paths:
          - environments/staging

Perfis referenciados no pipeline de entrega

Estes perfis, definidos em skaffold.yaml, são referenciados na configuração do pipeline de entrega, por destino:

serialPipeline:
  stages:
  - targetId: staging-target
    profiles:
    - staging
  - targetId: prod-target
    profiles:
    - prod

Substitua uma imagem específica quando criar o lançamento

O manifesto pode usar um marcador de posição para o nome da imagem, que pode substituir quando criar o lançamento.

Segue-se um exemplo de um manifesto com um marcador de posição para a imagem:

apiVersion: v1
kind: Deployment
metadata:
  name: getting-started
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: my-app-image

Quando cria o lançamento, pode usar a flag --images= para identificar a imagem específica a implementar. Por exemplo, o comando seguinte cria uma versão e substitui um nome de imagem qualificado por SHA pelo nome do marcador de posição:

gcloud deploy releases create test-release-001 \
  --project=test-gke-using-deployment \
  --region=us-central1 \
  --delivery-pipeline=my-gke-demo-app-1 \
  --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

O manifesto renderizado resultante tem agora uma referência à imagem especificada em vez de my-app-image.

O que se segue?