SUSE Edge 文档|提示和技巧|Metal3

32 Metal3

32.1 BareMetalHost 选择和群集关联

当 Metalˆ3ˆ 群集对象及其对应的关联对象创建完成后,系统将执行 BareMetalHost 选择流程,确定哪些 BareMetalHost 将加入该群集。该流程通过标准的 Kubernetes 标签和选择器,将 BareMetalHost 与特定的 Metal3MachineTemplate 进行关联。

例如,可为每个 BareMetalHost 添加标签,用于标识其属性和要加入的群集(如群集角色、群集名称、部署位置等):

apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: mynode1
  labels:
    cluster-role: control-plane
    cluster: foobar
    location: madrid
    datacenter: xyz
<snip>
---
apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: mynode2
  labels:
    cluster-role: worker
    cluster: foobar
    location: madrid
    datacenter: xyz
<snip>
---
apiVersion: metal3.io/v1alpha1
kind: BareMetalHost
metadata:
  name: mynode3
  labels:
    cluster-role: worker
    cluster: foobar2
    location: madrid
    datacenter: xyz
<snip>
...

随后,Metal3MachineTemplate 对象将通过 spec.hostSelector 字段匹配所需的 BareMetalHost

该字段支持 matchLabels(精确的键值匹配)和 matchExpressions(复杂规则匹配)两种方式:

apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Metal3MachineTemplate
metadata:
  name: foobar-cluster-controlplane
  namespace: mynamespace
spec:
  template:
    spec:
      hostSelector:
        matchLabels:
          cluster-role: control-plane
          cluster: foobar
<snip>
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: Metal3MachineTemplate
metadata:
  name: foobar-cluster-worker
  namespace: mynamespace
spec:
  template:
    spec:
      hostSelector:
        matchExpressions:
          - { key: cluster-role, operator: In, values: [worker] }
          - { key: cluster, operator: In, values: [foobar] }
<snip>
注意
注意

同时,也可利用 Kubernetes 名称空间,对不同对象进行更合理的管理。

32.2 清理旧的 EFI 引导项

有时,UEFI 引导管理器中会保留多个旧版操作系统的引导项,而这些引导项可能已不再需要(尤其是对于多次重新置备的主机)。您可通过以下任一方法清理这些旧引导项:

  • 直接在 BIOS/EFI 设置界面中删除(具体操作流程因硬件型号而异)。

  • 按如下方式运行 UEFI bcfg 外壳命令:

    # List the entries
    bcfg boot dump -b
    # Delete entry number X
    bcfg boot rm X
    # X is the number associated the entry to remove. For example, if the entry is "Boot0002 foobar", then X is 2.
  • 在 Linux 系统中按如下方式运行 efibootmgr 命令:

    # List the entries
    efibootmgr -v
    # Delete entry number X
    efibootmgr -b X -B

该流程可能会在 EFI 系统分区 (ESP) 中留下孤立文件,这些文件通常位于以供应商命名的子目录下(如 EFI/opensuseEFI/Microsoft)。此类文件一般无不良影响,但如果占用空间过大,可能会阻碍新操作系统的安装或引导管理器的更新,此时就需要将其删除。去除操作可能需要明确挂载 ESP,该分区在 Linux 系统中通常挂载于 /boot/efi/EFI 目录。