排查 Kubernetes 支持的自承载集成运行时问题

本文介绍对 Linux 基于 Kubernetes 的新自承载集成运行时进行故障排除的详细信息。

可以查找以下错误指南中看到的任何错误。 若要获取 SHIR 问题的支持和故障排除指南,可能需要生成日志上传 ID 并 联系Microsoft支持人员。

收集 Kubernetes 自承载集成运行时日志

若要为Microsoft 支持部门生成日志上传 ID,请执行以下操作:

  1. 扫描显示“失败”状态后,导航到安装了 IRCTL 工具的 VM 或计算机。
  2. ./irctl log upload使用 命令。
  3. 上传日志后,请保留打印的日志上传 ID 的记录。
  4. 如果自承载集成运行时注册失败,请使用以下指南将日志下载到本地并将其发送给Microsoft支持人员

若要收集自承载集成运行时日志并扫描运行日志以排查 SHIR 问题,请使用 ./irctl log download命令。

例如:

./irctl log download --destination "C:\Users\user\logs\"

日志将下载到目标路径。

注意

日志将保留 14 天。 请将其上传到Microsoft或将其下载到本地计算机来保留它。

到 Kubernetes 的 IRCTL 连接错误

你可能会从 Kubernetes 管理员那里获取 Kubernetes 上下文配置,并且注册可能会失败,并显示以下错误消息之一:

  • Error: invalid flag context [] .kube/config: no such file or directory
  • [Warning] Failed to create kube client with context [] with error

原因

安装自承载集成运行时时,需要正确的 Kubernetes 配置和稳定的连接。

解决方案

  1. 确保 Kubernetes 上下文文件位于正确的路径中。
  2. 确保 IRCTL 计算机可以访问 Kubernetes 群集 API 服务器。

IRCTL 权限错误

连接时,可能会看到以下错误消息:

  • [Error] Failed to list namespaces to get Running SHIR
  • [Error] Failed to get configmap/ create job/ etc.

原因

安装自承载集成运行时时,需要对多个 Kubernetes 资源拥有足够的权限。

解决方案

使用管理员角色重新生成 Kubernetes service-account-token。

Microsoft Purview 服务终结点出现 IRCTL 连接错误

尝试注册 Kubernetes 支持的自承载集成运行时时,IRCTL create 命令可能会返回以下错误:

  • [Error] Failed to register SHIR with error: Post “https://[REGION].compute.governance.azure.com/purviewAccounts/[]/integrationruntimes/[]/registerselfhostedintegrationruntime: []”

原因

IRCTL 无法连接到服务后端。 此类问题通常是由网络设置或防火墙引起的。

解决方案

查看 IRCTL 主机计算机的网络拓扑。 请参阅 常规集成运行时故障排除页的以下部分:防火墙、DNS 服务器、SSL 证书信任和 http 代理。

注册密钥未授权

尝试注册 Kubernetes 支持的自承载集成运行时时,IRCTL create 命令可能会返回以下错误:

  • [Error] failed to register SHIR with error: Request is not authorized.

原因

它们已过期或已被手动撤销。

解决方案

从 Microsoft Purview 门户中的集成运行时页重新生成密钥,然后重新注册。

Kubernetes 自承载 IR 创建超时错误

尝试注册 Kubernetes 支持的自承载集成运行时时,IRCTL create 命令可能会运行很长时间,直到它最终超时。

创建超时后的命令行的屏幕截图。

可以从检查命令提到的 irctl describe 命名空间下的 Pod 状态开始。

例如:

./irctl describe 

K8s SHIR Name:shir-demo 
Purview AccountName:   shirdemopurview 
Installation ID:       00000000-0000-0000-0000-000000000000 
Kubernetes Namespace:  shirdemopurview-shir-demo, compute-fleet-system(control-plane) 
K8s SHIR Version:      Unknown (Installation not completed) 
Status:                Initializing 
Healthiness:           Unhealthy

kubectl get pods --namespace shirdemopurview-shir-demo

NAME                                       READY   STATUS    RESTARTS   AGE 
batch-defaultspec-4pbwx                    0/1     Pending   0          10m 
batch-defaultspec-7t9bl                    0/1     Pending   0          10m 
dynamic-config-provider-778c686fdc-9mkjb   0/1     Pending   0          10m 
interactive-schemaprocess-bcrmf            0/1     Pending   0          10m 
interactive-schemaprocess-fn66x            0/1     Pending   0          10m 
logagent-ds-84jqn                          0/1     Pending   0          10m 
logagent-ds-k7vw8                          0/1     Pending   0          10m 
user-credential-proxy-579c899b64-d4q5v     0/1     Pending   0          10m 

下面列出了几个潜在原因:

原因 - 与 Microsoft Purview 服务终结点的连接

Kubernetes 无法连接到 MCR (mcr.microsoft.com) 。 此错误通常是由网络设置或防火墙引起的。

如果看到状态为“ImagePullBackOff”,则表示 Kubernetes 无法连接到 MCR (mcr.microsoft.com) 来下载 Pod 映像。 此错误通常是由网络设置或防火墙引起的。

命令行的屏幕截图,其中显示了 ImagePullBackOff 状态。

解决方法 - 与 Microsoft Purview 服务终结点的连接

查看 Kubernetes 群集的网络拓扑。 例如,对于 Azure Kubernetes,应检查:

注意

每个 Kubernetes 提供程序所需的故障排除步骤将有所不同。 部署位置和各个网络详细信息因网络而异。 你需要查看通过组织网络建立的连接。

查看 IRCTL 主机计算机的网络拓扑。 请参阅 常规集成运行时故障排除页的以下部分:防火墙、DNS 服务器、SSL 证书信任和 http 代理。

原因 - Kubernetes 节点配置错误

如果某些 Pod 的状态停滞在“挂起”中,请使用 describe pod 命令查看 Pod 的详细信息。

例如:

kubectl describe pod batch-defaultspec-4pbwx  --namespace shirdemopurview-shir-demo

Events: 
  Type     Reason            Age                From               Message 

  ----     ------            ----               ----               ------- 

  Warning  FailedScheduling  13m                default-scheduler  0/5 nodes are available: 1 Too many pods. preemption: 0/5 nodes are available: 5 No preemption victims found for incoming pod.. 

describe 命令中的“事件”可以判断 Pod 挂起的原因。 带有详细消息的 FailedScheduling 错误显示 Pod 总数超出了节点上 Pod 的最大数目。 无法将新的 Pod 计划到所选节点。

注意

如果说明下没有看到事件,请尝试通过 kubectl delete pod 命令手动删除 Pod 并跟踪新创建的 Pod。

解决方法 - Kubernetes 节点配置错误

为 kubernetes 集成运行时保留 20 个 Pod 编号,以支持正常使用和升级方案。

Microsoft Purview 服务终结点的 Kubernetes 连接错误

尝试注册 Kubernetes 支持的自承载集成运行时时,IRCTRL create 命令可能会运行很长时间,直到它最终超时。或者,成功安装后,自承载集成运行时状态在 Microsoft Purview 门户中显示为不正常或脱机。

使用以下命令检查日志: kubectl logs [podName] -n compute-fleet-system

你可能会看到以下错误之一:

  • “TraceMessage”:”HttpRequestFailed”, “Host”: “fleet.[REGION].compute.governance.azure.com”
  • Exception":"System.Net.Http.HttpRequestException: Connection refused fleet.[REGION].compute.governance.azure.com:443
  • System.AggregateException: Failed to acquire identity token from https://fleet. [REGION].compute.governance.azure.com:443

原因

Kubernetes 无法连接到服务后端。 此错误通常是由网络设置或防火墙引起的。

解决方案

查看 Kubernetes 群集的网络拓扑。 例如,对于 Azure Kubernetes,应检查:

注意

每个 Kubernetes 提供程序所需的故障排除步骤将有所不同。 部署位置和各个网络详细信息因网络而异。 你需要查看通过组织网络建立的连接。

查看 IRCTL 主机计算机的网络拓扑。 请参阅 常规集成运行时故障排除页的以下部分:防火墙、DNS 服务器、SSL 证书信任和 http 代理。

注销本地资源不可用的运行时

如果意外从 Kubernetes 群集中删除了本地自承载集成运行时,则无法使用 命令将其irctl delete删除,并且无法将其安装到另一个 Kubernetes 群集。

原因

自承载集成运行时只能安装在一个 Kubernetes 群集上。 注册后,无法在取消注册之前将其安装在另一个群集上。

解决方案

  1. 检查自承载集成本地状态。 应看到未找到正在运行的自承载集成运行时。

    $./irctl describe
    
  2. 检查 Microsoft Purview 门户中的自承载集成运行时。 应会看到 “脱机” 状态。 不过, (令牌过期有 1 小时的延迟。)

  3. 选择状态旁边的“ 注销安装 ”并确认操作。

  4. 注销完成后,可以看到状态显示为 “未注册”。

  5. 选择集成运行时并获取注册密钥。

  6. 重新安装集成运行时

后续步骤