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
| Composant | Description |
|---|---|
| Delivery Pipeline | Définit les étapes de déploiement |
| Target | Destination (GKE cluster, Cloud Run) |
| Release | Version déployable de l'application |
| Rollout | Dé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).