Aller au contenu principal

Cloud Deploy


1 - Présentation

Cloud Deploy est un service de continuous delivery managé pour déployer des applications vers GKE, Cloud Run et d'autres targets.


2 - Concepts

2.1 Composants

ComposantDescription
Delivery PipelineDéfinit les étapes de déploiement
TargetDestination (GKE cluster, Cloud Run)
ReleaseVersion déployable de l'application
RolloutDéploiement d'une release vers un target

2.2 Flux de déploiement


3 - Configuration

3.1 Delivery Pipeline

# clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-app-pipeline
description: Pipeline de déploiement pour my-app
serialPipeline:
stages:
- targetId: dev
profiles: [dev]
- targetId: staging
profiles: [staging]
- targetId: production
profiles: [production]
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: my-app
deployment: my-app
canaryDeployment:
percentages: [10, 50]
verify: true

3.2 Targets

# targets.yaml
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: Cluster de développement
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/dev-cluster
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: staging
description: Cluster de staging
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/staging-cluster
requireApproval: true
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: production
description: Cluster de production
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/prod-cluster
requireApproval: true

3.3 Target Cloud Run

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: production-cloudrun
description: Cloud Run production
run:
location: projects/mon-projet/locations/europe-west1

4 - Skaffold

Cloud Deploy utilise Skaffold pour le rendu et le déploiement.

4.1 skaffold.yaml

apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: my-app
profiles:
- name: dev
manifests:
kustomize:
paths:
- kubernetes/overlays/dev
- name: staging
manifests:
kustomize:
paths:
- kubernetes/overlays/staging
- name: production
manifests:
kustomize:
paths:
- kubernetes/overlays/production
deploy:
kubectl: {}

4.2 Structure Kustomize

kubernetes/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/
│ └── kustomization.yaml
├── staging/
│ └── kustomization.yaml
└── production/
└── kustomization.yaml

5 - Créer et déployer

5.1 Appliquer la configuration

# Créer le pipeline et les targets
gcloud deploy apply --file=clouddeploy.yaml --region=europe-west1
gcloud deploy apply --file=targets.yaml --region=europe-west1

5.2 Créer une release

# Depuis Cloud Build
gcloud deploy releases create release-001 \
--project=mon-projet \
--region=europe-west1 \
--delivery-pipeline=my-app-pipeline \
--images=my-app=europe-west1-docker.pkg.dev/mon-projet/images/my-app:v1.0.0

5.3 Intégration Cloud Build

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE}', '.']

- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_IMAGE}']

- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'deploy'
- 'releases'
- 'create'
- 'release-$SHORT_SHA'
- '--delivery-pipeline=my-app-pipeline'
- '--region=europe-west1'
- '--images=my-app=${_IMAGE}'

substitutions:
_IMAGE: 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/my-app:$COMMIT_SHA'

6 - Promotions et rollbacks

6.1 Promouvoir une release

# Promouvoir vers le target suivant
gcloud deploy releases promote \
--release=release-001 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1

# Vers un target spécifique
gcloud deploy releases promote \
--release=release-001 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--to-target=production

6.2 Approuver un déploiement

# Lister les rollouts en attente
gcloud deploy rollouts list \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--filter="state=PENDING_APPROVAL"

# Approuver
gcloud deploy rollouts approve rollout-001 \
--delivery-pipeline=my-app-pipeline \
--release=release-001 \
--region=europe-west1

6.3 Rollback

# Créer un rollback vers une release précédente
gcloud deploy targets rollback production \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1

# Ou promouvoir une ancienne release
gcloud deploy releases promote \
--release=release-000 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--to-target=production

7 - Stratégies de déploiement

7.1 Rolling Update (défaut)

stages:
- targetId: production
strategy:
standard:
verify: true

7.2 Canary

stages:
- targetId: production
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: my-app
deployment: my-app
canaryDeployment:
percentages: [10, 25, 50, 75]
verify: true

8 - Notifications

# Configurer les notifications Pub/Sub
gcloud deploy delivery-pipelines update my-app-pipeline \
--region=europe-west1 \
--notification-config-topic=projects/mon-projet/topics/deploy-notifications

Résumé

Dans ce chapitre, nous avons appris :

  • Les concepts de Cloud Deploy
  • La configuration des pipelines et targets
  • L'intégration avec Skaffold
  • Les releases et leur gestion
  • Les promotions et rollbacks
  • Les stratégies de déploiement

Prochaine étape

Dans le prochain chapitre, nous verrons Google Kubernetes Engine (GKE).

→ Chapitre suivant : GKE


← Retour à la table des matières