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'