问题排查

如果您在使用 Migrate for Anthos 1.7.5 时遇到问题,可查阅以下实用的问题排查步骤。

在容器上执行 shell 命令

您可以通过 bash shell 或通过 PowerShell 使用 kubectl exec 命令访问容器。

  1. 使用 kubectl describe pods 来查找您的集群中要连接的 Pod 的名称。

    在以下示例中,该命令列出了 suitecrm-0 pod。

    kubectl describe pods | grep Name
    
    Name:               suitecrm-0
  2. 使用以下方法之一执行 shell 命令:
    • 使用 kubectl exec 打开 bash 命令 shell,您可在其中执行命令。
      kubectl exec -it pod-name -- /bin/bash

      以下示例获取了一个连接到 suitecrm-0 pod 的 shell:

      kubectl exec -it suitecrm-0 -- /bin/bash
    • 使用 kubectl exec 直接执行命令。
      kubectl exec -it pod-name -- /bin/bash -c "command(s)"

      以下示例列出了 suitecrm-0 pod 的根目录:

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

如需了解详情,请参阅 Kubernetes 文档

调试 Kubernetes 资源

如需更多帮助,请参阅以下页面:

迁移状态或日志中出现 RESOURCE_OPERATION_RATE_EXCEEDED 错误

如果迁移的来源平台为 Compute Engine 并且您在迁移 Compute Engine 虚拟机时超出磁盘快照的限制,则会出现 RESOURCE_OPERATION_RATE_EXCEEDED 错误。

在迁移过程中,Migrate for Anthos 会根据来源平台上运行的虚拟机创建磁盘映像的快照。对于 Compute Engine 虚拟机,您每 10 分钟最多只能创建磁盘快照一次,每小时最多只能创建磁盘快照 6 次。此错误表明您已超出该限制。

为避免达到此限制,我们建议您在 Compute Engine 虚拟机所在的区域中创建迁移集群。如果集群与虚拟机位于同一区域,Migrate for Anthos 可以克隆磁盘,而不是创建快照,此流程更有效,会绕过快照限制。

请参阅:

无法装载 /etc/fstab 中列出的设备

默认情况下,系统会解析 /etc/fstab 并将列出的所有设备装载到所需的装载点。如果无法识别或未装载设备,工作负载 Pod 就不会进入就绪状态。

例如,假设 Amazon EC2 中的源 Linux 虚拟机具有不保证持久性的临时磁盘。这些磁盘未流式传输到目标,导致容器无法装载。

如果发生这种情况,您可能会看到如下所示的消息:

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

您可以通过以下任一方式解决此问题:

  • 在 Linux 虚拟机上修改 /etc/fstab 以移除设备装载命令。
  • 设置 HC_INIT_SKIP_MOUNT_FAILURES 环境变量,将系统配置为跳过装载故障并继续。

如需设置 HC_INIT_SKIP_MOUNT_FAILURES 环境变量,请执行以下操作:

  1. 在迁移处理集群上的迁移命名空间 v2k-system 中创建 configmap。例如,在名为 jobs-config.yaml 的文件中定义 configmap:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: jobs-config
      namespace: v2k-system
    data:
      environment: |
        HC_INIT_SKIP_MOUNT_FAILURES = true
    
  2. 将 configmap 应用到该集群:

    kubectl apply -f jobs-config.yaml
  3. 如需查看 configmap,请使用以下命令:

    kubectl describe configmaps -n v2k-system
  4. 修改迁移计划以添加 configmap。迁移计划是您在创建迁移时生成的 yaml 文件。请参阅自定义迁移计划,详细了解如何修改迁移计划。

    在迁移计划中,修改 configs 部分以添加 configmap:

    configs:
      jobsConfig:
        name: jobs-config
    
  5. 保存您的修改,然后执行迁移,如执行迁移中所述。

由于 AppArmor 的原因,已部署容器的功能失效

AppArmor 允许系统管理员使用自定义配置文件来限制已部署容器的功能。在某些情况下,您可能必须将配置文件应用于已部署的容器,以便自定义其功能。

如需自定义 AppArmor 配置文件,请执行以下操作:

  1. 在要部署迁移容器的集群上创建配置文件。如需了解详情,请参阅 AppArmor 文档。

  2. 修改 deployment_spec.yaml 文件,以添加 HC_APPARMOR_PROFILE 环境变量和 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
    ...
    

    如需详细了解如何修改 deployment_spec.yaml,请参阅检查已生成的部署文件

FailedAttachVolume 错误出现在迁移状态或日志中(预览)

如果您使用 Anthos clusters on AWS 来执行迁移,则可能会在迁移状态或日志中看到 FailedAttachVolume 错误伴随以下消息:

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

此错误意味着您的 AWS 虚拟机使用加密的磁盘,并且您未正确配置访问权限。如需了解详情,请参阅使用 AWS 处理集群迁移 Linux 虚拟机的前提条件

迁移状态或日志中出现 ProvisioningFailed 错误(预览

如果您使用 Anthos clusters on AWS 来执行迁移,则可能会在迁移状态或日志中看到 ProvisioningFailed 错误伴随以下消息:

"ProvisioningFailed - "Could not create volume V_ID"

如果您尝试将数据导出到新的加密的卷,但是集群无权访问加密密钥,因而无法创建 EBS 磁盘,则可能会发生此错误。如需了解详情,请参阅使用 AWS 处理集群迁移 Linux 虚拟机的前提条件

我希望获得个性化支持

通过 Migrate for Anthos 执行迁移的客户可以享受付费支持。 请与我们联系,以便我们为您提供帮助

向 Google Cloud 支持团队提供信息

Sysreport 会向 Migrate for Anthos 支持团队提供有关集群配置的信息,以便更快地解决问题。

您可以通过 Cloud Shell 访问脚本。

  1. 打开 Cloud Shell
  2. 然后运行 collect_sysreport.sh 脚本。
    /google/migrate/anthos/collect_sysreport.sh [-n NAMESPACE] [-o OUTPUT_DIRECTORY] [-m MIGRATION]

其中:

  • [NAMESPACE]:(可选)部署 Migrate for Anthos 的命名空间(默认为 v2k-system)。
  • [OUTPUT_DIRECTORY]:(可选)用于保存 Sysreport 的目录的路径(默认值为 $HOME)。
  • [MIGRATION]:(可选)为迁移收集的其他信息。

该脚本会创建您提供给 Google Cloud 支持的 anthos-migrate-logs.TIMESTAMP.tar.xz

默认情况下,该脚本会收集以下内容:

  • 来自 Migrate for Anthos CSI 控制器和 CSI 节点的日志。
  • 来自 Migrate for Anthos CSI 节点主机的 syslog。
  • 来自 Migrate for Anthos 控制器的日志。
  • 集群中的所有 Migrate for Anthos 实体。
  • 如果指定迁移,并且迁移使用默认的工件代码库,请从 Cloud StorageS3 存储分区收集迁移工件。
  • 以下各项的输出:
    • kubectl cluster-info
    • kubectl get nodes; kubectl describe node
    • kubectl version
    • kubectl top node
  • 工作负载的日志。
  • 以下各项的输出:
    • 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