49 定向网络置备查错 #
定向网络置备场景涉及使用 Metal3 和 CAPI 组件置备下游群集,以及使用 EIB 创建操作系统映像。当主机首次引导时,或者在检查或置备过程中,可能会发生问题。
固件过旧:验证物理主机上使用的所有固件是否为最新版本,包括 BMC 固件(有时 Metal3 需要特定版本/更新的固件)。
置备因 SSL 错误失败:如果提供映像的 Web 服务器使用 https,需要配置 Metal3 以在 IPA 映像中注入并信任证书。请参见第 40.3.4 节 “Kubernetes 文件夹”了解如何将
ca-additional.crt
文件包含到 Metal3 chart 中。使用 IPA 引导主机时的证书问题:某些服务器供应商在将虚拟媒体 ISO 映像挂接到 BMC 时会验证 SSL 连接,这可能导致出现问题,因为针对 Metal3 部署生成的证书是自我签名证书。在这种情况下,主机在引导时可能会回退到 UEFI 外壳。请参见第 1.6.2 节 “对虚拟媒体 ISO 挂接禁用 TLS”了解如何解决此问题。
名称或标签引用错误:如果群集通过错误的名称或标签引用节点,群集可能显示为已部署,但 BMH 仍处于“可用”状态。请仔细检查 BMH 关联对象的引用。
BMC 通讯问题:确保管理群集上运行的 Metal3 Pod 能够访问待置备主机的 BMC(通常 BMC 网络的限制极为严格)。
裸机主机状态不正确:BMH 对象在其生命周期(状态机流转过程)中会经历不同状态(正在检查、正在准备、已置备等)。如果检测到状态不正确,请使用以下命令检查 BMH 对象的
status
字段以获取更多信息:kubectl get bmh <name> -o jsonpath=’{.status}’| jq
。主机无法取消置备:如果主机取消置备失败,可尝试为 BMH 对象添加“detached”注解后再尝试去除,具体命令为
kubectl annotate bmh/<BMH> baremetalhost.metal3.io/detached=””
。映像错误:验证通过 EIB 为下游群集构建的映像是否可用、是否具有正确的校验和,且其大小不会导致解压失败或超出磁盘容量。
磁盘大小不匹配:默认情况下,磁盘不会自动扩容至其最大容量。如第 1.3.4.1.2 节 “Growfs 脚本”所述,通过 EIB 为下游群集主机构建映像时,需要包含一个 growfs 脚本。
清理过程卡住:清理过程会重试多次。如果由于主机问题导致清理过程无法继续,需要先将 BMH 对象的
automatedCleanMode
字段设置为disabled
,以禁用清理功能。警告当清理过程耗时过长或失败时,不建议手动去除终结器。这样做会从 Kubernetes 中去除主机记录,但会在 Ironic 中残留该记录。后台当前运行的操作会继续,再次添加主机时可能会因发生冲突而失败。
Metal3/Rancher Turtles/CAPI Pod 问题:所有必需组件的部署流程如下:
Rancher Turtles 控制器部署 CAPI 操作器控制器。
CAPI 操作器控制器随后部署提供程序控制器(CAPI 核心、CAPM3 和 RKE2 控制平面/引导组件)。
验证所有 Pod 是否正常运行,若非如此,请检查日志。
Metal3 日志:检查不同 Pod 的日志。
kubectl logs -n metal3-system -l app.kubernetes.io/component=baremetal-operator kubectl logs -n metal3-system -l app.kubernetes.io/component=ironic
注意metal3-ironic Pod 至少包含 4 个不同的容器(
ironic-httpd
、`ironic-log-watch`、ironic
和ironic-ipa-downloader
(init))。带-c
标志运行kubectl logs
可校验其中每个容器的日志。注意ironic-log-watch
容器会在检查/置备主机后从主机公开控制台日志(前提是网络连接允许将这些日志发送回管理群集)。当发生置备错误,但您无法直接访问 BMC 控制台日志时,此功能非常有用。Rancher Turtles 日志:检查不同 Pod 的日志。
kubectl logs -n rancher-turtles-system -l control-plane=controller-manager kubectl logs -n rancher-turtles-system -l app.kubernetes.io/name=cluster-api-operator kubectl logs -n rke2-bootstrap-system -l cluster.x-k8s.io/provider=bootstrap-rke2 kubectl logs -n rke2-control-plane-system -l cluster.x-k8s.io/provider=control-plane-rke2 kubectl logs -n capi-system -l cluster.x-k8s.io/provider=cluster-api kubectl logs -n capm3-system -l cluster.x-k8s.io/provider=infrastructure-metal3
BMC 日志:BMC 通常会提供一个可用于执行大多数交互操作的 UI,其中一般都会有一个“日志”部分,您可在其中查看潜在问题(无法访问映像、硬件故障等)。
控制台日志:连接到 BMC 控制台(通过 BMC Web UI、串行接口等),检查实时写入的日志中的错误。
检查
BareMetalHost
状态:运行
kubectl get bmh -A
可显示当前状态。查找provisioning
、ready
、error
、registering
。运行
kubectl describe bmh -n <namespace> <bmh_name>
可提供详细事件和状态,解释 BMH 可能出现卡死状态的原因。
测试 RedFish 连通性:
从 Metal3 控制平面使用
curl
测试能否通过 redfish 连接到 BMC。确保在
BareMetalHost-Secret
定义中提供了正确的 BMC 身份凭证。
验证 Turtles/CAPI/Metal3 Pod 状态:分别使用以下命令确保管理群集上的容器处于正常运行状态:
kubectl get pods -n metal3-system
和kubectl get pods -n rancher-turtles-system
(另请参见capi-system
、capm3-system
、rke2-bootstrap-system
和rke2-control-plane-system
)。验证待置备的主机可访问 Ironic 端点:待置备的主机需要能够访问 Ironic 端点以向 Metal3 回传状态信息。请使用
kubectl get svc -n metal3-system metal3-metal3-ironic
获取 IP,然后通过curl/nc
尝试访问该端点。验证 BMC 可访问 IPA 映像:IPA 由 Ironic 端点提供,BMC 必须能够访问 IPA,因为后者用作虚拟 CD。
验证待置备的主机可访问操作系统映像:运行 IPA 时,待置备主机自身必须能够访问用于置备该主机的映像,因为该映像会被临时下载并写入磁盘。
检查 Metal3 组件日志:请参见上文。
重新触发 BMH 检查:如果检查失败或可用主机的硬件发生变化,可通过为 BMH 对象添加注解
inspect.metal3.io: ""
触发新的检查过程。有关详细信息,请参见 Metal3 控制检查指南。裸机 IPA 控制台:您可以通过以下几种方法来排查 IPA 问题:
启用“自动登录”:这样 root 用户在连接到 IPA 控制台时便会自动登录。
警告此功能仅用于调试目的,因为这会授予对主机的完全访问权限。
要启用自动登录功能,应将 Metal3 helm 的
global.ironicKernelParams
设置为console=ttyS0 suse.autologin=ttyS0
(根据控制台的不同,可将ttyS0
替换为其他值)。然后需要重新部署 Metal3 chart。(注意:ttyS0
是示例,具体的值应与实际终端匹配。例如在裸机上,该值通常为tty1
,可通过查看主机引导时 IPA 内存盘的控制台输出来确定,因为其中的/etc/issue
会列显控制台名称。)另一种方法是更改
metal3-system
名称空间内ironic-bmo
configmap 中的IRONIC_KERNEL_PARAMS
参数。通过kubectl
edit 进行操作会更简单,但更新 chart 时,该参数会被覆盖。之后需要使用kubectl delete pod -n metal3-system -l app.kubernetes.io/component=ironic
重启 Metal3 Pod。为 IPA 的 root 用户注入 SSH 密钥。
警告此功能仅用于调试目的,因为这会授予对主机的完全访问权限。
可通过 Metal3 Helm 的
debug.ironicRamdiskSshKey
参数注入 root 用户的 SSH 密钥。然后需要重新部署 Metal3 chart。另一种方法是更改
metal3-system
名称空间内ironic-bmo configmap
中的IRONIC_RAMDISK_SSH_KEY
参数。通过kubectl
edit 进行操作会更简单,但更新 chart 时,该参数会被覆盖。之后需要使用kubectl delete pod -n metal3-system -l app.kubernetes.io/component=ironic
重启 Metal3 Pod。