Modificar recursos durante a restauração (descontinuado)

Nesta página, descrevemos como fazer modificações em recursos do Kubernetes durante o processo de restauração.

Visão geral

Há vários motivos para modificar recursos do Kubernetes como parte do processo de restauração. Por exemplo:

  • Talvez você precise provisionar PVCs usando um provisionador de armazenamento diferente (por exemplo, migrar do driver na árvore do Kubernetes para o driver CSI).

  • Talvez você precise restaurar um namespace com um nome diferente.

  • Talvez você precise alterar uma contagem de réplicas em uma implantação ou StatefulSet.

Para fazer isso, o Backup para GKE fornece um mecanismo chamado de regras de substituição, que podem ser definidas como parte de um RestorePlan.

Uma regra de substituição é um conjunto de critérios correspondentes especificados com um valor de campo de substituição. É possível usar regras de substituição no processo de restauração da seguinte forma:

  1. Primeiro, o Backup para GKE calcula o conjunto de recursos a serem restaurados, com base nos parâmetros de escopo na configuração de restauração (por exemplo: namespaces, grupos/tipos etc.)

  2. O Backup para GKE avalia cada recurso selecionado para restauração com a lista ordenada de regras de substituição. Se uma regra corresponder ao recurso, o recurso será atualizado com o valor do campo substituído. É feita a correspondência entre todos os recursos e todas as regras, e é possível que o mesmo recurso tenha várias substituições realizadas contra ele.

  3. Depois que todas as regras são avaliadas, o Backup para GKE cria o conjunto resultante de recursos no cluster de destino.

Parâmetros da regra de substituição

Para definir uma regra de substituição, forneça os seguintes parâmetros:

Parâmetro Obrigatório Descrição
targetNamespaces opcional Essa é uma lista de namespaces. Para que um recurso corresponda a essa regra, ele precisa ser um recurso com namespace e ter um dos namespaces fornecidos:
  • Se nada for fornecido para esse parâmetro, todos os recursos serão correspondentes (todos os recursos com namespace e com escopo de cluster).
  • Se uma string vazia ("") for fornecida, ela corresponderá apenas a recursos com escopo de cluster. No console do Google Cloud , é possível marcar Excluir recursos com namespace para definir a lista como uma única string vazia.
targetGroupKinds opcional Essa é uma lista de tuplas de grupo/tipo de recurso do Kubernetes:
  • Se nada for fornecido para esse parâmetro, todos os recursos serão correspondentes (sem restrições baseadas no grupo/tipo).
  • Se um ou mais grupos/tipos forem fornecidos, os recursos precisarão corresponder a um deles para corresponder à regra.
targetJsonPath obrigatório Essa é uma expressão JSONPath correspondente a recursos. Essa regra não apenas corresponde ao recurso, mas também a um atributo específico no recurso.
originalValuePattern opcional Essa é uma expressão regular correspondente ao valor atual do atributo. Se não for fornecido, o atributo será sempre correspondente.
newValue obrigatório Esse é o novo valor a ser usado para o valor do atributo correspondente.

Para saber mais sobre como definir regras de substituição no console do Google Cloud , consulte Planejar um conjunto de restaurações.

Para definir regras de substituição pela CLI gcloud, crie um arquivo que contenha uma matriz YAML de substitutionRules e inclua o parâmetro --substitution-rules-file= no comando gcloud beta container backup-restore restore-plans create.

Exemplos de regras de substituição

Os exemplos a seguir são fornecidos no formato YAML usado pela CLI gcloud.

Alterar StorageClass

Neste exemplo, alteramos o StorageClass em todos os recursos PersistentVolumeClaim restaurados de standard para premium-rwo:

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

Clonar namespace

Neste exemplo, clonamos um namespace da versão Alfa para a Beta, criando um novo namespace "beta" e restaurando todos os recursos de "alpha" para o novo namespace "beta". Observe que este exemplo requer duas regras de substituição: uma para o próprio namespace e uma para os recursos contidos nele.

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

Alterar o StorageClass e a contagem de réplicas em um namespace clonado

Neste exemplo, clonamos um namespace e aplicamos um conjunto de alterações aos recursos do novo namespace:

  • Altere o StorageClass em PVCs de standard para premium-rwo

  • Altere a contagem de réplicas em implantações de 7 para 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'