Cette page décrit la procédure de configuration d'un déploiement de NGINX avec Application Delivery.
Le déploiement s'exécute dans deux environnements, staging
et prod
. L'environnement prod
utilise une configuration standard, tandis que l'environnement staging
utilise une configuration légèrement modifiée.
Exigences
Pour suivre ce tutoriel, vous devez disposer des éléments suivants :
- Git 2.19.2 ou version ultérieure installée localement.
- Un compte GitHub ou GitLab disposant des autorisations nécessaires pour créer un dépôt privé. Application Delivery n'est compatible qu'avec les dépôts GitHub et GitLab.
- Un cluster exécutant GKE version 1.15 ou ultérieure.
- Un utilisateur disposant de droits clusterAdmin
- Kustomize installé en local (Vous pouvez suivre le guide d'installation)
- Si vous souhaitez valider vos fichiers de configuration Kubernetes dans le dépôt de déploiement, vous devez installer Docker.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI.
- Ajoutez des clés SSH à votre compte GitHub ou GitLab.
Testez vos clés avec
ssh
:GitHub
sh ssh -T git@github.com
GitLab
sh ssh -T git@gitlab.com
Il se peut que vous soyez invité à confirmer les détails de connexion ou la phrase secrète de votre clé. Si la connexion aboutit, un message s'affiche sur le terminal.
Configurer Application Delivery
Pour utiliser Application Delivery, vous devez procéder comme suit :
- Créez un nouveau cluster sur lequel Application Delivery est activé, ou activez-le sur un cluster GKE existant exécutant la version 1.15 ou ultérieure.
- Installez
appctl
, l'outil de ligne de commande d'Application Delivery.
Créer un cluster avec Application Delivery
Vous pouvez créer un cluster sur lequel Application Delivery est activé à l'aide de gcloud CLI ou de la console Google Cloud.
gcloud
Créez un cluster :
gcloud beta container clusters create CLUSTER_NAME \
--cluster-version CLUSTER_VERSION\
--addons ApplicationManager
Remplacez les éléments suivants :
CLUSTER_NAME
: nom de votre nouveau clusterCLUSTER_VERSION
: version de votre nouveau cluster Doit être GKE 1.15 ou une version ultérieure.
Console
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Cliquez sur add_box Créer.
Dans la section Standard, cliquez sur Configurer.
Spécifiez le nom du cluster.
Choisissez une version du plan de contrôle 1.15.x ou ultérieure.
Configurez le cluster selon vos besoins.
Dans le volet de navigation, sous Cluster, cliquez sur Fonctionnalités.
Cochez la case Activer le gestionnaire d'applications.
Cliquez sur Créer.
Activer Application Delivery sur un cluster existant
Vous pouvez activer Application Delivery sur un cluster existant à l'aide de gcloud CLI ou de la console Google Cloud.
gcloud
Pour activer Application Delivery sur un cluster existant, exécutez la commande suivante :
gcloud beta container clusters update CLUSTER_NAME \
--update-addons ApplicationManager=ENABLED
Remplacez CLUSTER_NAME
par le nom de votre cluster.
Console
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Sous Fonctionnalités, à côté du champ Gestionnaire d'applications, cliquez sur edit Modifier le gestionnaire d'applications.
Cochez la case Activer le gestionnaire d'applications.
Cliquez sur Save Changes (Enregistrer les modifications).
Confirmer l'installation
Pour vérifier l'état de l'installation d'Application Delivery, procédez comme suit :
Vérifiez l'état du déploiement :
kubectl get deployment application-controller-manager -n application-system
Le résultat ressemble à ce qui suit :
NAME READY UP-TO-DATE AVAILABLE AGE application-controller-manager 2/2 2 2 1h
Deux pods doivent être disponibles dans ce déploiement
application-controller-manager
.Vérifiez l'état de StatefulSet :
kubectl get statefulset kalm-controller-manager -n kalm-system
Le résultat ressemble à ce qui suit :
NAME READY AGE kalm-controller-manager 1/1 1h
Un pod doit être prêt dans cet objet StatefulSet
kalm-controller-manager
.
Installer appctl
Pour installer l'outil de ligne de commande appctl
d'Application Delivery, utilisez gCloud CLI pour installer pkg
.
gcloud components install pkg
Après avoir activé Application Delivery sur un cluster et installé pkg
, vous pouvez déployer votre première application.
Déployer une application
Pour déployer une application, procédez comme suit :
- Créez des dépôts Git ou initialisez des dépôts existants
- Créez une configuration de base
- Créer un ou plusieurs environnements pour le déploiement
- (Facultatif) Appliquer des superpositions de configuration aux environnements du dépôt d'application
- Créer une version finale sous la forme d'une demande d'extraction ou de fusion
- Déployer la version
Créer des dépôts
Créez des dépôts pour Application Delivery sur GitHub ou GitLab avec appctl
.
- Accédez au répertoire dans lequel vous souhaitez créer le répertoire de l'application.
Créez vos dépôts Application Delivery à l'aide de
appctl
.GitHub
Exécutez la commande suivante :
appctl init APP_NAME \ --app-config-repo=github.com/USERNAME/APP_NAME
Remplacez les éléments suivants :
APP_NAME
: nom de votre application.USERNAME
: votre nom d'utilisateur GitHub.
Par exemple, si votre nom d'utilisateur GitHub est
octocat
et que vous souhaitez créer une application nomméemyapp
, exécutez la commande suivante :appctl init myapp \ --app-config-repo=github.com/octocat/myapp
GitLab
Exécutez la commande suivante :
appctl init APP_NAME \ --app-config-repo=gitlab.com/USERNAME/APP_NAME
Remplacez les éléments suivants :
APP_NAME
: nom de votre application.USERNAME
: votre nom d'utilisateur GitLab.
Par exemple, si votre nom d'utilisateur GitLab est
alice
et que vous souhaitez créer une application nomméemyapp
, exécutez la commande suivante :appctl init myapp \ --app-config-repo=gitlab.com/alice/myapp
appctl
vous invite à confirmer vos nouveaux dépôts privés.
appctl
crée deux dépôts Git privés distants :
- Le dépôt d'application
github.com/USERNAME/APP_NAME
. Ce dépôt est cloné dans le répertoire actif. - Le dépôt de déploiement
github.com/USERNAME/APP_NAME-deployment
. Le dépôt de déploiement local est stocké dans./APP_NAME/.deployment
.
Pour en savoir plus sur le contenu et la structure de ces dépôts, consultez le guide conceptuel Application Delivery.
Initialiser les dépôts existants
Si vous disposez de dépôts existants, vous pouvez les initialiser pour Application Delivery sur GitHub ou GitLab à l'aide de appctl
.
Accédez au répertoire dans lequel vous souhaitez créer le répertoire de l'application.
Exécutez la commande
appctl init
, qui crée un répertoire nomméAPP_NAME
et clone votre dépôt.La commande
appctl init
initialise une couche de base Kustomize dans les fichiers de configuration stockés dans le répertoire./config
du dépôt. Vous pouvez spécifier un chemin de configuration différent avec l'option--config-path
.Par défaut,
appctl init
utilisegithub.com/USERNAME/APP_NAME-deployment
comme URL du dépôt de déploiement. Vous pouvez utiliser l'option--deployment-repo
pour spécifier une autre URL. Si le dépôt de déploiement n'existe pas, la commandeappctl
en crée un.GitHub
appctl init APP_NAME \ --app-config-repo=github.com/USERNAME/APP_NAME \ [--config-path=CONFIG_PATH]
Remplacez les éléments suivants :
APP_NAME
: nom de votre application.USERNAME
: votre nom d'utilisateur GitHub.CONFIG_PATH
: chemin d'accès facultatif au répertoire de configuration de votre dépôt. Si aucune valeur n'est spécifiée, la valeur par défaut est./config
.
Par exemple, si le dépôt de configuration d'application existant est
https://github.com/octocat/myapp
et que vous pensez que le dépôt de déploiement serahttps://github.com/octocat/myapp-deploy
, exécutez la commande suivante :appctl init myapp \ --app-config-repo=github.com/octocat/myapp
GitLab
appctl init APP_NAME \ --app-config-repo=gitlab.com/USERNAME/APP_NAME \ [--config-path=CONFIG_PATH]
Remplacez les éléments suivants :
APP_NAME
: nom de votre application.USERNAME
: votre nom d'utilisateur GitLab.CONFIG_PATH
: chemin d'accès facultatif au répertoire de configuration de votre dépôt. Si aucune valeur n'est spécifiée, la valeur par défaut est./config
.
Par exemple, si le dépôt de configuration d'application existant est
gitlab.com/alice/myapp
, exécutez la commande suivante :appctl init myapp --app-config-repo=gitlab.com/alice/myapp
Créer une configuration de base
Remplacez votre répertoire de travail par le dépôt d'application.
Créez la configuration de votre charge de travail Kubernetes. Il peut s'agir de n'importe quel déploiement Kubernetes valide.
La configuration suivante définit une application nommée
nginx
, qui déploie trois instances dupliquées du conteneurnginx
. Copiez la configuration dans le fichierconfig/base/myapp.yaml
. Si vous souhaitez activer un équilibreur de charge, annulez la mise en commentaire de la lignetype: LoadBalancer
.#myapp/config/base/myapp.yaml apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: # if your cluster supports it, uncomment the following to automatically create # an external load-balanced IP for the frontend service. # type: LoadBalancer ports: - port: 80 selector: app: nginx --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
Configurez Application Delivery pour appliquer cette configuration de base. Collez le code suivant dans le fichier
config/base/kustomization.yaml
.#config/base/kustomization.yaml resources: - myapp.yaml
Tester et transférer la configuration
Dans le répertoire de votre dépôt d'application, testez votre configuration à l'aide de
kustomize build
:kustomize build config/base/
Si votre configuration est valide,
kustomize
affiche le code YAML qui sera déployé dans votre cluster lors de son application.Une fois le code YAML validé, créez et transférez un commit dans le dépôt d'application :
git add . git commit -m "Creating APP_NAME" git push origin master
Ajouter un environnement de version
Application Delivery déploie votre application dans des environnements. Ajoutez des environnements pour vos versions à l'aide de appctl
.
Accédez au répertoire racine du dépôt d'application.
Créez l'environnement à l'aide de
appctl
:appctl env add ENVIRONMENT_NAME \ --cluster=CLUSTER_NAME
Remplacez les éléments suivants :
ENVIRONMENT_NAME
: nom de votre nouvel environnementCLUSTER_NAME
: nom du cluster
appctl
crée un commit Git contenant une configuration Kustomize échafaudée.Vous pouvez spécifier le nom de l'espace de noms pour un environnement de version de cette application à l'aide de
--namespace
. Si ce n'est pas le cas, le nom de l'espace de noms par défaut estAPP_NAME-ENVIRONMENT_NAME
:Par exemple, pour ajouter les environnements
staging
etprod
au clusterapplication-cluster
à l'aide du nom de l'espace de noms par défaut, exécutez la commande suivante :appctl env add staging --cluster=application-cluster appctl env add prod --cluster=application-cluster
Pour ajouter l'environnement
test
de l'espace de nomstest
au clusterapplication-cluster
, exécutez la commande suivante :appctl env add test --cluster=application-cluster --namespace=test
Lorsque vous ajoutez un environnement, vous devez déterminer si des demandes d'extraction et des révisions de code sont nécessaires dans le dépôt de déploiement correspondant à cet environnement. Les demandes d'extraction sont créées par défaut. Si l'environnement n'est pas critique pour la production et que l'examen du code n'est pas nécessaire, vous pouvez ignorer la création de demandes d'extraction avec
--review-required=false
.Par exemple, pour ajouter l'environnement
test
, qui ne nécessite pas de demandes d'extraction, exécutez la commande suivante :appctl env add test \ --cluster=application-cluster \ --review-required=false
Vous pouvez éventuellement afficher les modifications apportées par Application Delivery dans votre dépôt Git à l'aide de
git log
:git log -p *
Transférez la configuration dans le dépôt d'application :
git push origin master
Facultatif : Vérifier le dépôt du déploiement
Ouvrez la page GitHub ou GitLab de votre dépôt de déploiement. Par exemple, si votre nom d'utilisateur GitHub est octocat
et que vous avez créé une application nommée myapp
, l'URL est https://github.com/octocat/myapp-deployment
. Sur cette page, vous pouvez consulter les branches créées pour chaque environnement.
Déployer un environnement
Pour déployer un environnement avec Application Delivery, procédez comme suit :
Créez une version à l'aide de
git tag
, puis transférez ce tag :git tag VERSION git push origin VERSION
Remplacez
VERSION
par le numéro de version de votre application.Par exemple, pour transférer la version
v0.1.0
, exécutez les commandes suivantes :git tag v0.1.0 git push origin v0.1.0 ```
Utilisez
appctl prepare
pour désigner la version active avec tag et générer une demande d'extraction dans le dépôt de déploiement pour examen.appctl prepare ENVIRONMENT_NAME
Par exemple, pour utiliser l'environnement
staging
, exécutez la commande suivante :appctl prepare staging \ --validate=true
Cette commande déclenche la fonction de validation kpt
gcr.io/kustomize-functions/example-validator
pour valider la modification transmise au dépôt de déploiement.kpt est installé à l'aide de la commande
gcloud components install pkg
. Cette fonction de validation exécute kubeval en arrière-plan, ce qui valide les fichiers de configuration Kubernetes à l'aide de schémas de la spécification OpenAPI de Kubernetes.Pour exécuter
kpt prepare staging --validate
, vous devez installer Docker sur votre machine.L'option
--validate
est désactivée par défaut.Si
appctl
a effectué le commit dans le dépôt de déploiement, il imprime une URL dans une demande d'extraction, comme suit :Created a "Pull Request": "https://github.com/octocat/myapp-deployment/pull/[Pull_Request_ID]"
Vérifiez et approuvez la demande d'extraction à l'aide de GitHub ou de GitLab.
Une fois la demande d'extraction approuvée, terminez le déploiement à l'aide de
appctl apply
:appctl apply ENVIRONMENT_NAME
Remplacez
ENVIRONMENT_NAME
par le nom de votre environnement.Par exemple, pour déployer des modifications dans l'environnement
staging
, exécutez la commande suivante :appctl apply staging
Vérifiez que votre application fonctionne avec
kubectl
ou depuis la console Google Cloud.kubectl
Utilisez
kubectl describe
pour afficher l'état de votre application :kubectl get releasetracks.app.gke.io APP_NAME \ --n NAMESPACE \ -w
Remplacez les éléments suivants :
APP_NAME
: nom du dépôt de votre applicationNAMESPACE
: nom de l'espace de noms que vous avez spécifié lors de la création de l'environnement. Si vous n'avez pas spécifié de nom d'espace de noms, la valeur par défaut estAPP_NAME-ENVIRONMENT_NAME
.
Par exemple, pour vérifier l'état de l'environnement
staging
de l'application nomméemyapp
, exécutez la commande suivante :kubectl get releasetracks.app.gke.io myapp -n myapp-staging
Pour vérifier l'état de l'environnement
test
ajouté précédemment parenv add --namespace test
, exécutez la commande suivante :kubectl get releasetracks.app.gke.io myapp -n test
Console
Pour afficher les informations concernant l'état et la version des applications déployées avec Application Delivery, consultez la page Applications de GKE sur la console Google Cloud.
Promouvoir une version
Pour promouvoir la version finale d'un environnement sur un autre, exécutez la commande suivante :
appctl prepare TARGET_ENVIRONMENT \ --from-env=SOURCE_ENVIRONMENT
Remplacez les éléments suivants :
TARGET_ENVIRONMENT
: nom de l'environnement dans lequel vous souhaitez déployer la version finaleSOURCE_ENVIRONMENT
: nom de l'environnement actuel
Par exemple, pour promouvoir l'environnement
staging
surprod
, exécutez la commande suivante :appctl prepare prod --from-env=staging
Vérifiez et approuvez la demande d'extraction à l'aide de GitHub ou de GitLab.
Pour déployer la version finale dans l'environnement cible, exécutez la commande suivante :
appctl apply TARGET_ENVIRONMENT
Par exemple, pour la déployer dans l'environnement
prod
, exécutez la commande suivante :appctl apply prod
Afficher les environnements dans la console Google Cloud
Une fois l'application d'un environnement déployée, vous pouvez l'afficher sur la page des applications GKE.
Cette page contient une liste d'applications avec leurs environnements indiqués entre parenthèses. Voici une capture d'écran d'une application myapp
avec deux environnements staging
et prod
. L'espace de noms, le cluster et la version de chaque environnement sont également affichés sur cette page.
Pour afficher les détails de l'application, tels que le tag git, les composants et la liste des environnements, cliquez sur le nom de l'application. La capture d'écran suivante montre les détails de myapp
.
Modifier la configuration d'un environnement
Dans cette section, nous partons du principe que vous disposez d'un environnement staging
configuré comme dans les étapes précédentes. Vous devrez peut-être adapter ces instructions à votre utilisation.
Dans cette section, vous allez modifier les paramètres de l'environnement staging
à l'aide d'une superposition Kustomize.
Après avoir effectué les modifications, vous allez les transférer et y ajouter des tags dans Git. Application Delivery mettra à jour votre cluster.
Créez un fichier nommé
config/envs/staging/patch-replicas.yaml
et copiez-y le texte suivant. Cela permet de mettre à jour la configuration dans l'environnementstaging
afin d'exécuter une instance dupliquée au lieu de trois.#config/envs/staging/patch-replicas.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1
Modifiez le fichier
config/envs/staging/kustomization.yaml
et ajoutezpatch-replicas.yaml
à une nouvelle collection nomméepatchesStrategicMerge
.#config/envs/staging/kustomization.yaml namespace: myapp-staging bases: - ../../base patchesStrategicMerge: - patch-replicas.yaml
Vous pouvez également ajouter des annotations spécifiques à l'environnement dans cette superposition. L'exemple suivant ajoute une annotation nommée
oncall-team
pour ajouter toutes les ressources de cet environnement. Pour en savoir plus, consultez la page Kustomize file fields.#config/envs/staging/kustomization.yaml #Don't change the namespace field namespace: myapp-staging bases: - ../../base patchesStrategicMerge: - patch-replicas.yaml commonAnnotations: oncall-team: staging-oncall@foo.bar
Testez votre configuration à l'aide de
kustomize build
:kustomize build config/envs/staging/
Ajoutez et validez vos modifications.
git add . git commit -m "<var>COMMIT_MESSAGE</var>" git push origin master
Remplacez
COMMIT_MESSAGE
par un message décrivant vos modifications.Créez une version à l'aide de
git tag
, puis transférez-la.git tag VERSION git push origin VERSION
Remplacez
VERSION
par le numéro de version souhaité.Utilisez
appctl prepare
pour générer une demande d'extraction dans le dépôt de déploiement pour examen :appctl prepare ENVIRONMENT_NAME
Suivez le lien pour créer une demande d'extraction GitHub ou GitLab.
Examinez le contenu de la requête d'extraction. Application Delivery modifie une ligne qui définit la valeur de
replicas
sur1
.Approuvez la demande d'extraction avec GitHub ou GitLab.
Utilisez
appctl apply
pour appliquer les modifications :appctl apply staging
Effectuer un rollback des modifications de la configuration
Pour effectuer un rollback vers une version précédente, exécutez la commande suivante :
appctl apply TARGET_ENVIRONMENT \
--from-tag GIT_TAG
Remplacez les éléments suivants :
TARGET_ENVIRONMENT
: nom de l'environnement dans lequel vous souhaitez déployer la version.GIT_TAG
: nom du tag pour la version
Utiliser appctl
dans les scripts
L'outil appctl
est interactif et attend une entrée utilisateur par défaut. Si vous souhaitez exécuter appctl
dans un script, un conteneur ou des pipelines, définissez la variable d'environnement APPCTL_INTERACTIVE
sur false
.
Par exemple, dans l'interface système bash, exécutez la commande suivante :
export APPCTL_INTERACTIVE=false
Vous pouvez obtenir des informations sur des commandes appctl
spécifiques à l'aide de la commande appctl help command
. Par exemple, pour obtenir de l'aide sur appctl prepare
, exécutez appctl help prepare
.
Désinstaller le gestionnaire d'applications
Pour supprimer l'application exécutée dans votre cluster, vous devez supprimer tous les espaces de noms créés avec de nouveaux environnements.
Répétez les commandes suivantes pour tous vos environnements et clusters :
Basculez vers le cluster d'un environnement donné :
kubectl config use-context ENVIRONMENT_CLUSTER_NAME
Remplacez
ENVIRONMENT_CLUSTER_NAME
par le nom du cluster dans l'environnement sélectionné.Supprimez l'espace de noms dans lequel l'application de cet environnement est exécutée :
kubectl delete ns NAMESPACE
Remplacez
NAMESPACE
par le nom de l'espace de noms que vous souhaitez supprimer. La valeur par défaut estAPP_NAME-ENVIRONMENT_NAME
.Dans GitHub ou GitLab, supprimez les deux dépôts Git créés par
appctl
.Supprimez le répertoire d'application local :
rm -rf myapp/
Vous pouvez désactiver Application Delivery dans votre cluster à partir de
gcloud
ou de Google Cloud Console :gcloud
gcloud beta container clusters update CLUSTER_NAME \ --update-addons ApplicationManager=DISABLED
Console
Accédez à la page Google Kubernetes Engine dans Google Cloud Console.
Dans la liste des clusters, cliquez sur le nom du cluster que vous souhaitez modifier.
Sous Fonctionnalités, à côté du champ Gestionnaire d'applications, cliquez sur edit Modifier le gestionnaire d'applications.
Décochez la case Activer le gestionnaire d'applications.
Cliquez sur Save Changes (Enregistrer les modifications).
Étape suivante
Apprenez-en plus sur Kustomize.