标签模板概述

Elemental允许在`spec.machineInventoryLabels`和`spec.machineInventoryAnnotations`部分指定_标签模板_,这些部分属于机器注册资源。

它们的格式是Kubernetes标签和注释中使用的规范`key`:value。

这些标签模板会被转换为实际的标签和注释,附加到在机器入驻阶段创建的每个机器清单资源上。

生成的标签和注释具有与标签模板相同的`key`。

相关的`value`被生成:

Elemental模板功能还涵盖了机器注册的`spec.machineName`字段,该字段定义了注册机器的结果主机名以及相关机器清单资源的`name`。

有关更多详细信息,请参见机器名称部分。

标签模板的变量

Elemental标签模板包括一组预定义变量,可在机器注册中指定的`value`的_标签模板_内部使用。

用于指定标签模板变量的语法是:

${ VARFAMILY \/ VARPATH }

其中_VARFAMILY_定义了一组(家族)支持的变量,而_VARPATH_定义了属于该家族组的实际变量名称。

Elemental当前支持以下_模板变量家族_:

  • BIOS:${ BIOS \/ VARPATH }

  • BaseBoard:${ BaseBoard \/ VARPATH }

  • CPU:${ CPU \/ VARPATH }

  • 机箱:${ Chassis \/ VARPATH }

  • GPU:${ GPU \/ VARPATH }

  • 内存: ${ Memory \/ VARPATH }

  • 网络: ${ Network \/ VARPATH }

  • 产品: ${ Product \/ VARPATH }

  • 运行时: ${ 运行时 \/ VARPATH }

  • 存储: ${ Storage \/ VARPATH }

所有的 模板变量家族(但 `Random`)仅在 机器注册 的 elemental.registration.no-smbios 字段设置为 false(默认)时启用。

当 elemental.registration.no-smbios 字段设置为 true 时,注册的机器不会发送任何渲染模板变量所需的数据,因此不会有变量可用,但 随机 变量是唯一的显著例外。

随机 变量始终可用,因为它们是在操作员端内置的。它们也很特别,因为它们只计算一次:有关更多详细信息,请参见 随机模板变量 部分。

模板变量可以与静态文本混合,以形成分配给 (机器清单) 的实际标签。

渲染示例
  • 标签模板跟踪注册主机的 CPU 内核数量(假设主机有 4 个内核):

    • 原始标签: cpu: ${CPU\/TotalCores}-内核

    • 渲染标签: cpu:4-内核

  • 标签模板跟踪注册主机的 SMBIOS UUID:

    • 原始标签: sbios-UUID: ${Product\/UUID}

    • 渲染标签: sbios-UUID: fd95324a-c26b-4e28-8727-1dcec293a0ec

清理

一旦标签模板值根据包含的 标签模板变量 渲染,结果值为 sanitized,然后分配给结果标签。

该 sanitization 强制标签值仅包含字母(无论大小写)、数字以及连字符 (-)、点 (.) 和下划线 (_) 字符:

所有未包含的字符都将被替换为连字符。

标签值的开头和结尾必须是字母或数字。如果不是,则会被删除。

两个连续的连字符将被替换为一个。

渲染示例
  • 带有禁止字符清理的标签模板:

    • 原始标签: sanitized: this:needs—​sanitizing!

    • 渲染标签: sanitized: this-needs-sanitizing

标签模板的使用

标签模板允许在每次主机注册到元素操作员时,自动附加和更新每个主机的 机器清单 的标签和注释。

注册不仅发生在 入驻阶段:每个主机每30分钟重新注册一次(以及每次重启时)。在重新注册期间,关联的 机器注册 中的标签模板会被重新评估,并在 机器清单 中添加/更新。

基本上有三种主要情况,标签模板可以派上用场:

  • 将硬件数据附加到元素目录。

  • 添加选择器以选择主机进行集群配置。

  • 为机器名称定义自定义模板。

元素目录的硬件数据

标签模板的变量可用于将硬件数据附加到每个 机器清单 资源(构成元素目录)。

在这种情况下,注释可能是更好的选择,因为它们的值不会被清理。

集群配置选择器

Label Templates 可用于生成标签,以识别和选择具有特殊硬件属性的机器,从而形成新的 Kubernetes 集群。

附加到每个 机器清单 的标签可以用于 选择器,以便于 机器库存选择器模板 资源(有关更多详细信息,请参见 Kubernetes 集群配置 部分)。

自定义机器名称

可以使用 机器注册 spec.machineName 字段指定入驻机器的主机名。

spec.machineName 值经过与 Label Templates' variables 和 sanitization 字段相同的处理,专用于 spec.machineInventoryLabels 字段。

机器注册 spec.machineName 和 spec.machineInventorylabels 字段之间有一个显著的区别:在 清理 过程中,底线 (_) 被替换为其他禁止字符(即,它被替换为连字符:-)。这是必需的,因为在 Linux 主机名中不允许使用底线。

有关如何为 Elemental 主机定义主机名的更多信息,请参见 如何/自定义主机名 部分。

渲染示例
  • 定义一个主机名模板,如 SLE-Micro-[random string of 6 hexadecimal values]:

    • 机器注册规范: 机器名称:SLE-Micro-${Random\/Hex\/6}

    • 机器清单名称:SLE-Micro-32ad41

标签模板示例

Registration Example
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
  name: my-nodes
  namespace: fleet-default
spec:
  machineName: "${Runtime/Hostname}"
  config:
    cloud-config:
      users:
        - name: root
          passwd: root
    elemental:
      install:
        reboot: true
        device: /dev/sda
        debug: true
  machineInventoryLabels:
    elemental.cattle.io/CpuTotalCores: "${CPU/TotalCores}"
    elemental.cattle.io/CpuTotalThreads: "${CPU/TotalThreads}"
    elemental.cattle.io/TotalMemoryBytes: "${Memory/TotalPhysicalBytes}"
    elemental.cattle.io/NumDisks: "${Storage/TotalDisks}"