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>
$ oc delete machine.machine.openshift.io <machine_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除 Cluster API 机器,在运行
oc delete machine
命令时使用完全限定名称machine.cluster.x-k8s.io
:oc delete machine.cluster.x-k8s.io <machine_name>
$ oc delete machine.cluster.x-k8s.io <machine_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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
字段的值。
|
|
|
|
|
|
|
|
|
|
新计算机器的 |
|
|
|
|
当 .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
命令的输出可能包含 CURRENT
、READY
和 AVAILABLE
列中的值不准确。
- 原因
填充
CURRENT
、READY
和AVAILABLE
列的值源自于计算机器集的.status
小节。处理权威 API 类型之间的资源转换的双向同步控制器目前没有在.status
部分中同步值。DESIRED
列中的值反映了计算机器设置的.spec.replicas
值。双向同步控制器同步.spec
小节中的值。- 结果
在扩展迁移的机器集时,用户可以看到以下行为:
- 从具有现有机器的计算机器集开始。
- 迁移机器集以使用不同的权威 API。
-
通过在
.spec.replicas
字段中设置更大的值来扩展现在权威机器集。 - 机器集使用当前权威 API 创建机器,以满足请求的副本数。
缩减权威机器集,以便以下条件之一删除不使用当前权威 API 的机器:
- 请求的副本总数小于不使用当前权威 API 的机器数量。
- 机器集的机器删除策略选择不使用当前权威 API 的机器。
运行
oc get
命令检查非权威计算机器集的状态。-
输出中
DESIRED
列中的值反映了.spec.replicas
值。 -
CURRENT
、READY
和AVAILABLE
列中的值反映了在扩展机器集前存在的原始副本数。
-
输出中
- 临时解决方案
-
要验证缩减操作是否已成功删除不使用当前权威 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 不匹配。