Ce document explique comment utiliser Skaffold dans le cadre de Cloud Deploy, par exemple:
- Configurer Skaffold pour une utilisation avec un pipeline de livraison Cloud Deploy
- Utiliser Skaffold et Cloud Deploy avec des outils de rendu tiers, tels que Helm et Kustomize
- Éventuellement, utiliser Skaffold pour le développement local
- Éventuellement, utiliser Skaffold pour l'intégration et le déploiement continus (CI/CD)
Pourquoi Skaffold ?
Vous souhaitez savoir pourquoi Cloud Deploy utilise Skaffold et pourquoi vous devez gérer une configuration Skaffold ? Lisez la suite.
J'ai de l'expérience avec le CI/CD, mais je n'utilise pas Skaffold pour le moment
Skaffold est un outil de ligne de commande Open Source visant à améliorer la productivité des développeurs. Elle orchestre le développement continu, l'intégration continue (CI) et la livraison continue (CD).
Skaffold fournit une configuration déclarative et portable, utilisant une architecture connectable, ce qui vous permet d'utiliser différents outils pour la phase de rendu.
Lorsqu'une version est créée, Cloud Deploy appelle Skaffold pour afficher vos fichiers manifestes. Au moment du déploiement, Cloud Deploy appelle à nouveau Skaffold pour appliquer ces fichiers manifestes afin de déployer votre application sur chaque cible en progression. Après le déploiement, Skaffold effectue des vérifications de l'état pour surveiller l'environnement d'exécution cible afin de garantir la réussite du déploiement.
Skaffold pour le développement continu
Lorsque vous utilisez Skaffold pour le développement continu, les images sont créées, testées et déployées sur un cluster (ou Minikube) à mesure que vous modifiez votre code. Les extensions d'IDE Cloud Code pour VS Code et Cloud Code pour IntelliJ intègrent Skaffold dans Visual Studio Code et les IDE JetBrains, pour un développement continu.
Skaffold pour la livraison continue
Vous pouvez également utiliser Skaffold pour la livraison continue, avec des étapes de compilation, de déploiement, de rendu et d'application. Cloud Deploy utilise les fonctionnalités de rendu et d'application de Skaffold. Pour utiliser Cloud Deploy, vous devez disposer d'au moins un fichier de configuration skaffold.yaml
valide.
Via Skaffold, vous pouvez également intégrer des outils tiers de gestion des fichiers manifestes, tels que Helm et Kustomize.
Cette manière d'utiliser Skaffold vous permet d'exploiter les fonctionnalités de ces outils pour afficher les fichiers manifestes. kubectl
reste le deployer de ces fichiers manifestes.
Je débute dans le déploiement sur Kubernetes
Skaffold vous permet de configurer un ensemble de base de fichiers manifestes pour tous vos déploiements. Vous pouvez ensuite utiliser le moteur de rendu Skaffold via Cloud Deploy pour afficher et déployer chaque fichier manifeste spécifique au déploiement à partir de l'un de ces fichiers manifestes de base.
Apprenez-en plus sur la gestion des fichiers manifestes, y compris des exemples d'utilisation de Skaffold et Cloud Deploy avec des outils de modélisation de fichiers manifestes courants tels que Helm et Kustomize.
Quels sont les éléments requis pour que Cloud Deploy fonctionne ?
Pour utiliser un pipeline de livraison Cloud Deploy de base, le fichier de configuration skaffold.yaml
doit au moins disposer de la configuration suivante:
Informations d'en-tête nécessaires à toutes les configurations
skaffold.yaml
:apiVersion: skaffold/v4beta7 kind: Config
Un bloc
manifests
pour GKE, GKE Enterprise ou Cloud Run répertoriant tous les fichiers manifestes Kubernetes bruts (sauf si vous utilisez un outil de gestion des fichiers manifestes tel que Helm ou Kustomize)Voici un exemple utilisant un fichier manifeste Kubernetes brut:
manifests: rawYaml: - deployment.yaml
Si vous prévoyez d'utiliser un moteur de rendu (tel que Helm ou Kustomize) pour afficher des fichiers manifestes, consultez les sections Ajouter la prise en charge de Helm à votre fichier skaffold.yaml et Ajouter la prise en charge de Kustomize à votre fichier skaffold.yaml pour savoir comment configurer Skaffold à l'utilisation de ces outils.
Pour obtenir des exemples Helm et Kustomize, consultez la page Gérer les fichiers manifestes.
Un stanza
deploy
, avecdeploy.kubectl
, pour le déploiement sur GKE ou GKE Enterprise, oudeploy.cloudrun
pour le déploiement sur Cloud Run.Pour les cibles GKE et GKE Enterprise:
deploy: kubectl: {}
Le bloc de déploiement déploie les fichiers manifestes de l'application fournis dans le bloc "Manifestes" de l'application.
Pour les cibles Cloud Run:
deploy: cloudrun: {}
Le bloc de déploiement déploie les fichiers manifestes de l'application fournis dans le bloc de fichiers manifestes.
Si vous utilisez des cibles personnalisées, votre skaffold.yaml
doit comporter l'en-tête (apiVersion
et kind:
), ainsi que les actions personnalisées qu'elle utilisera si le type de cible personnalisée ne fait pas déjà référence à une configuration Skaffold distante.
Créer un fichier skaffold.yaml
Cloud Deploy utilise Skaffold pour le rendu et le déploiement de vos applications.
Pour chaque version, vous devez fournir au moins un fichier skaffold.yaml
qui identifie les fichiers manifestes à utiliser. Consultez la section précédente pour savoir ce qui doit figurer dans ce fichier.
Demander à Cloud Deploy de générer votre skaffold.yaml
Si vous n'avez pas de fichier skaffold.yaml
, mais un seul fichier manifeste Kubernetes ou un seul fichier de définition de service Cloud Run, Cloud Deploy peut générer un fichier skaffold.yaml
pour vous .
Le fichier Skaffold généré sera disponible dans le répertoire de préproduction source Cloud Storage une fois la version terminée.
La commande suivante inclut l'option --from-k8s-manifest
en transmettant le fichier manifeste Kubernetes. Cloud Deploy utilise les informations du fichier manifeste pour générer le fichier skaffold.yaml
, qui est ensuite utilisé pour la version.
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
Pour générer le fichier skaffold.yaml
à partir d'un fichier YAML de service Cloud Run, utilisez la même commande, mais avec --from-run-manifest
au lieu de --from-k8s-manifest
.
L'utilisation de l'une de ces options avec l'option --skaffold-file
ou --source
génère une erreur.
Utiliser le fichier skaffold.yaml
généré
Le skaffold.yaml
généré convient à l'intégration, à l'apprentissage et à la démonstration de Cloud Deploy. Une fois que vous vous serez familiarisé avec Cloud Deploy et pour les charges de travail de production, vous voudrez peut-être une configuration Skaffold qui différencie vos cibles (à l'aide de profils Skaffold).
Lorsque vous utilisez le fichier skaffold.yaml
généré comme point de départ pour créer votre propre configuration Skaffold différenciée, veillez à utiliser le fichier dans l'archive de la source de rendu, et non le fichier rendu. La source de rendu peut être téléchargée depuis l'onglet Artefacts de la page **Détails de la version **.
Le
skaffold.yaml
généré est inclus dans la source de rendu stockée dans un bucket Cloud Storage.Pour afficher ce fichier, téléchargez le fichier
.tar.gz
et extrayez-le.Le
skaffold.yaml
affiché est disponible dans les artefacts cibles.Dans la section Artefacts cibles, cliquez sur Afficher les artefacts.
Utiliser Skaffold pour le développement local
L'un des points forts de Skaffold est que vous pouvez l'utiliser pour le développement local et pour le CI/CD.
En mode dev
, Skaffold surveille vos fichiers sources. Lorsqu'il détecte une modification, il recompile les images, effectue un nouveau test et redéploie les conteneurs dans un cluster Minikube (par exemple) sur votre machine locale.
Lorsque vous utilisez Skaffold de cette manière, vous pouvez utiliser les mêmes commandes localement que pour le déploiement à distance.
Si vous utilisez Skaffold pour le développement local, vous pouvez définir des profils Skaffold distincts pour vos cibles et un bloc de déploiement par défaut pour le développement local.
Lorsque vous arrêtez le mode dev
, Skaffold nettoie les artefacts déployés à partir du cluster.
Utiliser Skaffold pour la CI/CD
En plus d'utiliser Skaffold pour la compilation et le déploiement locaux continus, vous pouvez utiliser Skaffold pour la CI/CD. Cloud Deploy utilise les fonctionnalités CI/CD de Skaffold pour afficher et appliquer vos fichiers manifestes, ainsi que pour déployer votre application sur les cibles que vous avez définies, grâce à des images de conteneurs compilées à l'aide d'un outil de CI tel que Cloud Build et d'un registre d'images tel que Artifact Registry.
Afficher, déployer et appliquer
Skaffold sépare le processus de rendu du fichier manifeste du déploiement.
Cloud Deploy appelle skaffold render
pour afficher les fichiers manifestes, et skaffold apply
pour les appliquer à la cible.
Cette séparation entre l'affichage et l'application vous permet de capturer l'état déclaratif complet de votre application dans la configuration, afin qu'il puisse être appliqué de manière sécurisée et reproductible (par exemple, pour les rollbacks). Cette technique facilite également les approbations. Étant donné que les fichiers manifestes sont affichés pour toutes les cibles avant le premier déploiement, vous pouvez voir le rendu YAML qui sera appliqué à chaque cible.
Cloud Deploy ne permet pas d'utiliser d'autres utilisateurs pour déployer votre application. Vous pouvez toutefois utiliser des outils tels que Helm ou Kustomize pour le rendu.
Pour en savoir plus sur le déploiement de Cloud Deploy avec kubectl
en tant que déployeur, consultez la page Architecture du service Cloud Deploy.
À propos des profils Skaffold
Vous pouvez créer des profils Skaffold distincts, identifiés dans skaffold.yaml
, dans une stanza profiles:
.
Lorsque vous utilisez des profils Skaffold avec Cloud Deploy, vous pouvez créer des profils distincts pour l'ensemble ou une partie de vos cibles. Par exemple, des profils différents pour dev
, staging
et prod
.
Les profils ne sont pas nécessaires pour utiliser Skaffold dans Cloud Deploy, mais ils sont utiles pour définir des personnalisations de fichier manifeste parmi vos cibles, par exemple en utilisant différents fichiers kustomization.yaml
Kustomize par cible.
Ajouter la compatibilité avec Kustomize à votre skaffold.yaml
L'intégration de votre configuration Kustomize à votre configuration Cloud Deploy/Skaffold implique les opérations suivantes:
Incluez un fichier
kustomization.yaml
dans vos fichiers de configuration.Vous pouvez stocker vos fichiers de configuration dans un répertoire local ou dans un bucket Cloud Storage.
Dans votre fichier
skaffold.yaml
, créez un stanzadeploy
pour chaque profil.Vous pouvez également avoir un stanza
deploy
en dehors des profils définis, si vous n'utilisez pas de profils ou pour une configuration de déploiement par défaut non liée à un profil.Voici un exemple de configuration Skaffold qui affiche des stanzas
deploy
par profil et utilise une application exemple fictive appeléemy-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: {}
La configuration Skaffold présentée ici comporte des profils distincts pour les cibles
test
,staging
etprod
. Il affiche également un profil pour le développement local. Dans chaque profil, il y a une stanzadeploy.kustomize
avec un chemin qui pointe vers l'emplacement de la kustomisation à utiliser pour cette cible.
Ajouter la prise en charge de Helm à votre skaffold.yaml
Vous pouvez utiliser Helm pour effectuer le rendu de vos fichiers manifestes. Cloud Deploy n'utilise pas Helm pour déployer vos applications et n'accepte que kubectl
en tant que déployeur.
Pour utiliser Helm, vous avez besoin d'un ou plusieurs de vos charts Helm, stockés dans n'importe quel emplacement auquel vous pouvez faire référence dans votre skaffold.yaml
. Cet emplacement peut se trouver dans un système de fichiers, un dépôt, éventuellement avec votre dépôt skaffold.yaml
, ou dans un dépôt OCI (Open Container Initiative).
Pour utiliser un graphique Helm, vous devez ajouter un stanza helm
à votre fichier skaffold.yaml
.
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
La référence skaffold.yaml
indique ce qui est requis dans ce stanza helm
.
Fonctionnalités Skaffold non compatibles
Les fonctionnalités suivantes de Skaffold ne peuvent pas être utilisées dans Cloud Deploy:
-
Il n'est pas possible d'utiliser
--module=
pour sélectionner des modules spécifiques pourbuild
,render
,apply
, etc. Les modules statiques sont compatibles. Dans Helm, il n'existe pas de possibilité de créer un espace de noms.
Étapes suivantes
Consultez le site de Skaffold pour en savoir plus sur son fonctionnement et ses avantages.
Entraînez-vous à utiliser Cloud Deploy avec des profils Kustomize et Skaffold.
Découvrez comment Cloud Deploy sélectionne la version Skaffold à utiliser, en cas de modification de la version Skaffold et comment déterminer quelle version est utilisée.
Découvrez comment utiliser des profils Skaffold avec des outils avancés de gestion des fichiers manifestes tels que Helm, Kustomize et Kpt.