1.5. 管理设备


技术预览: Red Hat Edge Manager 从注册管理设备生命周期以停用设备。设备生命周期还包括设备管理,如组织、监控和使用 Red Hat Edge Manager 更新设备。

您可以单独或管理设备。Red Hat Edge Manager 允许您作为单个对象管理整个设备,而不是单独管理多个设备。

您只需要指定所需的配置一次,然后 Red Hat Edge Manager 将配置应用到团队中的所有设备。

了解单个设备管理是管理团队中设备的基础。在以下情况下,您可能需要单独管理设备:

  • 如果几个设备有很大不同的配置。
  • 如果您使用外部自动化来更新设备。

需要的访问权限:集群管理员

以下文档侧重于管理独立设备:

要了解更多有关在团队中管理设备的信息,请参阅管理设备团队

1.5.1. 注册设备

技术预览: 要使用 Red Hat Edge Manager 管理设备,您必须将设备注册到 Red Hat Edge Manager 服务。

第一次在设备上运行 Red Hat Edge Manager 代理时,代理将通过生成加密密钥对来为注册过程准备注册过程。设备的加密密钥对由公钥和私钥组成。私钥不会离开设备,因此设备无法重复或模拟。密钥对在注册过程中注册到 Red Hat Edge Manager 服务,并在停用该设备时删除。

当设备尚未注册时,代理会执行服务发现来查找其 Red Hat Edge Manager 服务实例。然后,设备建立与服务的安全 mTLS 保护的网络连接。该设备使用其 X.509 注册设备在镜像构建或设备置备过程中获取的证书。该设备向服务提交注册请求,其中包括:

  • 设备硬件和操作系统的描述
  • X.509 证书签名请求,其中包含设备的加密身份,以获取初始管理证书

在授权用户批准或拒绝请求之前,该设备不被视为可信,并保持在设备 lobby 中轮转。

如需更多信息,请参阅以下部分:

1.5.1.1. 先决条件

1.5.1.2. 使用 CLI 注册设备

您必须先将设备注册到 Red Hat Edge Manager 服务中,然后才能管理它们。完成以下步骤:

  1. 运行以下命令,列出当前等待批准的所有设备:

    flightctl get enrollmentrequests --field-selector="status.approval.approved != true"
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME           APPROVAL  APPROVER  APPROVED LABELS
    <device_name>  Pending   <none>    <none>
    Copy to Clipboard Toggle word wrap

    注: 唯一的设备名称由代理生成,且无法更改。代理选择其公钥的 base32 编码的哈希值作为设备名称。

  2. 通过指定注册请求的名称来批准注册请求。另外,您可以使用- label or -l 标志向设备添加标签。请参见以下示例:

    flightctl approve -l region=eu-west-1 -l site=factory-berlin enrollmentrequest/54shovu028bvj6stkovjcvovjgo0r48618khdd5huhdjfn6raskg
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME           APPROVAL  APPROVER  APPROVED LABELS
    <device_name>  Approved  user      region=eu-west-1,site=factory-berlin
    Copy to Clipboard Toggle word wrap

批准注册请求后,服务会发出管理证书,并在清单中注册该设备。该设备现在可以管理。

1.5.2. 查看设备

技术预览: 要获取有关清单中设备的更多信息,您可以使用 Red Hat Edge Manager CLI。

1.5.2.1. 先决条件

1.5.2.2. 查看设备清单和设备详情

查看设备清单中的设备。完成以下步骤:

  1. 运行以下命令,查看设备清单中的设备:

    flightctl get devices
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME           ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN
    <device_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,以 YAML 格式查看该设备的详情:

    flightctl get device/<device_name> -o yaml
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
      labels: 
    1
    
        region: eu-west-1
        site: factory-berlin
    spec:
      os:
        image: quay.io/flightctl/rhel:9.5 
    2
    
      config:
      - name: my-os-configuration 
    3
    
        configType: GitConfigProviderSpec
        gitRef:
          path: /configuration
          repository: my-configuration-repo
          targetRevision: production
    status:
      os:
        image: quay.io/flightctl/rhel:9.5 
    4
    
      config:
        renderedVersion: "1" 
    5
    
      applications:
        data: {} 
    6
    
        summary:
          status: Unknown 
    7
    
      resources: 
    8
    
        cpu: Healthy
        disk: Healthy
        memory: Healthy
      systemInfo: 
    9
    
        architecture: amd64
        bootID: 037750f7-f293-4c5b-b06e-481eef4e883f
        operatingSystem: linux
      summary:
        info: ""
        status: Online 
    10
    
      updated:
        status: UpToDate 
    11
    
      lastSeen: "2024-08-28T11:45:34.812851905Z" 
    12
    
    [...]
    Copy to Clipboard Toggle word wrap
    1
    分配给该设备的用户定义标签。
    2
    设备的目标 OS 镜像版本。
    3
    设备的目标操作系统配置。
    4
    设备的当前 OS 镜像版本
    5
    设备的当前操作系统配置版本。
    6
    设备部署的应用程序的当前列表。
    7
    该设备中应用程序的健康状况。
    8
    CPU、磁盘和内存资源的可用性。
    9
    基本系统信息。
    10
    设备的健康状况。
    11
    设备的更新状态。
    12
    设备的最后检查时间和日期。

1.5.3. 标签和标签选择器

技术预览: 您可以通过分配标签来组织资源,包括独立设备、团队和任何其他资源。例如,您可以使用标签记录位置、硬件类型或目的。Red Hat Edge Manager 标签遵循与 Kubernetes 标签和标签选择器相同的语法、原则和运算符。

您可以在查看设备清单或将操作应用到设备时选择带有标签的设备。

标签使用 key=value 格式,其中您要使用键对设备进行分组。例如,如果您的标签遵循 site=<location& gt; 命名约定,您可以根据站点对设备进行分组。

您还可以使用仅包含键的标签。

标签必须遵循以下规则才能有效:

  • 键和值必须是 63 个字符或更少。
  • 键和值可由字母数字字符组成(a-zA-Z0-9)。
  • 键和值也可以包含短划线(-)、下划线(_)、句点(.),但不能包含第一个或最后一个字符。
  • 值可以被省略。

您可以使用以下方法将标签应用到资源:

  • 在镜像构建期间定义一组默认标签,在部署过程中自动应用到所有设备。
  • 在注册期间分配初始标签。
  • 在注册后分配标签。

标记资源时,您可以通过编写标签选择器来选择资源子集。标签选择器是一个以逗号分隔的标签列表,用于选择具有相同标签集的资源。

请参见以下示例:

Expand
标签选择器示例选择的设备

site=factory-berlin

具有 站点 标签键和 factory-berlin 标签值的所有设备。

site!=factory-berlin

具有 站点 标签键的所有设备,但标签值不是 factory-berlin

网站(factory-berlin,factory-madrid)

具有 站点 标签键的所有设备以及标签值都是 factory-berlinfactory-madrid

如需更多信息,请参阅 标签和选择器

1.5.4. 使用标签

技术预览: 您可以使用标签组织设备。

1.5.4.1. 使用 CLI 查看设备及其标签

查看设备及其关联的标签。您可以使用标签来组织设备和设备群。

完成以下步骤:

  1. 使用 -o wide 选项查看清单中的设备:

    flightctl get devices -o wide
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago  region=eu-west-1,site=factory-berlin
    <device2_name>  <none>   <none>  Online  Up-to-date  <none>        1 minute ago   region=eu-west-1,site=factory-madrid
    Copy to Clipboard Toggle word wrap
  2. 使用 -l <key=value > 选项查看清单中的带有特定标签或一组标签的设备:

    flightctl get devices -l site=factory-berlin -o wide
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 seconds ago  region=eu-west-1,site=factory-berlin
    Copy to Clipboard Toggle word wrap

1.5.4.2. 使用 CLI 更新标签

使用 CLI 更新设备上的标签。完成以下步骤:

  1. 运行以下命令,将设备的当前定义导出到文件中:

    flightctl get device/<device1_name> -o yaml > my_device.yaml
    Copy to Clipboard Toggle word wrap
  2. 使用您的首选编辑器编辑 my_device.yaml 文件。请参见以下示例:

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      labels:
        some_key: some_value
        some_other_key: some_other_value
      name: <device1_name>
    spec:
    [...]
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令保存文件并应用更新的设备定义:

    flightctl apply -f my_device.yaml
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令验证更改是否已应用

    NAME            ALIAS    OWNER   SYSTEM  UPDATED     APPLICATIONS  LAST SEEN      LABELS
    <device1_name>  <none>   <none>  Online  Up-to-date  <none>        3 minutes ago  some_key=some_value,some_other_key=some_other_value
    <device2_name>  <none>   <none>  Online  Up-to-date  <none>        4 minutes ago  region=eu-west-1,site=factory-madrid
    Copy to Clipboard Toggle word wrap

1.5.5. 字段选择器

字段选择器根据特定的资源字段值过滤 Red Hat Edge Manager 资源列表,包括独立设备、团队和任何其他资源。

字段选择器遵循与 Kubernetes 字段相同的语法、原则和运算符,以及用于更高级的搜索用例,使用其他运算符的标签选择器。

1.5.5.1. 支持的字段

Red Hat Edge Manager 资源提供了一组您可以选择的元数据字段。

每个资源支持以下元数据字段:

  • metadata.name
  • metadata.owner
  • metadata.creationTimestamp

注: 要查询标签,请使用标签选择器进行高级且灵活的标签过滤。

如需更多信息,请参阅 标签和标签选择器

1.5.5.2. 其他支持的字段列表

除了元数据字段外,每个资源都有自己的唯一字段集合,您可以根据特定于资源的属性对过滤和选择提供更大的灵活性。

下表列出了为每个资源类型过滤支持的字段:

Expand

Kind

字段

证书签名请求

status.certificate

设备

status.summary.status

status.applicationsSummary.status

status.updated.status

status.lastSeen

status.lifecycle.status

注册请求

status.approval.approved

status.certificate

fleet

spec.template.spec.os.image

软件仓库

spec.type

spec.url

资源同步

spec.repository

1.5.5.3. 字段发现

有些 Red Hat Edge Manager 资源可能会公开额外的支持字段。您可以使用 flightctl 命令和-- field-selector 选项发现支持的字段。如果您尝试使用 unsupported 字段,错误消息列出了可用的支持字段。

请参见以下示例:

flightctl get device --field-selector='text'
Copy to Clipboard Toggle word wrap
Error: listing devices: 400, message: unknown or unsupported selector: unable to resolve selector name "text". Supported selectors are: [metadata.alias metadata.creationTimestamp metadata.name metadata.nameoralias metadata.owner status.applicationsSummary.status status.lastSeen status.summary.status status.updated.status]
Copy to Clipboard Toggle word wrap

字段 文本 不是用于过滤的有效字段。错误消息提供了可用于 Device 资源的 with -field-selector 的受支持字段列表。

然后,您可以使用其中一个支持的字段:

flightctl get devices --field-selector 'metadata.alias contains cluster'
Copy to Clipboard Toggle word wrap

metadata.alias 字段使用 包含 运算符进行检查,以查看它是否具有值 cluster

1.5.5.3.1. 例子

按名称排除特定设备

以下命令根据其名称过滤出特定设备:

flightctl get devices --field-selector 'metadata.name!=<device_name>'
Copy to Clipboard Toggle word wrap

根据所有者、标签并创建时间戳过滤

以下命令检索由 Fleet/pos-fleet 拥有的设备,位于 us 区域,并在 2024 中创建:

flightctl get devices --field-selector 'metadata.owner=Fleet/pos-fleet, metadata.creationTimestamp >= 2024-01-01T00:00:00Z, metadata.creationTimestamp < 2025-01-01T00:00:00Z' -l 'region=us'
Copy to Clipboard Toggle word wrap

根据所有者、标签和设备状态过滤

以下命令检索由 Fleet/pos-fleet 拥有的设备,位于 us 区域,并且 status.updated.statusUnknownOutOfDate

flightctl get devices --field-selector 'metadata.owner=Fleet/pos-fleet, status.updated.status in (Unknown, OutOfDate)' -l 'region=us'
Copy to Clipboard Toggle word wrap

1.5.5.4. 支持的 Operator

Expand

Operator

符号

描述

Exists

--field-selector <field>

检查是否存在字段。例如,--field-selector 'metadata.owner' 字段选择器返回具有 metadata.owner 字段的资源。

DoesNotExist

!

检查字段是否不存在。

等于

=

检查字段是否等于一个值。

DoubleEquals

==

另一种形式的相等性检查。

NotEquals

!=

检查字段是否不等于值。

GreaterThan

>

检查字段是否大于一个值。

GreaterThanOrEquals

>=

检查字段是否大于或等于一个值。

LessThan

<

检查字段是否小于一个值。

LessThanOrEquals

检查字段是否小于或等于一个值。

In

in

检查字段是否位于值列表中。

NotIn

NotIn

检查字段是否不在值列表中。

contains

contains

检查字段是否具有值。

NotContains

notcontains

检查字段是否包含值。

1.5.5.5. 根据字段类型的 Operator 使用

每个字段类型支持特定的 Operator 子集:

Expand

字段类型

支持的 Operator

value

字符串

等于 :如果字段值与指定字符串完全匹配,则匹配。

DoubleEquals :如果字段值与指定字符串完全匹配,则匹配。等于 Equals 的替代选择。

NotEquals :如果字段值与指定字符串不匹配,则匹配。

中:如果字段值与列表中至少一个字符串匹配,则匹配。

NotIn: 匹配,如果字段值与列表中的任何字符串都不匹配。

包含 :如果字段值具有指定的子字符串,则匹配。

NotContains :如果字段值不包含指定的子字符串,则匹配。

存在: 如果字段存在,则匹配。

DoesNotExist: 如果字段不存在,则匹配。

文本字符串

Timestamp

等于 :如果字段值与指定时间戳完全匹配,则匹配。

DoubleEquals :如果字段值与指定时间戳完全匹配,则匹配。等于 Equals 的替代选择。

NotEquals :如果字段值与指定时间戳不匹配,则匹配。

GreaterThan :如果字段值位于指定时间戳后,则匹配。

GreaterThanOrEquals: Matches (如果字段值之后或等于指定的时间戳)。

LessThan: 如果字段值位于指定时间戳之前,则匹配。

LessThanOrEquals :如果字段值早于或等于指定时间戳,则匹配。

中:如果字段值在列表中至少匹配一个时间戳,则匹配。

NotIn: 匹配,如果字段值与列表中的任何时间戳不匹配。

存在: 如果字段存在,则匹配。

DoesNotExist: 如果字段不存在,则匹配。

RFC 3339 格式

Number

等于 :如果字段值等于指定数字,则匹配。

DoubleEquals :如果字段值等于指定数字,则匹配。等于 Equals 的替代选择。

NotEquals :如果字段值不等于指定数字,则匹配。

GreaterThan :如果字段值大于指定数量,则匹配。

GreaterThanOrEquals: Matches (如果字段值大于或等于指定数目)。

lessThan: 匹配字段值小于指定数量。

less ThanOrEquals :如果字段值小于或等于指定号,则匹配。

中:如果字段值在列表中至少等于一个数字,则匹配。

NotIn: 匹配,如果字段值不等于列表中的任何数字。

存在: 如果字段存在,则匹配。

DoesNotExist: 如果字段不存在,则匹配。

数字格式

布尔值

等于 :如果值为 truefalse,则匹配。

DoubleEquals :如果值为 truefalse,则匹配。等于 Equals 的替代选择。

NotEquals :如果值与指定的值相反,则匹配。

中:如果值为 truefalse,则匹配在列表中。该列表只能包含 truefalse,因此这个 Operator 被限制在使用中。

NotIn :如果值不在列表中,则匹配。

存在: 如果字段存在,则匹配。

DoesNotExist: 如果字段不存在,则匹配。

布尔值格式(truefalse)

Array

包含: 匹配,如果数组具有指定的值。

NotContains :如果数组不包含指定的值,则匹配。

中:如果数组与指定的值重叠,则匹配。

NotIn: 如果数组没有与指定的值重叠,则匹配。存在: 如果字段存在,则匹配。

DoesNotExist: 如果字段不存在,则匹配。

数组元素

1.5.6. 更新操作系统

技术预览: 您可以通过更新设备规格中的目标操作系统镜像名称或版本来更新设备的操作系统。

当 Red Hat Edge Manager 代理与服务通信时,代理会检测到请求的更新。然后,代理会自动在后台下载和验证新操作系统版本。

Red Hat Edge Manager 代理根据更新策略调度实际系统更新。在调度的更新时间,代理会在不中断当前运行的操作系统的情况下安装新版本。

最后,设备会重启到新版本。

Red Hat Edge Manager 目前支持以下镜像类型和镜像引用格式:

Expand

镜像类型

镜像参考

bootc

对容器 registry 的 OCI 镜像引用。示例: quay.io/flightctl-example/rhel:9.5

在此过程中,代理会向服务发送状态更新。您可以通过查看设备状态来监控更新过程。如需更多信息,请参阅查看设备

1.5.6.1. 在 CLI 上更新操作系统

使用 CLI 更新设备。完成以下步骤:

  1. 运行以下命令,获取设备的当前资源清单:

    flightctl get device/<device_name> -o yaml > my_device.yaml
    Copy to Clipboard Toggle word wrap
  2. 编辑 Device 资源,以指定新的操作系统名称和版本目标。

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      os:
        image: quay.io/flightctl/rhel:9.5
    [...]
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来应用更新的 Device 资源:

    flightctl apply -f <device_name>.yaml
    Copy to Clipboard Toggle word wrap

1.5.7. 边缘设备的操作系统配置

技术预览: 您可以在镜像中包括操作系统级别的主机配置,以提供最大一致性和可重复性。

要更新配置,您可以创建一个新的操作系统镜像并使用新镜像更新设备。

但是,在以下情况下,使用新镜像更新设备可能不太现实:

  • 镜像中缺少配置。
  • 配置需要特定于设备。
  • 配置需要在运行时进行更新,而无需更新操作系统镜像并重新引导。

对于这些情况,您可以声明设备文件系统上存在的一组配置文件。Red Hat Edge Manager 代理对配置文件应用更新,同时确保所有文件在文件系统中成功更新,或者回滚到其预更新状态。如果用户同时更新一组设备,Red Hat Edge Manager 代理会首先更新操作系统,然后应用指定的配置文件集合。

您还可以指定 Red Hat Edge Manager 代理按顺序应用的配置设置列表。如果发生冲突,则最后应用的配置设置有效。

重要: 在 Red Hat Edge Manager 代理更新磁盘上的配置后,运行的应用程序需要将新配置重新加载到内存中才能使配置生效。如果更新涉及重启,systemd 会自动使用新配置以及正确顺序重启应用程序。如果更新不涉及重新启动,则许多应用可以检测对其配置文件的更改并自动重新载入文件。当应用程序不支持更改检测时,您可以使用设备生命周期 hook 在满足特定条件时运行脚本或命令。

1.5.7.1. 配置供应商

您可以在 Red Hat Edge Manager 中,从多个源(称为配置供应商)提供配置。Red Hat Edge Manager 目前支持以下配置供应商:

Git 配置提供程序
从 Git 存储库获取设备配置文件。
Kubernetes Secret Provider
从 Kubernetes 集群获取 secret,并将内容写入设备的文件系统。
HTTP 配置提供程序
从 HTTP (S)端点获取设备配置文件。
内联配置提供程序
允许在设备清单中指定内联设备配置文件,而不查询外部系统。

在以下部分了解更多有关配置供应商的信息:

1.5.7.1.1. 从 Git 存储库配置

您可以将设备配置存储在 Git 存储库中,如 GitHub 或 GitLab。然后,您可以添加 Git Config Provider,以便 Red Hat Edge Manager 将配置从存储库同步到设备的文件系统。

Git Config Provider 使用以下参数:

Expand

参数

描述

软件仓库

Red Hat Edge Manager 中定义的 Repository 资源的名称。

TargetRevision

要签出的存储库的分支、标签或提交。

路径

存储库中目录的绝对路径,从中文件和子目录同步到设备的文件系统。Path 目录对应于设备上的根目录(/),除非指定了 MountPath 参数。

MountPath

可选。设备文件系统中目录的绝对路径,将存储库的内容写入到其中。默认情况下,该值是文件系统 root (/)。

Repository 资源定义 Git 存储库、Red Hat Edge Manager 必须使用的协议和访问凭证。存储库只需要设置一次。设置后,存储库可用于配置单个设备或设备群。

1.5.7.1.2. Kubernetes 集群中的 secret

Red Hat Edge Manager 只能查询 Red Hat Edge Manager 在 Kubernetes secret 上运行的 Kubernetes 集群。该 secret 的内容可以写入设备文件系统上的路径。

Kubernetes Secret Provider 使用以下参数:

Expand

参数

描述

Name

secret 的名称。

NameSpace

secret 的命名空间。

MountPath

将 secret 内容写入到的设备文件系统中。

注: Red Hat Edge Manager 需要权限访问定义的命名空间中的 secret。例如,创建 ClusterRoleClusterRoleBinding 允许 flightctl-worker 服务帐户获取并列出该命名空间中的 secret。

1.5.7.1.3. 从 HTTP 服务器配置

Red Hat Edge Manager 可以查询 HTTP 服务器以进行配置。HTTP 服务器可以为设备提供静态或动态生成的配置。

HTTP 配置提供程序使用以下参数:

Expand

参数

描述

软件仓库

Red Hat Edge Manager 中定义的 Repository 资源的名称。

后缀

附加到 Repository 资源中定义的基本 URL 的后缀。后缀可以包含 path 和查询参数,如 /path/to/endpoint?query=param

FilePath

设备文件系统中文件的绝对路径,将 HTTP 服务器响应写入。

Repository 资源指定要连接的 Red Hat Edge Manager 的 HTTP 服务器,以及要使用的协议和访问凭证。存储库需要设置一次,然后该存储库可用于配置多个设备或设备群。

1.5.7.1.4. 设备规格中内联的配置

您可以在设备规格中内联指定配置。使用内联设备规格时,Red Hat Edge Manager 不需要连接到外部系统来获取配置。

Inline Config Provider 采用文件规格列表,每个文件规格采用以下参数:

Expand

参数

描述

路径

要写入内容的设备文件系统中文件的绝对路径。如果文件已存在于指定路径中,则该文件会被覆盖。

内容

文件的 UTF-8 或 base64 编码内容。

ContentEncoding

定义如何编码内容。必须是 plainbase64。默认值为 plain

模式

可选。文件的权限模式。您可以使用前导零指定八进制数,例如 0644,或者指定为没有前导零的十进制,如 420。支持 setuidsetgidsticky 位。如果没有指定,则文件的权限模式默认为 0644

用户

可选。文件的所有者。指定为名称或数字 ID。默认值为 root

可选。文件的组。指定为名称或数字 ID。

1.5.7.2. 其他资源

1.5.8. 将 fleets 配置为自动注册 MicroShift 集群

技术预览: 如果您有一组运行包含 MicroShift 的操作系统镜像的设备,您可以将您的团队配置为使用 Red Hat Advanced Cluster Management 自动注册 MicroShift 集群。

1.5.8.1. 配置设备模板

要在团队中启用自动注册,请将配置添加到设备模板中。完成以下步骤:

  1. 添加 acm-crd 资源配置,其中包含 crd.yaml 文件的 filePath、您的仓库和 后缀Fleet 资源。请参见以下示例:

    apiVersion: flightctl.io/v1alpha1
    kind: Fleet
    metadata:
     name: fleet-acm
    spec:
     selector:
      matchLabels:
       fleet: acm
     template:
      spec:
       os:
        image: <your os image>
    config:
       - name: acm-crd
        httpRef:
         filePath: /var/local/acm-import/crd.yaml
         repository: acm-registration
         suffix: /agent-registration/crds/v1
    Copy to Clipboard Toggle word wrap
  2. 使用 filePathrepositorysuffix 添加 acm-import 资源配置,如下例所示:

    - name: acm-import
        httpRef:
         filePath: /var/local/acm-import/import.yaml
         repository: acm-registration
         suffix: /agent-registration/manifests/{{.metadata.name}}
    Copy to Clipboard Toggle word wrap
  3. 可选: 如果您的 MicroShift 集群没有拉取 Red Hat Advanced Cluster Management 镜像,请添加 pull-secret 资源,如下所示:

    - name: pull-secret
        inline:
        - path: "/etc/crio/openshift-pull-secret"
         content: "{\"auths\":{...}}"
    Copy to Clipboard Toggle word wrap
  4. 如果需要,在 crd.yaml 文件和 import.yaml 文件上运行 kubectl apply -f,请添加 apply-acm-manifests 资源:

    - name: apply-acm-manifests
        inline:
        - path: "/etc/flightctl/hooks.d/afterupdating/50-acm-registration.yaml"
         content: |
          - if:
           - path: /var/local/acm-import/crd.yaml
            op: [created]
           run: kubectl apply -f /var/local/acm-import/crd.yaml
           envVars:
            KUBECONFIG: /var/lib/microshift/resources/kubeadmin/kubeconfig
          - if:
           - path: /var/local/acm-import/import.yaml
            op: [created]
           run: kubectl apply -f /var/local/acm-import/import.yaml
           envVars:
            KUBECONFIG: /var/lib/microshift/resources/kubeadmin/kubeconfig
    Copy to Clipboard Toggle word wrap
  5. 在控制台中,标记设备 fleet:acm,再点 Approve,这将自动选择 fleet-acm fleet。有关使用标签 管理 设备的信息,请参阅管理设备团队。

1.5.9. 从 CLI 上的 Git 存储库管理设备配置

技术预览: 在 Git 存储库中创建并应用设备配置。

完成以下步骤:

  1. 创建一个文件,如 site-settings-repo.yaml,其中包含名为 site-settingsRepository 资源的以下定义:

    apiVersion: flightctl.io/v1alpha1
    kind: Repository
    metadata:
      name: site-settings
    spec:
      type: git
      url: https://github.com/<your_org>/<your_repo>.git
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来创建 Repository 资源:

    flightctl apply -f site-settings-repo.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,验证资源是否已正确创建,并可以被 Red Hat Edge Manager 访问:

    flightctl get repository/site-settings
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME           TYPE  REPOSITORY URL                                 ACCESSIBLE
    site-settings  git   https://github.com/<your_org>/<your_repo>.git  True
    Copy to Clipboard Toggle word wrap
  4. 通过更新设备规格将 example-site 配置应用到设备:

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      config: 
    1
    
      - name: example-site
        configType: GitConfigProviderSpec
        gitRef:
          repository: site-settings
          targetRevision: production
          path: /etc/example-site 
    2
    
    [...]
    Copy to Clipboard Toggle word wrap
    1
    示例配置从 site-settings 存储库的 production 分支中获取 example-site 目录中的所有文件,并将文件放置在根目录(/)中。
    2
    通过创建目录结构来确保目标路径可写入。根目录(/)在 bootc 系统中不可写入。

1.5.10. 设备生命周期 hook

技术预览: Red Hat Edge Manager 代理可以使用设备生命周期 hook 在设备生命周期的特定点运行用户定义的命令。例如,您可以在操作系统镜像中添加 shell 脚本,以备份应用程序数据。然后,您可以指定该脚本必须成功运行并成功完成,然后才能代理开始更新操作系统。

另外,当磁盘上的文件发生变化时,某些应用程序或系统服务不会自动重新载入其配置文件。您可以将命令指定为另一个 hook (在代理完成更新过程后调用)来手动重新载入配置文件。

支持以下设备生命周期 hook:

Expand

生命周期 hook

描述

beforeUpdating

代理完成更新后,会调用 hook,但在更改操作系统前。如果此 hook 中的操作返回失败,代理会取消更新。

afterUpdating

在代理将更新写入磁盘后,会调用 hook。如果此 hook 中的操作返回失败,代理会取消并回滚更新。

beforeRebooting

在系统重启前会调用 hook。代理会阻止重启,直到操作完成或超时为止。如果此 hook 中的任何操作返回失败,代理会取消并回滚更新。

afterRebooting

当代理重启后首先启动时,会调用 hook。如果此 hook 中的任何操作返回失败,代理会报告失败,但将继续启动。

1.5.10.1. 规则文件

您可以通过在设备文件系统中的以下位置之一中添加规则文件来定义设备生命周期 hook:

  • /usr/lib/flightctl/hooks.d/<lifecycle_hook_name&gt;/ drop-in 目录中的规则是只读的。要向 /usr 目录添加规则,您必须在镜像构建过程中将它们添加到操作系统镜像中。
  • /etc/flightctl/hooks.d/<lifecycle_hook_name>/ drop-in 目录中的规则是 read-writable。您可以使用多种方法在运行时更新规则。

在创建并放置文件时,您必须考虑以下实践:

  • 规则的名称必须是所有小写。
  • 如果您在两个位置定义了规则,则规则将合并。
  • 如果您在生命周期 hook 目录中添加多个规则文件,则会按照文件名的字典顺序处理这些文件。
  • 如果您在两个位置定义了具有相同文件名的文件,/etc 文件夹中的文件优先于 /usr 文件夹中同名的文件。

规则文件以 YAML 格式编写,包含一个或多个操作的列表。操作可以是运行外部命令的指令。

当您为 hook 指定很多操作时,会按顺序执行操作,然后再开始下一个操作。

如果某个操作返回失败,则会跳过以下操作。

run 操作采用以下参数:

Expand

参数

描述

运行

要运行的命令的绝对路径,后跟任何标志或参数,如 /usr/bin/nmcli 连接重新加载。命令不会在 shell 中执行,因此您无法使用 shell 变量,如 $PATH$HOME,或链命令,如 |;。如果需要,您可以通过将 shell 指定为要运行的命令来启动 shell,例如 /usr/bin/bash -c 'echo $SHELL $HOME $USER'

EnvVars

可选。键值对列表,以设置为命令的环境变量。

WorkDir

可选。命令从其中运行该命令的目录。

Timeout(超时)

可选。允许操作完成的最长时间。将持续时间指定为单个正整数,后跟一个时间单位。smh 单元分别支持秒、分钟和小时数。

如果

可选。运行该操作需要满足的条件列表。如果没有提供,则操作将无条件地运行。

默认情况下,每次触发 hook 时都会执行操作。但是,对于在更新 hook 后,您可以使用 If 参数添加执行某个操作必须满足 true 的条件。否则,会跳过该操作。

例如,只有在更新期间给定文件或目录更改时才会运行操作,您可以定义采用以下参数的路径条件:

Expand

参数

描述

路径

到必须在更新期间更改的文件或目录的绝对路径,作为要执行的操作的条件。使用正斜杠(/)指定路径。如果路径指向某个目录,它必须以正斜杠(/)结尾。如果指定了到文件的路径,则该文件必须已更改为满足条件。如果您指定了目录的路径,则该目录或任何子目录中的文件必须已更改为满足条件。

op

文件操作列表,如创建、更新和删除 的,以限制执行该操作的条件对指定路径的更改。

如果您在 更新 hook 后 为操作指定路径条件,您可以在命令的参数中包含以下变量,并替换为更改文件的绝对路径:

Expand

变量

描述

${ path }

路径条件中指定的文件或目录的绝对路径。

${ files }

在更新过程中更改的文件的空格分隔列表,由路径条件涵盖。

${ CreatedFiles }

在更新期间创建的文件的空格分隔列表,由路径条件涵盖。

${ UpdatedFiles }

在更新过程中更新的文件的绝对路径以空格分隔,由路径条件涵盖。

${ RemovedFiles }

在更新过程中删除的文件的空格分隔列表,由路径条件涵盖。

Red Hat Edge Manager 代理包含 /usr/lib/flightctl/hooks.d/afterupdating/00-default.yaml 中定义的一组内置规则。如果更改了某些文件,则执行以下命令:

Expand

File

命令

描述

/etc/systemd/system/

systemctl daemon-reload

通过向 systemd 守护进程重新载入 systemd 管理器配置激活对 systemd 单元的更改。这会重新运行所有生成器,重新载入所有单元文件,并重新创建整个依赖项树。

/etc/NetworkManager/system-connections/

nmcli conn reload

NetworkManager 系统连接的更改是通过向 NetworkManager 守护进程重新加载所有连接激活的。如需更多信息,请参阅附加资源部分

/etc/firewalld/

firewall-cmd --reload

firewalld 的永久配置的更改是通过信号 firewalld 以重新加载防火墙规则作为新的运行时配置来激活。

1.5.10.2. 其他资源

1.5.11. 监控设备资源

技术预览: 您可以为设备资源设置资源监控器,并在资源利用率超过定义的阈值时创建警报。当代理警告 Red Hat Edge Manager 服务时,该服务会根据严重性级别将设备状态设置为 degradederror

资源监控器使用以下参数:

Expand

参数

描述

MonitorType

要监控的资源。目前支持 CPU 内存和磁盘资源。

SamplingInterval

monitor 样本使用的时间间隔,以一个正整数的形式指定,后跟一个时间单位: s 表示秒,m 表示分钟,h 表示小时。

AlertRules

警报规则列表。

路径

仅针对 磁盘 监控器。要监控的目录的绝对路径。使用率反映了包含路径的文件系统,即使定义的路径不是挂载点。

警报规则采用以下参数:

Expand

参数

描述

重要性

警报规则的严重性可以是 InfoWarningCritical。每个严重性级别都只允许一个警报规则。

Duration

资源使用情况测量和平均超过抽样的时间,以正整数指定,后跟一个时间单位: s 表示秒,m 表示分钟,h 代表小时。持续时间必须小于抽样间隔。

百分比

触发警报的用量阈值,以百分比值为单位。在没有%符号的情况下,值范围从 0 到 100。

描述

警报的人类可读描述。添加警报的详细信息,以帮助调试。默认情况下,警报描述 的负载高于 >%,超过

1.5.11.1. 使用 CLI 监控设备资源

通过 CLI 监控设备的资源,为您提供跟踪性能并排除问题的工具和命令。

完成以下步骤:

  • 在设备规格的 spec.resources 部分中添加资源监控器。例如,为您的磁盘添加以下监控器:

    apiVersion: flightctl.io/v1alpha1
    kind: Device
    metadata:
      name: <device_name>
    spec:
    [...]
      resources:
      - monitorType: Disk
        samplingInterval: 5s 
    1
    
        path: /application_data 
    2
    
        alertRules:
        - severity: Warning 
    3
    
          duration: 30m
          percentage: 75
          description: Disk space for application data is >75% full for over 30m.
        - severity: Critical 
    4
    
          duration: 10m
          percentage: 90
          description: Disk space for application data is >90% full over 10m.
    [...]
    Copy to Clipboard Toggle word wrap
    1
    每 5 秒进行样本使用。
    2
    检查与 /applications_data 路径关联的文件系统上的磁盘用量。
    3
    如果平均用量超过 30 分钟,则启动警告。
    4
    如果平均使用量超过 90% 超过 10 分钟,则启动一个关键警报。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部