Solução de problemas

Saiba mais sobre as etapas principais para solucionar problemas que podem ocorrer ao usar o Migrate for Anthos 1.7.5.

Como executar comandos do shell no seu contêiner

É possível acessar um contêiner por meio de um shell bash ou do PowerShell usando o comando kubectl exec (em inglês).

  1. Use kubectl describe pods para encontrar o nome do pod no cluster a que você quer se conectar.

    No exemplo a seguir, o comando lista o pod "suitecrm-0".

    kubectl describe pods | grep Name
    
    Name:               suitecrm-0
  2. Use um dos métodos a seguir para executar comandos de shell:
    • Use kubectl exec para abrir um shell de comando bash para executar comandos.
      kubectl exec -it pod-name -- /bin/bash

      No exemplo a seguir, você recebe um shell para o pod "suitecrm-0":

      kubectl exec -it suitecrm-0 -- /bin/bash
    • Use kubectl exec para executar comandos diretamente.
      kubectl exec -it pod-name -- /bin/bash -c "command(s)"

      No exemplo a seguir, você lista o diretório raiz do pod "suitecrm-0":

      kubectl exec -it suitecrm-0 -- /bin/bash -c "ls /"

Para mais informações, consulte a Documentação do Kubernetes (em inglês).

Como depurar recursos do Kubernetes

Você encontra mais ajuda nestas páginas:

O erro RESOURCE_OPERATION_RATE_EXCEEDED aparece no status ou nos registros de migração

O erro RESOURCE_OPERATION_RATE_EXCEEDED ocorre quando a plataforma de origem de uma migração é o Compute Engine e você excede o limite de snapshots de disco durante a migração de uma VM do Compute Engine.

Como parte da migração, o Migrate for Anthos cria um snapshot das imagens de disco de uma VM em execução na plataforma de origem. É possível criar um snapshot de disco no máximo uma vez a cada 10 minutos ou 6 vezes por hora para uma VM do Compute Engine. Esse erro indica que você excedeu esse limite.

Para evitar atingi-lo, recomendamos que você crie o cluster de migração na mesma zona da VM do Compute Engine. Quando o cluster está na mesma zona da VM, o Migrate for Anthos pode clonar o disco em vez de criar um snapshot, que é um processo mais eficiente e ignora o limite de snapshots.

Veja estes tópicos:

Um dispositivo listado em /etc/fstab falha ao ser montado

Por padrão, o sistema analisa /etc/fstab e monta todos os dispositivos listados nos pontos de montagem necessários. Se um dispositivo não for reconhecido ou não for montado, o pod de carga de trabalho não chegará ao estado pronto.

Por exemplo, considere uma VM de origem no Linux no Amazon EC2 que tenha um disco temporário em que a persistência não seja garantida. Esses discos não são transmitidos para o destino, fazendo com que o contêiner falhe ao montá-lo.

Se isso acontecer, será possível ver mensagens como estas:

Unable to locate resolve [X] fstab entries: 
Error: Failed mount -o defaults /dev/mapper/mpathe-part /rootfs/mnt/ephemeral

Para contornar esse problema:

  • edite /etc/fstab na VM do Linux para remover o comando de montagem do dispositivo;
  • ou defina a variável de ambiente HC_INIT_SKIP_MOUNT_FAILURES para configurar o sistema para ignorar falhas de montagem e continuar.

Para definir a variável de ambiente HC_INIT_SKIP_MOUNT_FAILURES:

  1. crie um configmap no namespace de migração, v2k-system, no cluster de processamento de migração. Por exemplo, defina o configmap em um arquivo chamado jobs-config.yaml:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: jobs-config
      namespace: v2k-system
    data:
      environment: |
        HC_INIT_SKIP_MOUNT_FAILURES = true
    
  2. Aplique o configmap ao cluster:

    kubectl apply -f jobs-config.yaml
  3. Para visualizar o mapa de configuração, use este comando:

    kubectl describe configmaps -n v2k-system
  4. Edite o plano de migração para adicionar o configmap. O plano de migração é o arquivo yaml gerado quando você criou a migração. Consulte Como personalizar um plano de migração para mais informações sobre como editar esse plano.

    No plano de migração, edite a seção configs para adicionar o configmap:

    configs:
      jobsConfig:
        name: jobs-config
    
  5. Salve suas edições e execute a migração conforme descrito em Como executar uma migração.

Falha nos recursos do contêiner implantado devido ao AppArmor

O AppArmor permite que um administrador do sistema restrinja os recursos de um contêiner implantado usando perfis personalizados. Em alguns casos, pode ser necessário aplicar um perfil ao contêiner implantado para personalizar os recursos dele.

Para personalizar o perfil do AppArmor:

  1. Crie o perfil no cluster em que você está implantando o contêiner migrado. Consulte a documentação do AppArmor para mais informações.

  2. Edite o arquivo deployment_spec.yaml para adicionar a variável de ambiente HC_APPARMOR_PROFILE com o nome do perfil do AppArmor:

    spec:
      containers:
      - image: gcr.io/my-project/my-container:v1.0.0
        name: my-container
        env:
        - name: HC_APPARMOR_PROFILE
          value: "apparmor-profile-name"
        securityContext:
          privileged: true
    ...
    

    Consulte Como revisar arquivos de implantação gerados para mais informações sobre como editar deployment_spec.yaml.

O erro FailedAttachVolume aparece no status ou nos registros de migração (visualização)

Se você estiver executando uma migração usando clusters do Anthos no AWS para executar a migração, poderá ver o erro FailedAttachVolume no status de migração ou nos registros com o mensagem de:

"The encrypted volume was unable to access the KMS master key"

Esse erro significa que sua VM da AWS usa um disco criptografado e você não configurou o acesso corretamente. Consulte Pré-requisitos para migrar VMs do Linux usando clusters de processamento da AWS para mais informações.

O erro Provisioning aparece no status ou nos registros de migração (visualização)

Se você estiver executando uma migração usando clusters do Anthos no AWS para executar a migração, poderá ver o erro ProvisioningFailed no status de migração ou nos registros com o mensagem de:

"ProvisioningFailed - "Could not create volume V_ID"

Este erro pode ocorrer quando você tenta exportar dados para um novo volume criptografado, mas o cluster não tem acesso à chave de criptografia e, portanto, não consegue criar o disco EBS. Consulte Pré-requisitos para migrar VMs do Linux usando clusters de processamento da AWS para mais informações.

Quero receber suporte personalizado

O suporte pago está disponível para os clientes que fazem a migração com o Migrate for Anthos. Entre em contato para que possamos ajudá-lo.

Como fornecer informações ao suporte do Google Cloud

O Sysreport oferece suporte ao Migrate for Anthos com informações sobre a configuração do cluster para agilizar o tempo de resolução do problema.

É possível acessar o script no Cloud Shell.

  1. Abrir o Cloud Shell
  2. Em seguida, execute o script collect_sysreport.sh.
    /google/migrate/anthos/collect_sysreport.sh [-n NAMESPACE] [-o OUTPUT_DIRECTORY] [-m MIGRATION]

Em que:

  • [NAMESPACE]: (opcional) o namespace em que o Migrate for Anthos foi implantado (o padrão é v2k-system).
  • [OUTPUT_DIRECTORY]: (opcional) o caminho para o diretório em que o Sysreport será salvo (o padrão é $HOME).
  • [MIGRATION]: (opcional) informações adicionais coletadas para uma migração.

O script cria anthos-migrate-logs.TIMESTAMP.tar.xz, que você fornece ao suporte do Google Cloud.

Por padrão, o script coleta o seguinte:

  • Registros dos nós e do controlador da CSI do Migrate for Anthos
  • Syslog dos hosts de nó da CSI do Migrate for Anthos
  • Registros do controlador do Migrate for Anthos.
  • Todas as entidades do Migrate for Anthos no cluster.
  • Se você especificar uma migração e ela usar o repositório de artefatos padrão, colete os artefatos de migração do bucket do Cloud Storage ou da S3.
  • A saída de:
    • kubectl cluster-info
    • kubectl get nodes; kubectl describe node
    • kubectl version
    • kubectl top node
  • Os registros da carga de trabalho
  • A saída de:
    • ps aux
    • netstat -tlnp
    • iptables -t nat -L
    • fstab
    • kubectl get pod
    • kubectl describe pod
    • kubectl top pod --all-namespaces --containers
    • kubectl cluster-info dump
    • kubectl api-resources -o wide
    • kubectl top pod --all-namespaces --containers
    • kubectl api-resources -o wide
    • kubectl get componentstatuses --all-namespaces
    • kubectl get endpoints --all-namespaces
    • kubectl get events --all-namespaces
    • kubectl describe limits --all-namespaces
    • kubectl get namespaces
    • kubectl describe pvc --all-namespaces
    • kubectl describe pv --all-namespaces
    • kubectl describe quota --all-namespaces
    • kubectl describe sa --all-namespaces
    • kubectl describe services --all-namespaces
    • kubectl describe services --all-namespaces
    • kubectl get ingresses --all-namespaces
    • kubectl describe networkpolicies --all-namespaces
    • kubectl get podsecuritypolicies --all-namespaces
    • kubectl get clusterrolebindings --all-namespaces
    • kubectl describe storageclasses --all-namespaces
    • kubectl describe volumeattachments --all-namespaces