如果您在使用 Migrate for Anthos 1.7.5 时遇到问题,可查阅以下实用的问题排查步骤。
在容器上执行 shell 命令
您可以通过 bash
shell 或通过 PowerShell 使用 kubectl exec
命令访问容器。
- 使用
kubectl describe pods
来查找您的集群中要连接的 Pod 的名称。在以下示例中,该命令列出了 suitecrm-0 pod。
kubectl describe pods | grep Name Name: suitecrm-0
- 使用以下方法之一执行 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 资源
如需更多帮助,请参阅以下页面:
如果您在使用 Google Kubernetes Engine 时遇到问题,请参阅 GKE 问题排查页面。
如果您遇到与集群相关的问题,请参阅 Kubernetes 文档中的对集群进行问题排查部分。
如果您的应用、其 pod 或其控制器对象出现问题,请参阅对应用进行问题排查。
迁移状态或日志中出现 RESOURCE_OPERATION_RATE_EXCEEDED 错误
如果迁移的来源平台为 Compute Engine 并且您在迁移 Compute Engine 虚拟机时超出磁盘快照的限制,则会出现 RESOURCE_OPERATION_RATE_EXCEEDED
错误。
在迁移过程中,Migrate for Anthos 会根据来源平台上运行的虚拟机创建磁盘映像的快照。对于 Compute Engine 虚拟机,您每 10 分钟最多只能创建磁盘快照一次,每小时最多只能创建磁盘快照 6 次。此错误表明您已超出该限制。
为避免达到此限制,我们建议您在 Compute Engine 虚拟机所在的区域中创建迁移集群。如果集群与虚拟机位于同一区域,Migrate for Anthos 可以克隆磁盘,而不是创建快照,此流程更有效,会绕过快照限制。
请参阅:
在 Google Cloud 上为 Windows 工作负载配置处理集群,以详细了解如何创建集群。
如需详细了解限制,请参阅高效创建频繁的快照。
无法装载 /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
环境变量,请执行以下操作:
在迁移处理集群上的迁移命名空间
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
将 configmap 应用到该集群:
kubectl apply -f jobs-config.yaml
如需查看 configmap,请使用以下命令:
kubectl describe configmaps -n v2k-system
修改迁移计划以添加 configmap。迁移计划是您在创建迁移时生成的 yaml 文件。请参阅自定义迁移计划,详细了解如何修改迁移计划。
在迁移计划中,修改
configs
部分以添加 configmap:configs: jobsConfig: name: jobs-config
保存您的修改,然后执行迁移,如执行迁移中所述。
由于 AppArmor 的原因,已部署容器的功能失效
AppArmor 允许系统管理员使用自定义配置文件来限制已部署容器的功能。在某些情况下,您可能必须将配置文件应用于已部署的容器,以便自定义其功能。
如需自定义 AppArmor 配置文件,请执行以下操作:
在要部署迁移容器的集群上创建配置文件。如需了解详情,请参阅 AppArmor 文档。
修改
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 访问脚本。
- 打开 Cloud Shell
-
然后运行
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 Storage 或 S3 存储分区收集迁移工件。
- 以下各项的输出:
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