Déployer une application sur GKE sur AWS

Cette page fournit des instructions de démarrage rapide pour créer un cluster et un pool de nœuds, puis déployer un exemple d'application à l'aide de GKE sur AWS.

Guide de démarrage rapide pour votre cluster avec Terraform

Vous pouvez utiliser Terraform pour créer un cluster et un pool de nœuds. Avant de créer votre cluster, les scripts Terraform prépare également votre VPC AWS.

Pour en savoir plus sur l'utilisation de Terraform dans un environnement AWS, consultez la documentation de référence sur le cluster Terraform et la documentation de référence sur le pool de nœuds Terraform.

Après avoir créé un VPC et un cluster avec Terraform, passez à la section Déployer une application sur le cluster pour déployer un exemple d'application.

Guide de démarrage rapide pour votre cluster sans Terraform

Si vous préférez préparer votre VPC AWS et créer un cluster et un pool de nœuds sans Terraform, suivez ces instructions.

Avant de commencer

Avant de créer un cluster, vous devez remplir les conditions préalables. Vous devez notamment fournir les ressources suivantes :

  • Un VPC AWS sur lequel le cluster sera exécuté.
  • Jusqu'à trois sous-réseaux AWS pour les trois instances dupliquées du plan de contrôle. Chaque zone doit se trouver dans une zone de disponibilité AWS différente.
  • Rôle IAM AWS que GKE sur AWS assume lors de la gestion de votre cluster. Cela nécessite un ensemble spécifique d'autorisations IAM.
  • Clés CMK symétriques KMS pour le chiffrement au repos des données de cluster (etcd) et de la configuration.
  • Profil d'instance AWS IAM pour chaque instance dupliquée du plan de contrôle. Cela nécessite un ensemble spécifique d'autorisations IAM.
  • Une paire de clés SSH EC2 (facultatif) si vous avez besoin d'un accès SSH aux instances EC2 qui exécutent chaque instance dupliquée du plan de contrôle.

Vous êtes responsable de la création et de la gestion de ces ressources, qui peuvent être partagées entre tous vos clusters GKE sur AWS. Toutes les autres ressources AWS sous-jacentes à l'échelle d'un cluster sont gérées par GKE sur AWS.

Configurer les paramètres par défaut de gcloud CLI

Utilisez la CLI gcloud pour configurer les paramètres par défaut de votre projet par défaut et de votre région Google Cloud.

Votre projet est associé à un ID de projet en tant qu'identifiant unique. Au moment de la création d'un projet, vous pouvez utiliser l'ID de projet généré automatiquement ou créer le vôtre.

Votre région Google Cloud est un emplacement à partir duquel vos clusters seront gérés. Par exemple, us-west1. Pour en savoir plus, consultez la section Régions de gestion.

Lorsque vous configurez ces paramètres par défaut, vous n'avez pas besoin de les inclure lorsque vous exécutez Google Cloud CLI. Vous pouvez également spécifier des paramètres ou ignorer les paramètres par défaut en transmettant les options --project et --location à Google Cloud CLI.

Lorsque vous créez des ressources GKE sur AWS après avoir configuré votre projet et votre emplacement par défaut, ces ressources sont automatiquement créées dans ce projet et cet emplacement.

Pour définir des valeurs par défaut, procédez comme suit :

  1. Définissez le projet par défaut :

    gcloud config set project PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID du projet.

  2. Définissez l'emplacement de gestion par défaut :

    gcloud config set container_aws/location GOOGLE_CLOUD_LOCATION
    

    Remplacez GOOGLE_CLOUD_LOCATION par votre emplacement, par exemple us-west1.

Sélectionner des plages CIDR pour votre cluster

Kubernetes nécessite deux plages CIDR pour le cluster. Ces plages CIDR doivent être choisies de sorte qu'elles ne chevauchent pas les plages CIDR utilisées par vos sous-réseaux VPC. Elles doivent être suffisamment volumineuses pour la taille maximale attendue de votre cluster.

  • Plage CIDR d'adresses de pod : lorsqu'une ressource Pod est créée, une adresse IP de cette plage lui est attribuée. Exemple : plage 192.168.208.0/20

  • Plage CIDR d'adresses de service : lorsqu'une instance Service est créée, une adresse IP de cette plage lui est attribuée. Exemple : plage 192.168.224.0/20

Créer un cluster

Exécutez la commande suivante pour créer un cluster sous GKE sur AWS. Pour plus d'informations sur cette commande, y compris ses paramètres facultatifs, consultez la page de référence concernant gcloud container aws create.

gcloud container aws clusters create aws-cluster-0 \
    --cluster-version 1.28.7-gke.1700 \
    --aws-region AWS_REGION \
    --fleet-project FLEET_PROJECT_ID \
    --vpc-id VPC_ID \
    --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
    --pod-address-cidr-blocks POD_CIDR_BLOCK \
    --service-address-cidr-blocks SERVICE_CIDR_BLOCK \
    --role-arn API_ROLE_ARN \
    --iam-instance-profile CONTROL_PLANE_PROFILE \
    --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --tags "google:gkemulticloud:cluster=aws-cluster-0"

Remplacez les éléments suivants :

  • AWS_REGION par la région AWS dans laquelle créer le cluster.
  • FLEET_PROJECT_ID par le projet hôte du parc dans lequel le cluster sera enregistré.
  • VPC_ID : ID du VPC AWS pour ce cluster que vous avez configuré à l'étape Créer votre VPC.
  • CONTROL_PLANE_SUBNET_1, CONTROL_PLANE_SUBNET_2 ,CONTROL_PLANE_SUBNET_3 : ID de sous-réseau des trois instances de plan de contrôle de votre cluster que vous avez créées à l'étape Créer des sous-réseaux privés.
  • POD_CIDR_BLOCK : plage d'adresses CIDR pour les pods de votre cluster.
  • SERVICE_CIDR_BLOCK : plage d'adresses CIDR pour les services de votre cluster.
  • API_ROLE_ARN: ARN du rôle IAM pour le service multicloud GKE que vous avez créé à l'étape préalable Créer un rôle d'API multi-cloud GKE
  • CONTROL_PLANE_PROFILE : nom de profil de l'instance IAM associée au cluster que vous avez choisi à l'étape préalable Créer un rôle de plan de contrôle.
  • DB_KMS_KEY_ARN : nom de ressource Amazon (ARN) de l'une des clés KMS AWS que vous avez créées à l'étape préalable Créer une clé AWS KMS préalable
  • CONFIG_KMS_KEY_ARN : nom de ressource Amazon (ARN) de l'autre clé KMS AWS que vous avez créée à l'étape préalable Créer une clé KMS AWS

S'il est présent, le paramètre --tags applique le tag AWS donné à toutes les ressources AWS sous-jacentes gérées par GKE sur AWS. Cet exemple ajoute un tag aux nœuds de votre plan de contrôle avec le nom du cluster auquel ils appartiennent.

Créer un pool de nœuds

Exécutez la commande suivante pour créer un pool de nœuds :

gcloud container aws node-pools create pool-0 \
    --cluster aws-cluster-0 \
    --node-version 1.28.7-gke.1700 \
    --min-nodes 1 \
    --max-nodes 5 \
    --max-pods-per-node 110 \
    --root-volume-size 50 \
    --subnet-id NODEPOOL_SUBNET_ID \
    --iam-instance-profile NODEPOOL_PROFILE \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
    --ssh-ec2-key-pair EC2_KEY_PAIR \
    --tags "google:gkemulticloud:cluster=aws-cluster-0"

Remplacez les éléments suivants :

  • NODEPOOL_SUBNET_ID : ID de l'un des sous-réseaux privés que vous avez créés à l'étape préalable Créer des sous-réseaux privés.
  • NODEPOOL_PROFILE : nom de profil d'instance IAM pour les instances EC2 du pool de nœuds que vous avez choisi à l'étape préalable Créer un rôle IAM de pool de nœuds
  • CONFIG_KMS_KEY_ARN : nom ARN (Amazon Resource Name) de la clé KMS AWS servant à chiffrer les données utilisateur.
  • EC2_KEY_PAIR (facultatif) : nom de la paire de clés EC2 créée pour l'accès SSH (facultatif) que vous avez créée à l'étape préalable Créer une paire de clés SSH

Afficher l'état de votre cluster

Après avoir créé un cluster et un pool de nœuds, vous pouvez afficher son état en utilisant Google Cloud CLI ou la console Google Cloud. Pour afficher l'état du cluster, faites votre choix entre Google Cloud CLI et la console Google Cloud, puis procédez comme suit :

gcloud

Utilisez la commande gcloud container aws clusters describe pour obtenir les détails de votre cluster :

gcloud container aws clusters describe CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom de votre cluster.
  • GOOGLE_CLOUD_LOCATION : nom de l'emplacement Google Cloud qui gère le cluster

Console Google Cloud

  1. Dans la console Google Cloud, accédez à la page de présentation des clusters Google Kubernetes Engine.

    Accéder aux clusters GKE

  2. Vos clusters sont répertoriés par nom et emplacement.

  3. Cliquez sur le nom du cluster. Un panneau contenant des informations sur le cluster, y compris son état et ses fonctionnalités activées, s'affiche.

Obtenir des identifiants d'authentification pour le cluster

Après avoir créé votre cluster, vous devez obtenir des informations d'authentification pour interagir avec lui :

gcloud container aws clusters get-credentials aws-cluster-0

Cette commande configure kubectl pour l'accès au cluster que vous avez créé à l'aide de la passerelle Connect. Vous devez disposer d'au moins un pool de nœuds pour utiliser la passerelle Connect, car celle-ci repose sur l'agent Connect, qui s'exécute en tant que déploiement dans le cluster.

Déployer une application sur le cluster

Maintenant que vous avez créé un cluster, vous pouvez déployer une application conteneurisée dans celui-ci. Pour ce guide de démarrage rapide, vous pouvez déployer notre exemple d'application Web hello-app.

Vous utilisez des objets Kubernetes pour créer et gérer les ressources de votre cluster. Utilisez l'objet Déploiement pour déployer des applications sans état comme les serveurs Web. Les objets Service définissent les règles et les équilibreurs de charge permettant d'accéder à votre application via Internet.

Créer le déploiement

Pour exécuter hello-app dans votre cluster, vous devez déployer l'application en exécutant la commande suivante :

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Cette commande Kubernetes, kubectl create deployment, crée un déploiement nommé hello-server. Le pod de ce déploiement exécute l'image de conteneur hello-app.

Dans cette commande :

  • --image désigne une image de conteneur à déployer. Dans cet exemple, la commande extrait l'exemple d'image d'un dépôt Artifact Registry, us-docker.pkg.dev/google-samples/containers/gke/hello-app. :1.0 indique la version de l'image à extraire. Si vous ne spécifiez pas de version, l'image avec le tag latest est utilisée.

Exposer le déploiement

Après avoir déployé l'application, vous devez l'exposer sur Internet afin que les utilisateurs puissent y accéder. Vous pouvez exposer cette application en créant un objet Service, c'est-à-dire une ressource Kubernetes permettant d'exposer votre application au trafic externe.

Pour exposer votre application, exécutez la commande kubectl expose suivante :

kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

L'option --type LoadBalancer permet de créer un équilibreur de charge AWS pour votre conteneur. L'option --port initialise le port public 80 sur Internet et l'option --target-port achemine le trafic vers le port 8080 de l'application.

Les équilibreurs de charge sont facturés selon la tarification d'AWS relative aux équilibreurs de charge.

Inspecter et afficher l'application

  1. Inspectez les pods en cours d'exécution à l'aide de la commande kubectl get pods :

    kubectl get pods
    

    Vous devriez voir un pod hello-server s'exécuter sur votre cluster.

  2. Inspectez le service hello-server à l'aide de la commande kubectl get service :

    kubectl get service hello-server
    

    À partir du résultat de cette commande, copiez l'adresse IP externe du service depuis la colonne EXTERNAL-IP.

  3. Consultez l'application dans votre navigateur Web à l'aide de l'adresse IP externe avec le port exposé :

    http://EXTERNAL-IP
    

Vous venez de déployer une application Web conteneurisée sur GKE sur AWS.

Effectuer un nettoyage

  1. Supprimez le service et le déploiement de l'application :

    kubectl delete service hello-server
    kubectl delete deployment hello-server
    
  2. Supprimez votre pool de nœuds en exécutant la commande gcloud container aws node-pools delete :

    gcloud container aws node-pools delete pool-0 --cluster aws-cluster-0
    
  3. Supprimez votre cluster en exécutant la commande gcloud container aws clusters delete :

    gcloud container aws clusters delete aws-cluster-0
    

Étapes suivantes