Como migrar uma organização para outro cluster

Nesta página, descrevemos como migrar uma organização da Apigee híbrida de um cluster do Kubernetes para outro. Veja a seguir alguns casos em que pode ser necessário migrar uma organização para outro cluster:

  • O data center que hospeda o cluster atual não tem mais capacidade ou está sendo desativado.
  • O cluster está executando uma infraestrutura ou uma versão antiga do Kubernetes e você quer migrar para um cluster com infraestrutura mais recente.
  • Você quer mover as organizações de clusters de várias organizações para clusters separados.

A migração de uma organização para outro cluster híbrido tem riscos e limitações. Leia os detalhes na seção Limitações antes de executar uma migração.

Limitações

As limitações a seguir se aplicam à migração de uma organização híbrida para outro cluster do Kubernetes:

  • Há o risco de perda de dados ao mover dados da organização para um novo cluster do Kubernetes. Faça o backup dos dados de todas as organizações do cluster do Kubernetes usando as instruções de backup híbrido antes de migrar uma organização.
  • O tamanho máximo de dados permitido para migração de uma organização é de 5GB em todos os keyspaces de uma organização, exceto cache e cota.
  • Os dados em cache não serão migrados. O híbrido recria os dados do cache.
  • Os dados de cota não serão migrados. O híbrido redefine os dados de cota.
  • Só é possível migrar organizações para um cluster do Kubernetes que não contenha implantação híbrida. A migração para um cluster com uma implantação híbrida não é compatível.
  • A organização que está sendo migrada só pode ser movida para um novo cluster com uma única implantação de região. Depois que a implantação de região única estiver funcionando, siga o processo de expansão de região, descrito em Implantação multirregional, para expandir para outras regiões.
  • O cluster do Cassandra deve funcionar bem em todas as regiões.

Como migrar uma organização

Siga as instruções abaixo para migrar uma organização híbrida de um cluster do Kubernetes para outro:

  1. Se ainda não estiver ativado, ative os backups no cluster do Kubernetes que contém a organização híbrida que será migrada. Consulte os Aspectos gerais do backup do Cassandra para receber informações sobre backups híbridos.
  2. Inicie um job de backup híbrido usando o seguinte comando:
    kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup <backup job name>

    O <backup job name> pode ser qualquer nome de contêiner válido.

  3. Quando o job de backup for concluído, use as instruções das seções a seguir de Backups do Monitoring para verificar se o backup foi concluído:
    • "Verifique o status da tarefa de backup"
    • "Verifique os registros de backup"
  4. Depois de verificar se o backup foi concluído, anote o número de ID no final do registro de backup. Por exemplo, um registro de backup bem-sucedido deve conter uma linha como a seguinte:
    INFO: completed upload for 20230207004250
    Anote o número de vários dígitos no final da linha. Você precisará desse número mais tarde.
  5. Alterne o contexto do Kubernetes para o cluster do Kubernetes de destino:
    kubectl config use-context <destination cluster name> # <destination cluster name>

    em que <destination cluster name> é o nome do cluster de destino do Kubernetes.

  6. Restaure os dados de backup no cluster de destino do Kubernetes seguindo as instruções em Como restaurar em uma única região.
    • Use o arquivo overrides.yaml para a organização que será migrada para a implantação híbrida de destino.
    • Lembre-se de definir o valor restore:snapshotTimestamp como o número de vários dígitos mostrado pelo registro de backup na etapa 4. Consulte Como restaurar em uma única região.
  7. Quando a restauração for concluída, exclua todos os dados da organização do cluster de destino do Kubernetes, exceto os dados da organização que está sendo migrada. Os arquivos de backup híbrido contêm os dados de todas as organizações, incluindo as que você não quer migrar. Depois que a implantação híbrida de destino for restaurada, será necessário remover todos os dados organizacionais extras que foram copiados para a implantação seguindo estas etapas:
    1. Verifique se o contexto atual é o contexto correto para o cluster de destino do Kubernetes:
      kubectl config current-context
    2. Exec no pod apigee-cassandra-default-0:
      kubectl exec -it -n APIGEE_NAMESPACE apigee-cassandra-default-0 -- /bin/bash
    3. Execute o comando a seguir:
      find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2 -printf "%f\n"

      Consulte Receber o nome da organização migrada para instruções sobre como encontrar <migrated org name>.

      Copie a lista com todos os nomes exibidos na saída. Você precisará dessa lista na etapa 7. f.

    4. Saia do pod apigee-cassandra-default-0.
    5. Crie um pod cliente de depuração do Cassandra usando as instruções em Criar um contêiner de cliente para depuração. Passe para a próxima etapa depois de receber uma solicitação cqlsh.
    6. Execute os seguintes comandos no prompt cqlsh:
      • desc keyspaces;

        Verifique se esse comando não retorna erros.

      • Para cada nome da lista criada na etapa 7. c., execute o seguinte comando:
        drop keyspace <name>
    7. Saia do pod cliente de depuração do Cassandra.
    8. Depois de executar os comandos cqlsh, execute os comandos a seguir em todos os pods do Cassandra no cluster de destino do Kubernetes:
      • kubectl exec -it -n APIGEE_NAMESPACE  -- /bin/bash
      • find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '*<migrated org name>*' -type d -maxdepth 2

        Consulte instruções sobre como encontrar <migrated org name> em Encontrar o nome da organização migrada.

      • find /opt/apigee/data/apigee-cassandra/ -iname '*_hybrid' -not -iname '**' -type d -maxdepth 2 -exec rm -rf {} +
    9. Saia do pod do Cassandra.
  8. Alterne o contexto do Kubernetes para o cluster de origem do Kubernetes:
    kubectl config use-context <source cluster name>

    em que <source cluster name> é o nome do contexto do cluster do Kubernetes de origem.

  9. Exclua a organização migrada do cluster do Kubernetes de origem. Use o arquivo overrides.yaml da organização no comando de exclusão:
    1. Verifique se o contexto atual é o contexto correto para o cluster de origem do Kubernetes:
      kubectl config current-context

      Se necessário, defina os contextos do Kubernetes para o cluster, e a organização precisa ser desativada.

      Liste seus contextos atuais para ver o nome de contexto de cada cluster:

      kubectl config get-contexts

      Defina o contexto como o cluster e a região que você quer desativar:

      kubectl config use-context CONTEXT_NAME

      Em que CONTEXT_NAME é o nome do contexto do cluster e da região.

      Exemplo:

          kubectl config get-contexts
          CURRENT   NAME                                                   CLUSTER                                                AUTHINFO                                               NAMESPACE
                    gke_example-org-1_us-central1_example-cluster-1        gke_example-org-1_us-central1_example-cluster-1        gke_example-org-1_us-central1_example-cluster-1        apigee
          *         gke_example-org-1_us-central1_example-cluster-2        gke_example-org-1_us-central1_example-cluster-2        gke_example-org-1_us-central1_example-cluster-2        apigee
                    gke_example-org-1_us-west1_example-cluster-2           gke_example-org-1_us-west1_example-cluster-2           gke_example-org-1_us-west1_example-cluster-2           apigee
      
          kubectl config use-context gke_example-org-1_us-west1_example-cluster-2
    2. Exclua o virtualhost. Repita isso para cada grupo de ambiente:
      helm -n APIGEE_NAMESPACE delete ENV_GROUP_NAME
      
    3. Exclua os ambientes. Repita isso para cada ambiente:
      helm -n APIGEE_NAMESPACE delete ENV_NAME
      
    4. Exclua a organização da Apigee.
      helm -n APIGEE_NAMESPACE delete ORG_NAME
      
    5. Execute no pod apigee-cassandra-default-0:
      kubectl exec -it -n APIGEE_NAMESPACE apigee-cassandra-default-0 -- /bin/bash
    6. Execute o comando a seguir:
      find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -printf "%f\n"

      Consulte instruções sobre como encontrar <migrated org name> em Encontrar o nome da organização migrada.

      Copie a lista com todos os nomes exibidos na saída. Você precisará dessa lista na etapa 9. j.

    7. Saia do pod apigee-cassandra-default-0.
    8. Crie um pod cliente de depuração do Cassandra usando as instruções em Criar um contêiner de cliente para depuração. Passe para a próxima etapa depois de receber uma solicitação cqlsh.
    9. Execute os seguintes comandos no prompt cqlsh:
      desc keyspaces;

      Verifique se esse comando não retorna erros.

    10. Para cada nome da lista criada na etapa 10, f., execute este comando:
      drop keyspace <name>;
    11. Saia do pod cliente de depuração do Cassandra.
    12. Depois de executar os comandos cqlsh, execute os comandos a seguir em todos os pods do Cassandra no cluster de origem do Kubernetes:
      • kubectl exec -it -n APIGEE_NAMESPACE CASSANDRA_POD_NAME -- /bin/bash
      • find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2

        Consulte instruções sobre como encontrar <migrated org name> em Encontrar o nome da organização migrada.

      • find /opt/apigee/data/apigee-cassandra/ -iname '*<migrated org name>_hybrid' -type d -maxdepth 2 -exec rm -rf {} +
    13. Saia do pod do Cassandra.

Encontrar o nome da organização migrada

Várias das etapas do procedimento descrito na seção anterior exigem o nome da organização migrada. Para encontrar o nome da organização migrada, faça o seguinte:

  1. Receba o nome da organização do arquivo overrides.yaml da organização. Verifique o arquivo overrides.yaml da organização que está sendo migrada.
  2. Se o nome da organização contiver traços "-", substitua todos os traços "-" por sublinhados "_".