Découvrez comment activer et configurer les instantanés de pods Google Kubernetes Engine (GKE) sur votre cluster, et comment configurer Cloud Storage pour stocker les instantanés.
Pour en savoir plus sur le fonctionnement des instantanés de pods, consultez À propos des instantanés de pods.
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 la
gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière
version en exécutant la
gcloud components updatecommande. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Activer les instantanés de pods
Pour activer les instantanés de pods, créez ou mettez à jour un cluster avec la fonctionnalité d'instantané de pods activée. Pour les clusters Standard, vous devez également créer ou mettre à jour un pool de nœuds à exécuter dans GKE Sandbox. GKE Sandbox est compatible par défaut avec les clusters Autopilot.
Pour activer les instantanés de pods sur un cluster, effectuez l'une des procédures suivantes, en fonction du mode de fonctionnement GKE que vous souhaitez utiliser :
Autopilot
Pour activer les instantanés de pods sur un nouveau cluster, exécutez la commande suivante :
gcloud container clusters create-auto CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATION \ --cluster-version=CLUSTER_VERSIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre clusterCLUSTER_VERSION: version de votre nouveau cluster, qui doit être 1.35.3-gke.1234000 ou ultérieure
Pour activer les instantanés de pods sur un cluster existant, procédez comme suit :
Mettez à niveau le cluster vers la version 1.35.3-gke.1234000 ou ultérieure :
gcloud container clusters upgrade CLUSTER_NAME \ --cluster-version=CLUSTER_VERSION \ --location=CONTROL_PLANE_LOCATIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre clusterCLUSTER_VERSION: version de votre nouveau cluster, qui doit être 1.35.3-gke.1234000 ou ultérieure
Activez les instantanés de pods sur votre cluster :
gcloud container clusters update CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATION
Les instantanés de pods avec le champ d'application
whole-podpar défaut ne sont pas compatibles avec les types de machines E2. Dans Autopilot, GKE peut utiliser par défaut des types de machines qui ne sont pas compatibles avec les instantanés de pods. Si vous utilisezwhole-poddes instantanés avec le champ d'application, pour vous assurer que vos charges de travail s'exécutent sur du matériel compatible, vous devez utiliser une ComputeClass personnalisée pour hiérarchiser les familles de machines compatibles. Les instantanés du système de fichiers (rootfs-only) sont compatibles avec les types de machines E2.
Pour créer et utiliser une ComputeClass personnalisée, procédez comme suit :
Enregistrez le manifeste suivant sous le nom
non-e2-class.yaml:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: non-e2-class spec: priorities: - machineFamily: n2 - machineFamily: c3 activeMigration: optimizeRulePriority: false whenUnsatisfiable: DoNotScaleUpAppliquez le fichier manifeste :
kubectl apply -f non-e2-class.yamlDans la spécification de votre pod, référencez la ComputeClass à l'aide du
cloud.google.com/compute-classsélecteur de nœuds :spec: nodeSelector: cloud.google.com/compute-class: non-e2-class ...
Standard
Pour activer les instantanés de pods sur un nouveau cluster, exécutez la commande suivante :
gcloud container clusters create CLUSTER_NAME \ --enable-pod-snapshots \ --cluster-version=CLUSTER_VERSION \ --workload-pool=PROJECT_ID.svc.id.goog \ --workload-metadata=GKE_METADATA \ --location=CONTROL_PLANE_LOCATIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCLUSTER_VERSION: version de votre nouveau cluster, qui doit être 1.35.3-gke.1234000 ou ultérieurePROJECT_ID: ID de votre projetCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre cluster
Pour activer les instantanés de pods sur un cluster existant, procédez comme suit :
Mettez à niveau le cluster vers la version 1.35.3-gke.1234000 ou ultérieure :
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=NODEPOOL_NAME \ --cluster-version=CLUSTER_VERSION \ --location=CONTROL_PLANE_LOCATIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterNODEPOOL_NAME: nom de votre pool de nœudsCLUSTER_VERSION: version de votre nouveau cluster, qui doit être 1.35.3-gke.1234000 ou ultérieureCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre cluster
Activez les instantanés de pods sur votre cluster :
gcloud beta container clusters update CLUSTER_NAME \ --enable-pod-snapshots \ --location=CONTROL_PLANE_LOCATIONRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre cluster
Pour exécuter des pods dans GKE Sandbox sur un cluster Standard, créez ou mettez à jour un pool de nœuds avec gVisor activé. Pour mettre à jour un pool de nœuds, utilisez l'indicateur --sandbox type=gvisor. Pour créer un pool de nœuds avec gVisor activé, exécutez la commande suivante :
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--node-version=NODE_VERSION \
--machine-type=MACHINE_TYPE \
--location=CONTROL_PLANE_LOCATION \
--image-type=cos_containerd \
--sandbox type=gvisor
Remplacez les variables suivantes :
NODE_POOL_NAME: nom de votre nouveau pool de nœuds.CLUSTER_NAME: nom du clusterNODE_VERSION: version à utiliser pour le pool de nœudsMACHINE_TYPE: le type de machine à utiliser pour les nœudsCONTROL_PLANE_LOCATION: l'emplacement du plan de contrôle de votre cluster
Pour en savoir plus sur l'utilisation de gVisor, consultez Isoler vos charges de travail à l'aide de GKE Sandbox.
Stocker les instantanés
Les instantanés de pods sont stockés dans un bucket Cloud Storage, qui contient l'état de la mémoire et (facultativement) du GPU. Les instantanés de pods nécessitent Workload Identity Federation for GKE afin d'activer et d'utiliser le compte de service du pod pour s'authentifier auprès de Cloud Storage.
Les instantanés de pods nécessitent la configuration suivante pour le bucket :
- Espaces de noms hiérarchiques : ils doivent être activés pour autoriser un plus grand nombre de requêtes par seconde en lecture et en écriture. Les espaces de noms hiérarchiques nécessitent également que l'accès uniforme au niveau du bucket soit activé.
- Suppression réversible : étant donné que les instantanés de pods utilisent des importations composites parallèles, vous devez désactiver les fonctionnalités de protection des données telles que la suppression réversible. Si ces fonctionnalités restent activées, les suppressions réversibles des objets temporaires peuvent augmenter considérablement votre facture de stockage.
- Emplacement : l'emplacement du bucket Cloud Storage doit être le même que celui du cluster GKE, car les performances peuvent être affectées si les instantanés sont transférés entre différentes régions.
Pour créer le bucket et les autorisations requis, procédez comme suit :
Créez un bucket Cloud Storage. La commande suivante crée un bucket avec la configuration requise :
gcloud storage buckets create "gs://BUCKET_NAME" \ --uniform-bucket-level-access \ --enable-hierarchical-namespace \ --soft-delete-duration=0d \ --location="LOCATION"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucketLOCATION: emplacement de votre bucket
Pour obtenir la liste complète des options de création de buckets, consultez les
buckets createoptions.
Accorder aux charges de travail l'accès au bucket Cloud Storage
Par défaut, GKE n'a pas accès à Cloud Storage. Pour lire et écrire des fichiers d'instantanés, vous devez accorder un rôle IAM contenant les autorisations correspondantes au Kubernetes ServiceAccount (KSA) utilisé par les pods de votre charge de travail, ou accorder des jetons éphémères.
Accorder des rôles à des Kubernetes ServiceAccounts spécifiques
Obtenez des identifiants pour pouvoir communiquer avec votre cluster à l'aide des commandes
kubectl:gcloud container clusters get-credentials "CLUSTER_NAME"Pour chaque pod, procédez comme suit :
Créez un KSA pour chaque pod :
kubectl create serviceaccount "KSA_NAME" \ --namespace "NAMESPACE"Remplacez les éléments suivants :
KSA_NAME: nom de votre KSANAMESPACE: espace de noms de vos pods
Accordez au KSA l'autorisation d'accéder au bucket :
gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="roles/storage.bucketViewer"gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="roles/storage.objectUser"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucketPROJECT_NUMBER: numéro de votre projetPROJECT_ID: ID de votre projetNAMESPACE: espace de noms de vos podsKSA_NAME: nom de votre KSA
Activer l'architecture mutualisée à l'aide de jetons éphémères
Au lieu d'accorder des autorisations à des KSA individuels, vous pouvez activer l'architecture mutualisée avec des jetons éphémères à champ d'application limité. Cette approche permet d'éviter le délai de propagation associé aux liaisons IAM manuelles.
Au lieu d'accorder des autorisations à chaque KSA, vous accordez une seule fois le rôle roles/storage.admin sur le bucket de stockage d'instantanés au compte de service de nœud GKE. Le compte de service de nœud crée ensuite des jetons éphémères à la demande pour des chemins d'accès spécifiques.
L'activation des jetons avec les instantanés de pods nécessite GKE version 1.35.3-gke.1737000 ou ultérieure.
Pour activer l'architecture mutualisée, procédez comme suit :
Pour accorder au compte de service de nœud l'autorisation d'accéder au bucket, exécutez la commande suivante :
gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com" \ --role="roles/storage.admin"Lorsque vous configurez le stockage pour les instantanés, définissez la valeur du champ
tokenSourcesurfederatedP4SA.
Accorder au contrôleur d'instantanés de pods l'accès au bucket Cloud Storage
Pour autoriser le contrôleur d'instantanés de pods à supprimer des instantanés dans le bucket Cloud Storage, le compte de service de l'agent de service GKE doit disposer du rôle Utilisateur d'objets Storage (roles/storage.objectUser) sur le projet. Accordez le rôle roles/storage.objectUser en exécutant la commande suivante :
gcloud projects add-iam-policy-binding "PROJECT_ID" \
--member="serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
--role="roles/storage.objectUser" \
--condition="expression=resource.name.startsWith(\"projects/_/buckets/BUCKET_NAME\"),title=restrict_to_bucket,description=Restricts access to one bucket only"
Remplacez les éléments suivants :
PROJECT_NUMBER: numéro de votre projetPROJECT_ID: ID de votre projetBUCKET_NAME: nom de votre bucket
(Facultatif) Créer des dossiers gérés pour le bucket Cloud Storage
La création de dossiers vous permet d'isoler les autorisations pour les instantanés de pods mutuellement non approuvés, ce qui est utile dans les cas d'utilisation mutualisés. Pour configurer des dossiers gérés, procédez comme suit :
Créez un rôle IAM personnalisé qui ne contient que les autorisations nécessaires pour les instantanés de pods :
gcloud iam roles create podSnapshotGcsReadWriter \ --project="PROJECT_ID" \ --permissions="storage.objects.get,storage.objects.create,storage.objects.delete,storage.folders.create"Accordez le rôle
roles/storage.bucketViewerà tous les KSA de l'espace de noms cible. Ce rôle permet aux KSA de lire les métadonnées du bucket, mais n'accorde pas d'autorisations de lecture ou d'écriture aux objets du bucket.gcloud storage buckets add-iam-policy-binding "gs://BUCKET_NAME" \ --member="principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/namespace/NAMESPACE" \ --role="roles/storage.bucketViewer"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucketPROJECT_NUMBER: numéro de votre projetPROJECT_ID: ID de votre projetNAMESPACE: espace de noms de vos pods
Pour chaque KSA qui doit stocker des instantanés de pods, procédez comme suit :
Créez un dossier géré pour le KSA :
gcloud storage managed-folders create "gs://BUCKET_NAME/FOLDER_PATH/"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucketFOLDER_PATH: chemin d'accès au dossier géré, par exemplemy-app-snapshots
Accordez au KSA le rôle personnalisé
podSnapshotGcsReadWritersur le dossier géré :gcloud storage managed-folders add-iam-policy-binding "gs://BUCKET_NAME/FOLDER_PATH/" \ --member="principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role="projects/PROJECT_ID/roles/podSnapshotGcsReadWriter"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucketFOLDER_PATH: chemin d'accès au dossier géré, par exemplemy-app-snapshotsPROJECT_NUMBER: numéro de votre projetPROJECT_ID: ID de votre projetNAMESPACE: espace de noms de vos podsKSA_NAME: nom de votre KSA
Configurer le stockage pour les instantanés
Pour spécifier où stocker les fichiers d'instantanés, créez une ressource PodSnapshotStorageConfig.
L'exemple suivant configure GKE pour stocker les instantanés de pods dans le chemin d'accès
FOLDER_PATH/à l'intérieur du bucket Cloud Storage BUCKET_NAME. Enregistrez le manifeste suivant sous le nomexample-pod-snapshot-storage-config:apiVersion: podsnapshot.gke.io/v1 kind: PodSnapshotStorageConfig metadata: name: example-pod-snapshot-storage-config spec: snapshotStorageConfig: gcs: bucket: "BUCKET_NAME" path: "FOLDER_PATH" tokenSource: "TOKEN_SOURCE"Remplacez les éléments suivants :
BUCKET_NAME: nom de votre bucket Cloud StorageFOLDER_PATH: chemin d'accès au dossier géré Cloud StorageTOKEN_SOURCE: fournisseur d'identité pour l'accès UtilisezpodKSA(par défaut) oufederatedP4SApour l'architecture mutualisée.
Appliquez le fichier manifeste :
kubectl apply -f example-pod-snapshot-storage-config.yaml
Étape suivante
- Découvrez comment déclencher un instantané de pod.