Modifier des ressources pendant une restauration (obsolète)


Cette page explique comment modifier des ressources Kubernetes pendant le processus de restauration.

Présentation

Plusieurs raisons peuvent vous pousser à modifier des ressources Kubernetes dans le cadre du processus de restauration. Exemple :

  • Vous souhaitez provisionner des PVC à l'aide d'un autre approvisionneur de stockage (par exemple, passer du pilote "in-tree" de Kubernetes au pilote CSI).

  • Vous souhaitez restaurer un espace de noms sous un autre nom.

  • Vous souhaitez modifier le nombre d'instances répliquées dans une installation exécutée en tant que Deployment ou StatefulSet.

La Sauvegarde pour GKE fournit pour ce faire un mécanisme, appelé règles de substitution, que vous pouvez éventuellement définir dans le cadre d'un RestorePlan.

Une règle de substitution est un ensemble de critères de correspondance, associés à une valeur de champ de remplacement. Vous pouvez utiliser des règles de substitution dans le processus de restauration comme suit :

  1. Tout d'abord, Sauvegarde pour GKE calcule l'ensemble des ressources à restaurer, en fonction des paramètres de champ d'application figurant dans la configuration de restauration (par exemple, les espaces de noms, les groupes/genres, etc.).

  2. La fonctionnalité Sauvegarde pour GKE évalue chaque ressource sélectionnée pour la restauration, en la soumettant à la liste numérotée des règles de substitution. Si une règle correspond à la ressource, la ressource est mise à jour avec la valeur de champ substituée. Toutes les ressources sont mises en correspondance avec toutes les règles, et une même ressource peut potentiellement se voir appliquer plusieurs substitutions.

  3. Une fois toutes les règles évaluées, Sauvegarde pour GKE crée l'ensemble de ressources résultant dans le cluster cible.

Paramètres des règles de substitution

Pour définir une règle de substitution, vous devez fournir les paramètres suivants :

Paramètre Obligatoire Description
targetNamespaces facultatif Il s'agit d'une liste d'espaces de noms. Pour qu'une ressource corresponde à cette règle, il doit s'agir d'une ressource associée à un espace de noms, et celui-ci doit correspondre à l'un des espaces de noms donnés :
  • Si rien n'est spécifié pour ce paramètre, alors toutes les ressources correspondent (toutes les ressources sont des ressources associées à un espace de noms et des ressources à l'échelle d'un cluster).
  • Si une chaîne vide ("") est spécifiée, seules les ressources à l'échelle d'un cluster vont correspondre. Dans la console Google Cloud, vous pouvez cocher Exclure les ressources en espace de noms pour définir la liste sur une seule chaîne vide.
targetGroupKinds facultatif Il s'agit d'une liste des tuples de genre/groupe de ressources Kubernetes :
  • Si rien n'est spécifié pour ce paramètre, alors toutes les ressources correspondent (aucune restriction sur la base du groupe/du genre).
  • Si un ou plusieurs groupes/genres sont spécifiés, les ressources doivent correspondre à l'un d'entre eux pour correspondre à la règle.
targetJsonPath obligatoire Il s'agit d'une expression JSONPath mise en correspondance avec les ressources. Notez que cette règle définit une correspondance non seulement avec la ressource, mais également avec un attribut spécifique de la ressource.
originalValuePattern facultatif Il s'agit d'une expression régulière mise en correspondance avec la valeur actuelle de l'attribut. Si ce paramètre n'est pas spécifié, l'attribut va toujours correspondre.
newValue obligatoire Il s'agit de la nouvelle valeur à utiliser pour la valeur d'attribut mise en correspondance.

Pour en savoir plus sur la définition des règles de substitution dans la console Google Cloud, consultez la page Planifier un ensemble de restaurations.

Pour définir des règles de substitution via gcloud CLI, créez un fichier contenant un tableau YAML de règles de substitution et incluez le paramètre --substitution-rules-file= à la commande gcloud beta container backup-restore restore-plans create.

Exemples de règles de substitution

Les exemples suivants sont fournis au format YAML, utilisé par gcloud CLI.

Modifier la ressource StorageClass

Dans cet exemple, nous modifions la ressource StorageClass de toutes les ressources PersistentVolumeClaim restaurées, en la faisant passer de standard à premium-rwo :

substitutionRules:
- targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo

Cloner un espace de noms

Dans cet exemple, nous clonons un espace de noms de sa version alpha vers sa version bêta : il s'agit de créer un espace de noms "beta" et de restaurer toutes les ressources de la version "alpha" dans le nouvel espace de noms "beta". Notez que cet exemple nécessite deux règles de substitution : une pour l'espace de noms lui-même et une pour les ressources qu'il contient.

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta

Modifier la ressource StorageClass et le nombre d'instances répliquées dans un espace de noms cloné

Dans cet exemple, nous clonons un espace de noms, puis appliquons un ensemble de modifications aux ressources du nouvel espace de noms :

  • Modifiez la ressource StorageClass sur les PVC de standard en premium-rwo.

  • Modifiez le nombre d'instances répliquées sur les déploiements de 7 en 3.

substitutionRules:
- targetNamespaces:
  - ''
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: Namespace
  targetJsonPath: "{.metadata.name}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - alpha
  targetJsonPath: "{.metadata.namespace}"
  originalValuePattern: alpha
  newValue: beta
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: ''
    resourceKind: PersistentVolumeClaim
  targetJsonPath: "{..storageClassName}"
  originalValuePattern: standard
  newValue: premium-rwo
- targetNamespaces:
  - beta
  targetGroupKinds:
  - resourceGroup: apps
    resourceKind: Deployment
  targetJsonPath: "{$.spec.replicas}"
  originalValuePattern: '7'
  newValue: '3'