Implemente uma aplicação de forma gradual num destino
Este início rápido mostra como usar o Cloud Deploy para fornecer uma imagem de aplicação de exemplo numa implementação canária no Google Kubernetes Engine ou no Cloud Run. (Também pode executar uma implementação canária em clusters anexados do GKE, mas apenas o GKE e o Cloud Run são apresentados neste início rápido.)
Uma implementação canary divide o tráfego entre uma versão da aplicação já implementada e a nova versão. O Cloud Run distribui o tráfego com base nas percentagens que configurar no pipeline de fornecimento. O GKE implementa a nova versão numa proporção de pods. Este início rápido é implementado primeiro em 50% e, em seguida, em 100%.
Neste início rápido, existe apenas um alvo,
(prod).
Por isso, criamos apenas um cluster do GKE ou um serviço do Cloud Run para executar a sua aplicação.
Neste início rápido, vai fazer o seguinte:
Crie um cluster do GKE ou defina um serviço do Cloud Run.
Também pode fazer a implementação canary em clusters anexados do GKE, mas este início rápido usa apenas o GKE e o Cloud Run.
Crie uma configuração do Skaffold e um manifesto do Kubernetes para especificar a imagem de contentor (pré-criada) a implementar.
Defina o pipeline de entrega e o alvo de implementação do Cloud Deploy.
Invoque a sua pipeline de fornecimento criando um lançamento, que é automaticamente implementado num destino.
Este primeiro lançamento ignora a fase de teste.
Veja o pipeline de fornecimento e o lançamento na Google Cloud consola.
Crie um segundo lançamento, desta vez executando a fase de teste canário para implementar a aplicação em 50%.
Avançar o lançamento para implementação a 100%.
Antes de começar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Certifique-se de que a conta de serviço predefinida do Compute Engine tem autorizações suficientes.
A conta de serviço pode já ter as autorizações necessárias. Estes passos são incluídos para projetos que desativam as concessões de funções automáticas para contas de serviço predefinidas.
- Primeiro, adicione a função
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - Adicione a função de programador para o seu tempo de execução específico.
- Para o GKE e o GKE com a API Gateway:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Para o Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
Adicione a função
iam.serviceAccountUser, que inclui a autorizaçãoactAspara implementar no tempo de execução:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
Crie o seu ambiente de tempo de execução
GKE
Crie um cluster do GKE Autopilot:
gcloud container clusters create-auto canary-quickstart-cluster \ --project=PROJECT_ID \ --region=us-central1GKE + API Gateway
Crie um cluster do GKE com as definições recomendadas para suportar a utilização com o Istio:
gcloud container clusters create canary-quickstart-cluster \ --machine-type=n1-standard-1 \ --num-nodes 4 \ --region=us-central1 \ --project=PROJECT_IDObtenha as credenciais do cluster:
gcloud container clusters get-credentials canary-quickstart-cluster \ --project=PROJECT_ID \ --region=us-central1Instale os CRDs da API Kubernetes Gateway, se ainda não estiverem presentes no cluster.
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v0.6.2/standard-install.yamlAtive a implementação do controlador de gateway do Istio instalando o Istio.
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.2 sh - \ && ./istio-1.17.2/bin/istioctl install --set profile=minimal -y
Cloud Run
Se estiver a usar o Cloud Run, pode ignorar este comando. Não tem de fazer nada aqui.
Prepare a configuração do Skaffold e o manifesto da aplicação
O Cloud Deploy usa o Skaffold para fornecer os detalhes sobre o que implementar e como o implementar corretamente no seu destino.
Neste início rápido, cria um ficheiro
skaffold.yaml, que identifica a configuração do serviço do manifesto do Kubernetes ou do Cloud Run a implementar.Abra uma janela de terminal.
Crie um novo diretório e navegue para o mesmo.
GKE
mkdir deploy-canary-quickstart-gke cd deploy-canary-quickstart-gkeGKE + API Gateway
mkdir deploy-canary-quickstart-gke-gatewayapi cd deploy-canary-quickstart-gke-gatewayapiCloud Run
mkdir deploy-canary-quickstart-run cd deploy-canary-quickstart-runCrie um ficheiro denominado
skaffold.yamlcom o seguinte conteúdo:GKE
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}GKE + API Gateway
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - kubernetes.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - run.yaml deploy: cloudrun: {}Este ficheiro é uma configuração mínima do Skaffold que identifica o seu manifesto. Para este início rápido, cria o ficheiro. No entanto, também pode pedir ao Cloud Deploy que crie um para si para aplicações simples que não sejam de produção.
Consulte a referência
skaffold.yamlpara mais informações acerca deste ficheiro.Crie o manifesto da aplicação.
GKE
Crie um ficheiro denominado
kubernetes.yamlno diretóriodeploy-canary-quickstart-gkecom o seguinte conteúdo:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80Este ficheiro é um manifesto do Kubernetes, que é aplicado ao cluster para implementar a aplicação. Este manifesto inclui os recursos de serviço e implementação necessários para a implementação canary, além de um HTTPRoute e o recurso de gateway necessário para usar a API Gateway.
A imagem do contentor a implementar é definida aqui como um marcador de posição,
my-app-image, que é substituído pela imagem específica quando cria a versão.GKE + API Gateway
Crie um ficheiro denominado
kubernetes.yamlno diretóriodeploy-canary-quickstart-gke-gatewayapicom o seguinte conteúdo:kind: Gateway apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: my-gateway annotations: networking.istio.io/service-type: "ClusterIP" spec: gatewayClassName: istio listeners: - name: default hostname: "*.example.com" port: 80 protocol: HTTP allowedRoutes: namespaces: from: All --- kind: HTTPRoute apiVersion: gateway.networking.k8s.io/v1beta1 metadata: name: my-httproute spec: parentRefs: - kind: Gateway name: my-gateway hostnames: - "test.example.com" rules: - backendRefs: - name: my-service port: 80 --- apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: - name: tcp-port protocol: TCP port: 80 targetPort: 8080 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-imageEste ficheiro é um manifesto do Kubernetes, que é aplicado ao cluster para implementar a aplicação. Este manifesto inclui os recursos de serviço e implementação necessários para a implementação canary, além de um HTTPRoute e o recurso de gateway necessário para usar a API Gateway.
A imagem do contentor a implementar é definida aqui como um marcador de posição,
my-app-image, que é substituído pela imagem específica quando cria a versão.Cloud Run
Crie um ficheiro denominado
run.yamlno diretóriodeploy-canary-quickstart-runcom o seguinte conteúdo:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-canary-run-service spec: template: spec: containers: - image: my-app-imageEste ficheiro é uma definição básica do serviço Cloud Run, que é aplicada no momento da implementação para criar o seu serviço no Cloud Run. A imagem do contentor a implementar é definida aqui como um marcador de posição,
my-app-image, que é substituído pela imagem específica quando cria a versão.
Crie o pipeline de entrega e as segmentações
Pode definir o pipeline de entrega e os alvos num ficheiro ou em ficheiros separados. Neste início rápido, criamos um ficheiro para o nosso pipeline e o nosso único destino:
GKE
Crie um ficheiro denominado
clouddeploy.yamlno diretóriodeploy-canary-quickstart-gkecom o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-canary-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: prod profiles: [] strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: "my-service" deployment: "my-deployment" canaryDeployment: percentages: [50] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: prod description: prod GKE cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/canary-quickstart-clusterGKE + API Gateway
Crie um ficheiro denominado
clouddeploy.yamlno diretóriodeploy-canary-quickstart-gke-gatewayapicom o seguinte conteúdo:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-canary-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: prod profiles: [] strategy: canary: runtimeConfig: kubernetes: gatewayServiceMesh: httpRoute: "my-httproute" service: "my-service" deployment: "my-deployment" canaryDeployment: percentages: [50] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: - Primeiro, adicione a função
Se já tiver a CLI instalada, certifique-se de que está a executar a versão mais recente:
gcloud components update