11.5. 对使用 Cluster API 的集群进行故障排除


重要

使用集群 API 管理机器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

使用本节中的信息从您可能会遇到的问题了解和恢复。通常,对集群 API 问题进行故障排除的步骤与 Machine API 存在问题的步骤类似。

Cluster CAPI Operator 及其操作对象在 openshift-cluster-api 命名空间中置备,而 Machine API 使用 openshift-machine-api 命名空间。使用引用命名空间的 oc 命令时,请务必引用正确的命名空间。

11.5.1. 使用 CLI 引用预期的对象

对于使用 Cluster API 的集群,OpenShift CLI (oc) 命令会优先选择 Cluster API(与 Machine API 对象相比)。

此行为会影响任何对集群 API 和 Machine API 中代表的对象执行操作的 oc 命令。本说明使用 oc delete machine 命令,该命令删除机器,作为示例。

原因

运行 oc 命令时,oc 与 Kube API 服务器通信以确定要采取哪些对象。Kube API 服务器使用第一个安装的自定义资源定义 (CRD),它在运行 oc 命令时按字母顺序进行。

Cluster API 对象的 CRD 位于 cluster.x-k8s.io 组中,而 Machine API 对象的 CRD 位于 machine.openshift.io 组中。因为字母 c 在字母 m 前面,所以 Kube API 服务器在 Cluster API 对象 CRD 上匹配。因此,oc 命令会操作 Cluster API 对象。

结果

由于此行为,使用 Cluster API 的集群中可能会出现以下意外结果:

  • 对于包含两种类型的对象的命名空间,oc get machine 等命令只返回 Cluster API 对象。
  • 对于仅包含 Machine API 对象的命名空间,oc get machine 等命令不会返回任何结果。
临时解决方案
您可以使用对应的完全限定名称来确保 oc 命令对您想要的对象类型进行操作。

先决条件

  • 您可以使用具有 cluster-admin 权限的账户访问集群。
  • 已安装 OpenShift CLI(oc)。

流程

  • 要删除 Machine API 机器,在运行 oc delete machine 命令时使用完全限定名称 machine.machine.openshift.io

    $ oc delete machine.machine.openshift.io <machine_name>
    Copy to Clipboard Toggle word wrap
  • 要删除 Cluster API 机器,在运行 oc delete machine 命令时使用完全限定名称 machine.cluster.x-k8s.io

    $ oc delete machine.cluster.x-k8s.io <machine_name>
    Copy to Clipboard Toggle word wrap

11.5.2. 重复机器集和机器资源

在支持将 Machine API 资源迁移到 Cluster API 资源的集群上,有些资源似乎在 OpenShift CLI (oc)命令的输出中带有重复的实例,用于列出资源和 OpenShift Container Platform Web 控制台。

原因

安装使用默认配置选项的 OpenShift Container Platform 集群时,安装程序会在 openshift-machine-api 命名空间中置备以下基础架构资源:

  • 管理三台 control plane 机器的 control plane 机器集。
  • 管理三台计算机器的一个或多个计算机器集。
  • 管理 spot 实例的机器健康检查。
  • 根据计算机器设置规格创建的计算机器。

在支持将 Machine API 资源迁移到 Cluster API 资源的集群上,双向同步控制器会在 openshift-cluster-api 命名空间中创建以下 Cluster API 资源:

  • 一个集群资源。
  • 一个特定于供应商的基础架构集群资源。
  • 与计算机器集对应的一个或多个机器模板。
  • 管理三台计算机器的一个或多个计算机器集。
  • 根据机器模板和计算机器集规格创建的计算机器。
  • 与计算机器对应的基础架构机器。

这些 Cluster API 资源的名称与 openshift-machine-api 命名空间中的对应部分的名称相同。

结果
由于此行为,机器集和机器资源实例似乎在列出资源和 OpenShift Container Platform web 控制台的 oc 命令的输出中出现。
临时解决方案
虽然资源的名称与其他命名空间中的对应部分相同,但只有使用当前权威 API 的资源才处于活动状态。同步控制器创建并维护没有在未置备(Paused)状态下使用当前权威 API 的对应资源,以防止意外的协调。
结果

每个资源都看似是重复的资源中的一个,每次都处于活跃状态。不活跃的非权威资源不会影响功能。

重要

除非要删除使用当前权威 API 的对应资源,否则请不要删除不使用当前权威 API 的非权威资源。

当您删除不使用当前权威 API 的非权威资源时,同步控制器会删除使用当前权威 API 的对应资源。如需更多信息,请参阅"取消资源删除行为"。

11.5.3. 资源迁移故障排除

当您将资源迁移到使用不同的权威 API 时,您可能会在迁移过程中遇到问题。您还可以发现因为 Cluster API 和 Machine API 之间的区别导致意外行为。

11.5.3.1. 计算机器的权威 API 类型

计算机器的权威 API 取决于创建它的 Machine API 计算机器集中的 .spec.authoritativeAPI.spec.template.spec.authoritativeAPI 字段的值。

Expand
表 11.3. 创建计算机器时的 authoritativeAPI 字段的交互

.spec.authoritativeAPI value

ClusterAPI

ClusterAPI

MachineAPI

MachineAPI

.spec.template.spec.authoritativeAPI value

ClusterAPI

MachineAPI

MachineAPI

ClusterAPI

新计算机器的 authoritativeAPI

ClusterAPI

ClusterAPI

MachineAPI

ClusterAPI

注意

.spec.authoritativeAPI 值为 ClusterAPI 时,Machine API 机器集不具有权威,且不使用 .spec.template.spec.authoritativeAPI 值。因此,唯一使用 Machine API 创建计算机器的组合是 .spec.authoritativeAPI.spec.template.spec.authoritativeAPI 值是 MachineAPI 的位置。

11.5.3.2. 扩展后意外的机器计数

在支持在 Machine API 和 Cluster API 之间迁移资源的集群上,在扩展计算机器数量时可能会遇到意外行为。不使用权威 API 的计算机器集的 oc get 命令的输出可能包含 CURRENTREADYAVAILABLE 列中的值不准确。

原因

填充 CURRENTREADYAVAILABLE 列的值源自于计算机器集的 .status 小节。处理权威 API 类型之间的资源转换的双向同步控制器目前没有在 .status 部分中同步值。

DESIRED 列中的值反映了计算机器设置的 .spec.replicas 值。双向同步控制器同步 .spec 小节中的值。

结果

在扩展迁移的机器集时,用户可以看到以下行为:

  1. 从具有现有机器的计算机器集开始。
  2. 迁移机器集以使用不同的权威 API。
  3. 通过在 .spec.replicas 字段中设置更大的值来扩展现在权威机器集。
  4. 机器集使用当前权威 API 创建机器,以满足请求的副本数。
  5. 缩减权威机器集,以便以下条件之一删除不使用当前权威 API 的机器:

    • 请求的副本总数小于不使用当前权威 API 的机器数量。
    • 机器集的机器删除策略选择不使用当前权威 API 的机器。
  6. 运行 oc get 命令检查非权威计算机器集的状态。

    • 输出中 DESIRED 列中的值反映了 .spec.replicas 值。
    • CURRENTREADYAVAILABLE 列中的值反映了在扩展机器集前存在的原始副本数。
临时解决方案
要验证缩减操作是否已成功删除不使用当前权威 API 的计算机器,请运行列出非权威计算机器的 oc get 命令。
结果
如果 scale-down 操作成功,非权威计算机器的 oc get 命令的输出中的计数反映了机器集的 .spec.replicas 值。

11.5.3.3. 标签和注解同步不完整

标签和注解同步行为在 Machine API 和 Cluster API 之间有所不同。在某些情况下,这些差异会导致双向同步控制器在迁移过程中覆盖 Cluster API 机器上的标签。

原因

使用 Machine API 时,对机器集标签和注解的更改不会传播到现有机器和节点。这些更改仅适用于更新后部署的机器。

使用 Cluster API 时,对机器集标签和注解的更改会传播到现有机器和节点。当机器集的权威 API 从 Machine API 改为 Cluster API 时,其标签会传播到它所管理的集群 API 机器。在 Cluster API 机器标记为权威之前,传播发生。

结果
双向同步控制器使用之前的值覆盖任何传播的标签和注解,从而导致不一致。此结果仅在删除标签或注解时发生。更新和附加标签或注解不会造成这个问题不一致。
临时解决方案
这个问题还没有临时解决方案。如需更多信息,请参阅 OCPBUGS-54333

11.5.3.4. 不支持的配置选项

Machine API 不支持 Cluster API 的所有配置选项。有些 Machine API 配置无法迁移到 Cluster API。以后的发行版本中可能会支持其他配置选项。

尝试使用以下配置可能会导致迁移失败或导致错误。

注意

此列表可能没有详尽。

常规限制

  • 机器 API 计算机器无法迁移到 Cluster API,除非 NodeDeletionTimeout 字段使用 Cluster API 默认值 10s
  • OpenShift Container Platform 不支持使用机器集的 spec.template.spec 小节中的以下 Cluster API 字段或机器的 spec 小节:

    • version
    • readinessGates
  • Machine API 不支持使用以下 Cluster API 排空配置选项:

    • nodeDrainTimeout
    • nodeVolumeDetachTimeout
    • nodeDeletionTimeout
  • Cluster API 不支持将标签或污点从机器传播到节点。

Amazon Web Services (AWS)限制

  • 机器 API 计算机器无法使用 AWS 负载均衡器。
  • Machine API 不支持使用以下 Amazon EC2 实例元数据服务(IMDS)配置选项:

    • httpEndpoint
    • httpPutResponseHopLimit
    • instanceMetadataTags

    如果您将使用 IMDS 配置选项的 Cluster API 机器模板迁移到 Machine API 计算机器集,则预期的行为:

    • 任何迁移的 Machine API 机器集的机器都没有这些字段。底层实例不使用这些设置。
    • 所有迁移的机器集管理的机器都会保留这些字段。底层实例将继续使用这些设置。
  • OpenShift Container Platform 不支持使用以下 AWS 机器模板字段:

    • spec.ami.eksLookupType
    • spec.cloudInit
    • spec.ignition.proxy
    • spec.ignition.tls
    • spec.imageLookupBaseOS
    • spec.imageLookupFormat
    • spec.imageLookupOrg
    • spec.networkInterfaces
    • spec.privateDNSName
    • spec.securityGroupOverrides
    • spec.uncompressedUserData
  • 当其底层 AWS EC2 实例被删除时,Cluster API 不支持孤立非 root EBS 卷。当实例终止时,Cluster API 会删除所有依赖的卷。
  • 将 Machine API 资源迁移到 Cluster API 时,Ignition 版本被硬编码,可能与传递的用户数据 secret 不匹配。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat