边缘管理器
了解 Red Hat Advanced Cluster Management 的 Red Hat Edge Manager (技术预览)如何为设备和团队提供可扩展的安全边缘管理。
摘要
第 1 章 Red Hat Edge Manager (技术预览) 复制链接链接已复制到粘贴板!
技术预览: Red Hat Edge Manager 通过声明性方法简化边缘设备和应用程序的管理。
通过定义边缘设备所需的状态,包括您的操作系统版本、主机配置和应用部署,Red Hat Edge Manager 会自动在整个设备间实现和维护这些配置。
通过使用 Red Hat Advanced Cluster Management for Kubernetes 上的 Red Hat Edge Manager,您可以在 Red Hat OpenShift Container Platform 上管理非 Kubernetes 工作负载以及 Red Hat Enterprise Linux 机器上的操作系统配置。
参阅以下主题来了解更多有关在 Red Hat Advanced Cluster Management 上使用 Red Hat Edge Manager 的信息。所有功能都 处于技术预览状态 :
1.1. Red Hat Edge Manager 架构 复制链接链接已复制到粘贴板!
技术预览: 您可以使用 Red Hat Edge Manager 管理单独的设备或整个团队。Red Hat Edge Manager 使用基于代理的架构,允许可扩展且强大的设备管理,即使有有限的网络状况。
通过将 Red Hat Edge Manager 代理部署到设备中,代理会自动管理和监控该设备,同时定期与 Red Hat Edge Manager 服务通信,以检查新配置并报告设备状态。
Red Hat Edge Manager 支持基于镜像的操作系统。您可以在分发到设备的镜像中包括 Red Hat Edge Manager 代理和代理配置。
基于镜像的操作系统允许代理启动镜像的事务更新,并在更新错误时回滚到以前的版本。
Red Hat Edge Manager 架构有以下主要功能:
- Agent
- 服务
- 基于镜像的操作系统
- API Server
- 数据库
- 设备
- 设备团队
从以下部分了解更多详情:
1.1.1. Red Hat Edge Manager 代理和服务 复制链接链接已复制到粘贴板!
Red Hat Edge Manager 代理是在每个受管设备中运行的进程,它定期在 Red Hat Advanced Cluster Management hub 集群中通信 Red Hat Edge Manager 服务。代理负责以下任务:
- 将设备注册到该服务
- 定期检查服务以获取设备规格的更改,如操作系统、配置和应用程序的变化
- 独立于服务应用任何更新
- 报告设备和应用程序状态
Red Hat Edge Manager 服务负责以下任务:
- 验证和授权用户和代理
- 注册设备
- 管理设备清单
- 从单个设备或团队报告状态
该服务还与存储设备清单和目标设备配置的数据库通信。当与服务通信时,代理会轮询服务以了解配置中的更改。如果代理检测到当前的配置与目标配置分离,代理会尝试将更改应用到该设备。
当代理从服务接收一个新的目标配置时,代理会执行以下任务:
- 为了避免根据更新期间的网络连接,代理会通过网络将所有所需的资源(如操作系统镜像和应用程序容器镜像)下载到磁盘。
-
代理通过委派到
bootc来更新操作系统镜像。 - 代理通过覆盖服务发送到该设备的一组文件来更新设备的文件系统上的配置文件。
- 如有必要,代理会重启到新的操作系统。否则,代理会发出系统服务和应用程序来重新载入更新的配置。
- 代理会更新在 Podman 或 MicroShift 上运行的应用程序。
如果更新失败,或者系统重启后没有在线返回,代理会自动回滚到以前的操作系统镜像和配置。
注: 您可以在 Git 中维护团队定义。Red Hat Edge Manager 定期与数据库中的数量定义同步。
1.1.2. Red Hat Edge Manager API 服务器 复制链接链接已复制到粘贴板!
API 服务器是 Red Hat Edge Manager 服务的核心组件,允许用户和代理与服务通信。
API 服务器公开以下端点:
- 面向用户的 API 端点
- 用户可以通过 CLI 或 Web 控制台连接到面向用户的 API 端点。用户必须通过配置的外部身份验证服务进行身份验证,以获取 JSON Web Token (JWT)来发出 HTTPS 请求。
- 基于代理的 API 端点
- 代理连接到面向代理的端点,该端点使用 mTLS 保护。该服务使用 X.509 客户端证书验证设备。
Red Hat Edge Manager 服务还与各种外部系统通信,以验证和授权用户、获得 mTLS 证书签名或查询受管设备的配置。
1.1.3. 设备注册 复制链接链接已复制到粘贴板!
技术预览: 在开始管理前,您需要将设备注册到 Red Hat Edge Manager 服务。在设备上运行的 Red Hat Edge Manager 代理处理设备注册。
当代理在设备上启动时,代理会在 /etc/flightctl/config.yaml 文件中搜索配置。该文件定义以下配置:
- 注册端点,即代理连接到注册的 Red Hat Edge Manager 服务。
- 注册证书,即代理只用来安全请求 Red Hat Edge Manager 服务注册的 X.509 客户端证书和密钥。
- 可选: 任何其他代理配置。
代理通过搜索注册端点(Red Hat Edge Manager 服务)来开始注册过程,该服务在配置文件中定义。
建立一个安全的 mTLS 保护与服务的连接后,代理会向该服务提交注册请求。
该请求包括设备硬件和操作系统的描述、X.509 证书签名请求以及设备的加密身份。
注册请求必须由授权用户批准。批准请求后,该设备会受 Red Hat Edge Manager 服务信任和管理。
1.1.3.1. 注册方法 复制链接链接已复制到粘贴板!
您可以使用以下方法为该设备置备注册端点和证书:
- 早期绑定
- 您可以构建包含注册端点和证书的操作系统镜像。使用早期绑定镜像的设备可以自动连接到定义的 Red Hat Edge Manager 服务来请求注册,而无需依赖于任何置备基础架构。
设备共享相同的长期 X.509 客户端证书。然而,在这种情况下,设备绑定到特定的服务和所有者。
- 后向绑定
- 您可以在置备时定义注册端点和证书,而不是将其包含在操作系统镜像中。使用后绑定镜像的设备不绑定到单个所有者或服务,并可具有特定于设备的、简短的 X.509 客户端证书。
但是,后向绑定需要虚拟化或裸机置备基础架构,这些基础架构可以从 Red Hat Edge Manager 服务请求特定于设备的端点和证书,并使用 cloud-init、Ignition 或 kickstart 等机制将其注入置备的系统。
注: 注册证书仅用于保护网络连接以提交注册请求。注册证书不参与注册请求的实际验证或批准。注册证书不再用于注册的设备,因为设备依赖特定于设备的管理证书。
1.2. 启用 Red Hat Edge Manager 复制链接链接已复制到粘贴板!
技术预览: 使 Red Hat Edge Manager 能够大规模管理边缘设备和应用程序。
需要的访问权限:集群管理员
1.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 您需要一个 Red Hat Advanced Cluster Management hub 集群。请参阅 安装和升级。
1.2.2. 从 MultiClusterHub 资源启用 Red Hat Edge Manager 复制链接链接已复制到粘贴板!
对 MultiClusterHub 资源进行补丁,然后验证是否启用了 Red Hat Edge Manager。完成以下步骤:
运行以下命令,在
Multiclusterhub资源中的spec.overrides.components的edge-manager-preview条目中将enabled字段设置为true:oc patch multiclusterhubs.operator.open-cluster-management.io multiclusterhub -n rhacm --type json --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"edge-manager-preview","enabled": true}}]'在 hub 集群中运行以下命令来验证 Red Hat Edge Manager 是否已启用:
oc -n open-cluster-management get pods | grep flightctl-api请参见以下示例输出:
flightctl-api 2/2 Running 0 43s
1.2.3. 启用 Red Hat Edge Manager 控制台 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform web 控制台中启用 Red Hat Edge Manager。完成以下步骤:
运行以下命令打开控制台进行编辑:
oc edit console.v1.operator.openshift.io-
通过在
spec.plugins部分添加flightctl-plugin来启用 Red Hat Edge Manager 控制台。
1.2.4. Red Hat Edge Manager 授权 复制链接链接已复制到粘贴板!
技术预览: Red Hat Edge Manager Kubernetes 授权使用基于角色的访问控制(RBAC)来控制 Red Hat Edge Manager API 端点的授权。
您可以使用 open-cluster-management 命名空间中的以下角色设置 Kubernetes RBAC 授权:
-
命名空间范围的授权的
Role和RoleBinding -
用于集群范围的授权的
ClusterRole和ClusterRoleBinding
您可以使用 Role 或 ClusterRole API 对象来定义特定角色允许的 API 资源和操作动词。
RoleBinding 或 ClusterRoleBinding API 对象向一个或多个用户授予角色中定义的权限。
如需更多信息,请参阅基于角色的访问控制。
1.2.4.1. Red Hat Edge Manager RBAC 角色 复制链接链接已复制到粘贴板!
Red Hat Edge Manager 有以下默认角色及其权限:
| 角色 | 权限 | Resources |
|
| All | All |
|
|
|
|
|
|
|
|
|
|
| |
|
|
| |
|
|
|
|
|
|
| |
|
|
|
1.2.4.2. Red Hat Edge Manager 授权资源 复制链接链接已复制到粘贴板!
下表包含 Red Hat Edge Manager API 端点的路由、名称、资源名称和操作动词:
| Route | Name | 资源 | Verb |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3. Red Hat Edge Manager 的操作系统镜像 复制链接链接已复制到粘贴板!
基于镜像的操作系统允许将操作系统和配置和应用程序版本化、部署和更新为单个单元。
使用基于镜像的操作系统可以降低对以下功能的操作风险:
- 最小化测试和部署环境之间的偏移。
- 通过事务更新和回滚减少失败的更新,并降低维护和替换成本。
Red Hat Edge Manager 侧重于运行可引导容器镜像(bootc)的基于镜像的 Linux 操作系统。如需更多信息,请参阅 bootc。
重要: bootc 工具不会更新基于软件包的操作系统。
了解如何从以下内容构建镜像:
-
选择基础
bootc操作系统镜像,如 Fedora、CentOS 或 RHEL 镜像。 创建一个将以下项目分层到基础
bootc镜像的容器文件:- Red Hat Edge Manager 代理和配置。
- 可选:特定于您的目标部署环境的任何驱动程序。
- 可选:主机配置,如证书颁发机构捆绑包,以及所有部署通用的应用程序工作负载。
-
使用
podman和skopeo构建、发布和签署引导操作系统镜像。 -
使用
bootc-image-builder创建操作系统磁盘镜像。 -
使用
skopeo构建、发布和签署操作系统磁盘镜像。
注: 操作系统磁盘镜像包含分区、卷、文件系统和初始 bootc 镜像。在置备过程中,只需要创建一次操作系统磁盘镜像。
对于后续的设备更新,只需要 bootc 操作系统镜像,其中包含文件系统中的文件。
请参阅以下镜像构建主题:
1.3.1. 构建镜像的特别注意事项 复制链接链接已复制到粘贴板!
技术预览: 以下主题涵盖了为 Red Hat Edge Manager 构建镜像的特殊注意事项:
1.3.1.1. 通过动态运行时配置构建时间配置 复制链接链接已复制到粘贴板!
在构建时向操作系统镜像添加配置。在构建时添加配置可确保将配置经过测试、分发和更新在一起。如果构建时配置不可行或需要,您可以使用 Red Hat Edge Manager 在运行时动态配置设备。
在以下情况下首选动态运行时配置:
- 您有一个特定于部署或特定于站点的配置,如主机名或特定站点的网络凭证。
- 您有不保护与镜像分发的 secret。
- 您有应用程序工作负载需要在不重启的情况下添加、更新或删除,或者它们比操作系统更快。
1.3.1.2. 配置 /usr 目录 复制链接链接已复制到粘贴板!
如果配置是静态的,且应用程序或服务支持该配置,请将配置文件放在 /usr 目录中。通过将配置放在 /usr 目录中,配置保持只读状态,并由镜像完全定义。
在以下情况下,无法将配置放在 /usr 目录中:
- 配置是特定于部署或特定于站点的。
-
应用程序或服务只支持从
/etc目录中读取配置。 - 可能需要在运行时更改配置。
1.3.1.3. 置入目录 复制链接链接已复制到粘贴板!
使用置入目录来添加、替换或删除服务聚合的配置文件。不要直接编辑可能导致从目标配置分离的配置文件。
注意: 您可以在目录名称的末尾通过 .d/ 识别置入目录。例如: /etc/containers/certs.d、/etc/cron.d 和 /etc/NetworkManager/conf.d。
1.3.1.4. 使用脚本的操作系统镜像 复制链接链接已复制到粘贴板!
避免执行更改文件系统的脚本或命令。bootc 或 Red Hat Edge Manager 可以覆盖可能导致 deviation 或失败完整性检查的更改的文件。
相反,在镜像构建期间运行此类脚本或命令,因此更改是镜像的一部分。或者,使用 Red Hat Edge Manager 的配置管理机制。
1.3.1.5. 其他资源 复制链接链接已复制到粘贴板!
- 有关 构建镜像,请参阅通用指南。
- 有关在运行时配置设备的更多信息,请参阅边缘设备的操作系统配置。
1.3.2. 为 Red Hat Edge Manager 构建 引导 操作系统镜像 复制链接链接已复制到粘贴板!
技术预览: 要准备由 Red Hat Edge Manager 管理的设备,请构建包含 Red Hat Edge Manager 代理的 bootc 操作系统镜像。然后为您的设备构建操作系统磁盘镜像。
如需更多信息,请参阅以下部分:
1.3.2.1. 先决条件 复制链接链接已复制到粘贴板!
请参阅以下构建 引导操作系统镜像 的先决条件:
-
安装
podman版本 5.0 或更高版本,以及skopeo版本 1.14 或更高版本。请参阅 获取容器工具。 -
安装
bootc-image-builder。请参阅 安装 bootc-image-builder。
1.3.2.2. 安装 Red Hat Edge Manager CLI 复制链接链接已复制到粘贴板!
要安装 Red Hat Edge Manager CLI,请完成以下步骤:
运行以下命令,为适合您的系统的软件仓库启用订阅管理器:
subscription-manager repos --enable rhacm-2.13-for-rhel-<version>-<arch>-rpms有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅附加资源部分。
使用您的软件包管理器安装
flightctlCLI。运行以下命令:sudo dnf install flightctl
1.3.2.3. 可选:为早期绑定请求注册证书 复制链接链接已复制到粘贴板!
如果要在镜像中包含代理配置,请完成以下步骤:
使用
flightctlCLI 使用 Red Hat Edge Manager 服务进行身份验证。运行以下命令:flightctl login --username=<your_user> --password=<your_password> https://<rhem_api_server_url>注: CLI 使用主机的证书颁发机构池来验证 Red Hat Edge Manager 服务的身份。如果您不将证书颁发机构证书添加到池中,则验证可能会导致 TLS 验证错误。您可以通过在命令中添加
--insecure-skip-tls-verify标志来绕过服务器验证。运行以下命令,以代理配置文件的格式获取注册凭证:
flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml备注:
-
--expiration=365d选项指定凭据有效期为一年。 --output=embedded选项指定输出是一个带有嵌入注册凭证的代理配置文件。返回的
config.yaml包含 Red Hat Edge Manager 服务、证书颁发机构捆绑包以及代理注册客户端证书和密钥的 URL。请参见以下示例:
enrollment-service: authentication: client-certificate-data: LS0tLS1CRUdJTiBD... client-key-data: LS0tLS1CRUdJTiBF... service: certificate-authority-data: LS0tLS1CRUdJTiBD... server: https://agent-api.flightctl.127.0.0.1.nip.io:7443 enrollment-ui-endpoint: https://ui.flightctl.127.0.0.1.nip.io:8081-
1.3.2.4. 可选:使用镜像 pull secret 复制链接链接已复制到粘贴板!
如果您的设备依赖于私有存储库中的容器,您必须为 registry 配置 pull secret。完成以下步骤:
根据您使用的容器镜像类型,将 pull secret 放在该设备中的以下一个或多个系统路径中:
-
操作系统镜像使用
/etc/ostree/auth.json路径。 -
应用程序容器镜像使用
/root/.config/containers/auth.json路径。
重要: 在消耗 secret 前,该设备中必须存在 pull secret。
-
操作系统镜像使用
确保 pull secret 具有以下格式:
{ "auths": { "registry.example.com": { "auth": "base64-encoded-credentials" } } }
如需更多信息,请参阅附加资源部分。
1.3.2.5. 使用 bootc构建操作系统镜像 复制链接链接已复制到粘贴板!
使用包含 Red Hat Edge Manager 代理的 bootc 构建操作系统镜像。您可以选择在操作系统镜像中包含以下项目:
- 早期绑定的代理配置
- 任何驱动程序
- 主机配置
- 您需要的应用程序工作负载
完成以下步骤:
创建包含以下内容的
Containerfile文件来构建基于 RHEL 9 的操作系统镜像,其中包含 Red Hat Edge Manager 代理和配置:FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version>1 RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \ dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ systemctl mask bootc-fetch-apply-updates.timer2 重要: 如果您的设备依赖于私有存储库中的容器,则设备 pull secret 必须放在
/etc/ostree/auth.json路径中。在 secret 可以被消耗前,该设备中必须存在 pull secret。可选: 要启用
podman-compose应用程序支持,请在Containerfile文件中添加以下部分:RUN dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service可选: 如果您为早期绑定创建了
config.yaml,请在Containerfile中添加以下部分:ADD config.yaml /etc/flightctl/
如需更多信息,请参阅 可选:为早期绑定请求注册证书。
运行以下命令定义开放容器项目(OCI) registry:
OCI_REGISTRY=registry.redhat.io运行以下命令,定义您具有写入权限的镜像存储库:
OCI_IMAGE_REPO=${OCI_REGISTRY}/<your_org>/<your_image>运行以下命令来定义镜像标签:
OCI_IMAGE_TAG=v1为您的目标平台构建操作系统镜像:
sudo podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
1.3.2.6. 使用 Sigstore 签名并发布 bootc 操作系统镜像 复制链接链接已复制到粘贴板!
要使用 Sigstore 为 bootc 操作系统镜像签名,请完成以下步骤:
生成名为
signingkey.pub和signingkey.private的 Sigstore 密钥对:skopeo generate-sigstore-key --output-prefix signingkey配置 Podman 和 Skopeo 等容器工具,将 Sigstore 签名与您的签名镜像一起上传到 OCI registry:
sudo tee "/etc/containers/registries.d/${OCI_REGISTRY}.yaml" > /dev/null <<EOF docker: ${OCI_REGISTRY}: use-sigstore-attachments: true EOF运行以下命令登录到您的 OCI registry:
sudo podman login ${OCI_REGISTRY}运行以下命令签名并发布操作系统镜像:
sudo podman push \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
1.3.2.7. 构建操作系统磁盘镜像 复制链接链接已复制到粘贴板!
构建包含设备文件系统的操作系统磁盘镜像。完成以下步骤:
运行以下命令,创建一个名为
output的目录:mkdir -p output使用
bootc-image-builder从您的操作系统镜像生成类型为iso的操作系统磁盘镜像。运行以下命令:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type iso \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 bootc-image-builder 完成后,您可以在 ${PWD}/output/bootiso/install.iso 路径中找到 ISO 磁盘镜像。
1.3.2.8. 可选:将操作系统磁盘镜像签名并发布到开放容器项目 registry 复制链接链接已复制到粘贴板!
将您的磁盘镜像签名并发布到您的开放容器项目(OCI)注册表。另外,您还可以将磁盘镜像压缩并作为 OCI 工件发布到与 bootc 镜像相同的 OCI registry,这有助于统一托管并分发 bootc 和 disk 镜像。要将 ISO 磁盘镜像发布到在 bootc 镜像后命名的存储库,并附加 /diskimage-iso,请完成以下步骤:
1.3.2.8.1. 先决条件 复制链接链接已复制到粘贴板!
- 已使用 Sigstore 创建私钥。请参阅使用 Sigstore 签名并发布 bootc 操作系统镜像。
1.3.2.8.2. 可选:签署操作系统磁盘镜像并将其发布到 OCI registry 复制链接链接已复制到粘贴板!
签署您的磁盘镜像并将其发布到您的 OCI 注册表。完成以下步骤:
将 ISO 磁盘镜像所在的目录的所有者从
root更改为您的当前用户。运行以下命令:sudo chown -R $(whoami):$(whoami) "${PWD}/output"定义
OCI_DISK_IMAGE_REPO环境变量,使其与附加/diskimage-iso的bootc镜像相同的存储库。运行以下命令:OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-iso运行以下命令来创建清单列表:
sudo podman manifest create \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}运行以下命令,将 ISO 磁盘镜像作为 OCI 工件添加到清单列表中:
sudo podman manifest add \ --artifact --artifact-type application/vnd.diskimage.iso \ --arch=amd64 --os=linux \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ "${PWD}/output/bootiso/install.iso"使用您的私有 Sigstore 密钥为清单列表签名,并将镜像推送到 registry。运行以下命令:
sudo podman manifest push --all \ --sign-by-sigstore-private-key ./signingkey.private \ ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} \ docker://${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
1.3.2.9. 其他资源 复制链接链接已复制到粘贴板!
- 有关 Red Hat Edge Manager 可用存储库的完整列表,请参阅 下载 Red Hat Advanced Cluster Management for Kubernetes。
- 有关在不同的目标平台上构建操作系统镜像的更多信息,请参阅配置容器 pull secret。
1.3.3. 为特定目标平台构建 复制链接链接已复制到粘贴板!
为了优化置备并与 Red Hat OpenShift Virtualization 和 VMware vSphere 集成,可以使用 cloud-init 工具提供注册证书和代理配置,而不是将其嵌入到镜像中。另外,您还可以包含适当的客户机工具以更好地集成平台。这个过程生成特定于平台的镜像格式,如 Red Hat OpenShift Virtualization 的 QCOW2 和 vSphere 的 VMDK。
1.3.3.1. 为 Red Hat OpenShift Virtualization 构建镜像 复制链接链接已复制到粘贴板!
在为 Red Hat OpenShift Virtualization 构建操作系统镜像和磁盘镜像时,您可以按照以下更改为 Red Hat Edge Manager 进程构建 bootc 操作系统镜像 :
-
在置备虚拟设备时,通过
cloud-init注入注册证书或代理配置来使用后绑定。 -
将
open-vm-tools客户机工具添加到镜像中。 -
构建类型为
qcow2的磁盘镜像,而不是iso。
完成对以下步骤的步骤:
- 构建基于 RHEL 9 的操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
使用以下内容创建一个名为
Containerfile的文件:FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \ dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service RUN dnf -y install cloud-init open-vm-tools && \ dnf -y clean all && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ systemctl enable vmtoolsd.service可选: 要启用
podman-compose应用程序支持,请在Containerfile文件中添加以下部分:RUN dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ dnf -y install podman-compose && \ dnf -y clean all && \ systemctl enable podman.service
按照通用镜像构建过程,构建、签名和发布 bootc 操作系统镜像。
运行以下命令,创建一个名为
output的目录:mkdir -p output运行以下命令,从您的操作系统镜像生成类型为
vmdk的操作系统磁盘镜像:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type qcow2 \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 路径中找到磁盘镜像。
Red Hat OpenShift Virtualization 可以从开放容器项目(OCI) registry 下载磁盘镜像,但它使用容器磁盘镜像而不是 OCI 工件。
完成以下步骤以构建、签名并上传 QCoW2 磁盘镜像:
创建名为
Containerfile.qcow2的文件,其内容如下:FROM registry.access.redhat.com/ubi9/ubi:latest AS builder ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/1 RUN chmod 0440 /disk/*2 FROM scratch COPY --from=builder /disk/* /disk/3 构建、签名和发布您的磁盘镜像。运行以下命令:
sudo chown -R $(whoami):$(whoami) "${PWD}/output" OCI_DISK_IMAGE_REPO=${OCI_IMAGE_REPO}/diskimage-qcow2 sudo podman build -t ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} -f Containerfile.qcow2 . sudo podman push --sign-by-sigstore-private-key ./signingkey.private ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG}
1.3.3.2. 为 VMware vSphere 构建镜像 复制链接链接已复制到粘贴板!
在为 VMware vSphere 构建操作系统镜像和磁盘镜像时,您可以按照以下更改为 Red Hat Edge Manager 进程构建 bootc 操作系统镜像 :
-
在置备虚拟设备时,通过
cloud-init注入注册证书或代理配置来使用后绑定。 -
将
open-vm-tools客户机工具添加到镜像中。 -
构建类型为
vmdk的磁盘镜像,而不是iso。
构建基于 RHEL 9 的操作系统镜像,其中包含 Red Hat Edge Manager 代理和虚拟机客户机工具,但排除代理配置。
通过对以下步骤的更改完成通用步骤:
使用以下内容创建一个名为
Containerfile的文件:FROM registry.redhat.io/rhel9/rhel-bootc:<required_os_version> RUN subscription-manager repos --enable rhacm-2.13-for-rhel-9-$(uname -m)-rpms && \ dnf -y install flightctl-agent && \ dnf -y clean all && \ systemctl enable flightctl-agent.service && \ RUN dnf -y install cloud-init open-vm-tools && \ dnf -y clean all && \ ln -s ../cloud-init.target /usr/lib/systemd/system/default.target.wants && \ systemctl enable vmtoolsd.service运行以下命令,创建一个名为
output的目录:mkdir -p output运行以下命令,从您的操作系统镜像生成类型为
vmdk的操作系统磁盘镜像:sudo podman run --rm -it --privileged --pull=newer \ --security-opt label=type:unconfined_t \ -v "${PWD}/output":/output \ -v /var/lib/containers/storage:/var/lib/containers/storage \ registry.redhat.io/rhel9/bootc-image-builder:latest \ --type vmdk \ ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG}
当 bootc-image-builder 完成后,您可以在 ${PWD}/output/vmdk/disk.vmdk 路径中找到磁盘镜像。
1.4. 置备设备 复制链接链接已复制到粘贴板!
技术预览: 您可以在不同环境中使用 Red Hat Edge Manager 置备设备。使用您构建的用于 Red Hat Edge Manager 的操作系统镜像或磁盘镜像,并根据您的目标环境置备一个物理或者虚拟设备。
需要的访问权限:集群管理员
请参阅以下文档:
1.4.1. 置备物理设备 复制链接链接已复制到粘贴板!
技术预览: 当您使用 bootc-image-builder 工具从操作系统镜像构建 ISO 磁盘镜像时,该镜像与可用于下载的 RHEL ISO 类似。但是,您的操作系统镜像内容嵌入 ISO 磁盘镜像中。
要在不访问网络的情况下将 ISO 磁盘镜像安装到裸机系统中,请参阅 部署自定义 ISO 容器镜像。
有关通过网络安装 ISO 的详情,请参考 通过 PXE 引导部署 ISO bootc 镜像。
1.4.2. 在 OpenShift Virtualization 中置备设备 复制链接链接已复制到粘贴板!
技术预览: 您可以使用托管在 OCI 容器 registry 上的 QCoW2 容器磁盘镜像在 OpenShift Virtualization 上置备虚拟机。
如果您的操作系统镜像还没有包含 Red Hat Edge Manager 代理注册配置,您可以在置备时通过 cloud-init 用户数据注入配置。
如需更多信息,请参阅附加资源部分。
1.4.2.1. 先决条件 复制链接链接已复制到粘贴板!
-
已安装
flightctlCLI 并登录到 Red Hat Edge Manager 服务实例。 -
已安装
ocCLI,使用它来登录到 OpenShift 集群实例,并改为您要创建虚拟机的项目。
1.4.2.2. 创建 cloud-init 配置 复制链接链接已复制到粘贴板!
要创建 cloud-init 配置,请完成以下步骤:
请求一个新的 Red Hat Edge Manager 代理注册配置,并将其存储在名为
config.yaml的文件中。运行以下命令:flightctl certificate request --signer=enrollment --expiration=365d --output=embedded > config.yaml创建名为
cloud-config.yaml的云配置用户数据文件,该文件将代理配置放在第一次引导时的正确位置。运行以下命令:cat <<EOF > cloud-config.yaml #cloud-config write_files: - path: /etc/flightctl/config.yaml content: $(cat config.yaml | base64 -w0) encoding: b64 EOF创建包含云配置用户数据文件的 Kubernetes
Secret:oc create secret generic enrollment-secret --from-file=userdata=cloud-config.yaml
1.4.2.3. 创建虚拟机 复制链接链接已复制到粘贴板!
创建一个虚拟机,其主磁盘填充自您的 QCoW2 容器磁盘镜像和 cloud-init 配置驱动器,该磁盘从您的注册 secret 填充。完成以下步骤:
运行以下命令,创建一个包含
VirtualMachine资源清单的文件:cat <<EOF > my-bootc-vm.yaml apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: my-bootc-vm spec: runStrategy: RerunOnFailure template: spec: domain: cpu: cores: 1 memory: guest: 1024M devices: disks: - name: containerdisk disk: bus: virtio - name: cloudinitdisk disk: bus: virtio volumes: - name: containerdisk containerDisk: image: ${OCI_DISK_IMAGE_REPO}:${OCI_IMAGE_TAG} - name: cloudinitdisk cloudInitConfigDrive: secretRef: name: enrollment-secret EOF运行以下命令,将资源清单应用到集群:
oc apply -f my-bootc-vm.yaml
1.4.2.4. 其他资源 复制链接链接已复制到粘贴板!
-
有关如何通过
cloud-init用户数据注入配置的更多信息,请参阅 Cloud-init 文档。 - 有关特定 目标平台,请参阅构建。
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. 先决条件 复制链接链接已复制到粘贴板!
- 您必须安装 Red Hat Edge Manager CLI。请参阅安装 Red Hat Edge Manager CLI。
- 您必须登录到 Red Hat Edge Manager 服务。
1.5.1.2. 使用 CLI 注册设备 复制链接链接已复制到粘贴板!
您必须先将设备注册到 Red Hat Edge Manager 服务中,然后才能管理它们。完成以下步骤:
运行以下命令,列出当前等待批准的所有设备:
flightctl get enrollmentrequests --field-selector="status.approval.approved != true"请参见以下示例输出:
NAME APPROVAL APPROVER APPROVED LABELS <device_name> Pending <none> <none>注: 唯一的设备名称由代理生成,且无法更改。代理选择其公钥的 base32 编码的哈希值作为设备名称。
通过指定注册请求的名称来批准注册请求。另外,您可以使用-
labelor-l标志向设备添加标签。请参见以下示例:flightctl approve -l region=eu-west-1 -l site=factory-berlin enrollmentrequest/54shovu028bvj6stkovjcvovjgo0r48618khdd5huhdjfn6raskg请参见以下示例输出:
NAME APPROVAL APPROVER APPROVED LABELS <device_name> Approved user region=eu-west-1,site=factory-berlin
批准注册请求后,服务会发出管理证书,并在清单中注册该设备。该设备现在可以管理。
1.5.2. 查看设备 复制链接链接已复制到粘贴板!
技术预览: 要获取有关清单中设备的更多信息,您可以使用 Red Hat Edge Manager CLI。
1.5.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 您必须安装 Red Hat Edge Manager CLI。请参阅安装 Red Hat Edge Manager CLI。
- 您必须登录到 Red Hat Edge Manager 服务。
- 您必须至少注册一个设备。
1.5.2.2. 查看设备清单和设备详情 复制链接链接已复制到粘贴板!
查看设备清单中的设备。完成以下步骤:
运行以下命令,查看设备清单中的设备:
flightctl get devices请参见以下示例输出:
NAME ALIAS OWNER SYSTEM UPDATED APPLICATIONS LAST SEEN <device_name> <none> <none> Online Up-to-date <none> 3 seconds ago运行以下命令,以 YAML 格式查看该设备的详情:
flightctl get device/<device_name> -o yaml请参见以下示例输出:
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.52 config: - name: my-os-configuration3 configType: GitConfigProviderSpec gitRef: path: /configuration repository: my-configuration-repo targetRevision: production status: os: image: quay.io/flightctl/rhel:9.54 config: renderedVersion: "1"5 applications: data: {}6 summary: status: Unknown7 resources:8 cpu: Healthy disk: Healthy memory: Healthy systemInfo:9 architecture: amd64 bootID: 037750f7-f293-4c5b-b06e-481eef4e883f operatingSystem: linux summary: info: "" status: Online10 updated: status: UpToDate11 lastSeen: "2024-08-28T11:45:34.812851905Z"12 [...]
1.5.3. 标签和标签选择器 复制链接链接已复制到粘贴板!
技术预览: 您可以通过分配标签来组织资源,包括独立设备、团队和任何其他资源。例如,您可以使用标签记录位置、硬件类型或目的。Red Hat Edge Manager 标签遵循与 Kubernetes 标签和标签选择器相同的语法、原则和运算符。
您可以在查看设备清单或将操作应用到设备时选择带有标签的设备。
标签使用 key=value 格式,其中您要使用键对设备进行分组。例如,如果您的标签遵循 site=<location& gt; 命名约定,您可以根据站点对设备进行分组。
您还可以使用仅包含键的标签。
标签必须遵循以下规则才能有效:
- 键和值必须是 63 个字符或更少。
-
键和值可由字母数字字符组成(
a-z、A-Z、0-9)。 -
键和值也可以包含短划线(
-)、下划线(_)、句点(.),但不能包含第一个或最后一个字符。 - 值可以被省略。
您可以使用以下方法将标签应用到资源:
- 在镜像构建期间定义一组默认标签,在部署过程中自动应用到所有设备。
- 在注册期间分配初始标签。
- 在注册后分配标签。
标记资源时,您可以通过编写标签选择器来选择资源子集。标签选择器是一个以逗号分隔的标签列表,用于选择具有相同标签集的资源。
请参见以下示例:
| 标签选择器示例 | 选择的设备 |
|---|---|
|
|
具有 |
|
|
具有 |
|
|
具有 |
如需更多信息,请参阅 标签和选择器。
1.5.4. 使用标签 复制链接链接已复制到粘贴板!
技术预览: 您可以使用标签组织设备。
1.5.4.1. 使用 CLI 查看设备及其标签 复制链接链接已复制到粘贴板!
查看设备及其关联的标签。您可以使用标签来组织设备和设备群。
完成以下步骤:
使用
-o wide选项查看清单中的设备:flightctl get devices -o wide请参见以下示例输出:
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使用
-l <key=value> 选项查看清单中的带有特定标签或一组标签的设备:flightctl get devices -l site=factory-berlin -o wide请参见以下示例输出:
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
1.5.4.2. 使用 CLI 更新标签 复制链接链接已复制到粘贴板!
使用 CLI 更新设备上的标签。完成以下步骤:
运行以下命令,将设备的当前定义导出到文件中:
flightctl get device/<device1_name> -o yaml > my_device.yaml使用您的首选编辑器编辑
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: [...]运行以下命令保存文件并应用更新的设备定义:
flightctl apply -f my_device.yaml运行以下命令验证更改是否已应用
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
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. 其他支持的字段列表 复制链接链接已复制到粘贴板!
除了元数据字段外,每个资源都有自己的唯一字段集合,您可以根据特定于资源的属性对过滤和选择提供更大的灵活性。
下表列出了为每个资源类型过滤支持的字段:
| Kind | 字段 |
| 证书签名请求 |
|
| 设备 |
|
| 注册请求 |
|
| fleet |
|
| 软件仓库 |
|
| 资源同步 |
|
1.5.5.3. 字段发现 复制链接链接已复制到粘贴板!
有些 Red Hat Edge Manager 资源可能会公开额外的支持字段。您可以使用 flightctl 命令和-- field-selector 选项发现支持的字段。如果您尝试使用 unsupported 字段,错误消息列出了可用的支持字段。请参见以下示例:
flightctl get device --field-selector='text'
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]
字段 文本 不是用于过滤的有效字段。错误消息提供了可用于 Device 资源的 with -field-selector 的受支持字段列表。
然后,您可以使用其中一个支持的字段:
flightctl get devices --field-selector 'metadata.alias contains cluster'
metadata.alias 字段使用 包含 运算符进行检查,以查看它是否具有值 cluster。
1.5.5.3.1. 例子 复制链接链接已复制到粘贴板!
按名称排除特定设备
以下命令根据其名称过滤出特定设备:
flightctl get devices --field-selector 'metadata.name!=<device_name>'
根据所有者、标签并创建时间戳过滤
此命令检索由 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'
根据所有者、标签和设备状态过滤
以下命令检索由 Fleet/pos-fleet 拥有的设备,位于 us 区域,并且 status.updated.status 为 Unknown 或 OutOfDate :
flightctl get devices --field-selector 'metadata.owner=Fleet/pos-fleet, status.updated.status in (Unknown, OutOfDate)' -l 'region=us'
1.5.5.4. 支持的 Operator 复制链接链接已复制到粘贴板!
| Operator | 符号 | 描述 |
| Exists |
|
检查是否存在字段。例如, |
| DoesNotExist |
| 检查字段是否不存在。 |
| 等于 |
| 检查字段是否等于一个值。 |
| DoubleEquals |
| 另一种形式的相等性检查。 |
| NotEquals |
| 检查字段是否不等于值。 |
| GreaterThan |
| 检查字段是否大于一个值。 |
| GreaterThanOrEquals |
| 检查字段是否大于或等于一个值。 |
| LessThan |
| 检查字段是否小于一个值。 |
| LessThanOrEquals |
| 检查字段是否小于或等于一个值。 |
| In |
| 检查字段是否位于值列表中。 |
| NotIn |
| 检查字段是否不在值列表中。 |
| contains |
| 检查字段是否具有值。 |
| NotContains |
| 检查字段是否包含值。 |
1.5.5.5. 根据字段类型的 Operator 使用 复制链接链接已复制到粘贴板!
每个字段类型支持特定的 Operator 子集:
| 字段类型 | 支持的 Operator | value |
| 字符串 |
| 文本字符串 |
| Timestamp |
| RFC 3339 格式 |
| Number |
less
| 数字格式 |
| 布尔值 |
|
布尔值格式( |
| Array |
| 数组元素 |
1.5.6. 更新操作系统 复制链接链接已复制到粘贴板!
技术预览: 您可以通过更新设备规格中的目标操作系统镜像名称或版本来更新设备的操作系统。
当 Red Hat Edge Manager 代理与服务通信时,代理会检测到请求的更新。然后,代理会自动在后台下载和验证新操作系统版本。
Red Hat Edge Manager 代理根据更新策略调度实际系统更新。在调度的更新时间,代理会在不中断当前运行的操作系统的情况下安装新版本。
最后,设备会重启到新版本。
Red Hat Edge Manager 目前支持以下镜像类型和镜像引用格式:
| 镜像类型 | 镜像参考 |
| bootc |
对容器 registry 的 OCI 镜像引用。示例: |
在此过程中,代理会向服务发送状态更新。您可以通过查看设备状态来监控更新过程。如需更多信息,请参阅查看设备。
1.5.6.1. 在 CLI 上更新操作系统 复制链接链接已复制到粘贴板!
使用 CLI 更新设备。完成以下步骤:
运行以下命令,获取设备的当前资源清单:
flightctl get device/<device_name> -o yaml > my_device.yaml编辑
Device资源,以指定新的操作系统名称和版本目标。apiVersion: flightctl.io/v1alpha1 kind: Device metadata: name: <device_name> spec: [...] os: image: quay.io/flightctl/rhel:9.5 [...]运行以下命令来应用更新的
Device资源:flightctl apply -f <device_name>.yaml
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 使用以下参数:
| 参数 | 描述 |
|
|
Red Hat Edge Manager 中定义的 |
|
| 要签出的存储库的分支、标签或提交。 |
|
|
存储库中目录的绝对路径,从中文件和子目录同步到设备的文件系统。 |
|
|
可选。设备文件系统中目录的绝对路径,将存储库的内容写入到其中。默认情况下,该值是文件系统 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 使用以下参数:
| 参数 | 描述 |
|
| secret 的名称。 |
|
| secret 的命名空间。 |
|
| 将 secret 内容写入到的设备文件系统中。 |
注: Red Hat Edge Manager 需要权限访问定义的命名空间中的 secret。例如,创建 ClusterRole 和 ClusterRoleBinding 允许 flightctl-worker 服务帐户获取并列出该命名空间中的 secret。
1.5.7.1.3. 从 HTTP 服务器配置 复制链接链接已复制到粘贴板!
Red Hat Edge Manager 可以查询 HTTP 服务器以进行配置。HTTP 服务器可以为设备提供静态或动态生成的配置。
HTTP 配置提供程序使用以下参数:
| 参数 | 描述 |
|
|
Red Hat Edge Manager 中定义的 |
|
|
附加到 |
|
| 设备文件系统中文件的绝对路径,将 HTTP 服务器响应写入。 |
Repository 资源指定要连接的 Red Hat Edge Manager 的 HTTP 服务器,以及要使用的协议和访问凭证。存储库需要设置一次,然后该存储库可用于配置多个设备或设备群。
1.5.7.1.4. 设备规格中内联的配置 复制链接链接已复制到粘贴板!
您可以在设备规格中内联指定配置。使用内联设备规格时,Red Hat Edge Manager 不需要连接到外部系统来获取配置。
Inline Config Provider 采用文件规格列表,每个文件规格采用以下参数:
| 参数 | 描述 |
|
| 要写入内容的设备文件系统中文件的绝对路径。如果文件已存在于指定路径中,则该文件会被覆盖。 |
|
| 文件的 UTF-8 或 base64 编码内容。 |
|
|
定义如何编码内容。必须是 |
|
|
可选。文件的权限模式。您可以使用前导零指定八进制数,例如 |
|
|
可选。文件的所有者。指定为名称或数字 ID。默认值为 |
|
| 可选。文件的组。指定为名称或数字 ID。 |
1.5.7.2. 其他资源 复制链接链接已复制到粘贴板!
- 有关设备生命周期 hook 以及 Red Hat Edge Manager 代理使用的默认规则的更多信息,请参阅 设备生命周期 hook。
- 有关授予 Red Hat Edge Manager 权限的更多信息,请参阅 Red Hat Edge Manager 授权。
1.5.8. 将 fleets 配置为自动注册 MicroShift 集群 复制链接链接已复制到粘贴板!
技术预览: 如果您有一组运行包含 MicroShift 的操作系统镜像的设备,您可以将您的团队配置为使用 Red Hat Advanced Cluster Management 自动注册 MicroShift 集群。
1.5.8.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使用
filePath、repository和suffix添加acm-import资源配置,如下例所示:- name: acm-import httpRef: filePath: /var/local/acm-import/import.yaml repository: acm-registration suffix: /agent-registration/manifests/{{.metadata.name}}可选: 如果您的 MicroShift 集群没有拉取 Red Hat Advanced Cluster Management 镜像,请添加
pull-secret资源,如下所示:- name: pull-secret inline: - path: "/etc/crio/openshift-pull-secret" content: "{\"auths\":{...}}"如果需要,在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-
在控制台中,标记设备
fleet:acm,再点 Approve,这将自动选择fleet-acmfleet。有关使用标签 管理 设备的信息,请参阅管理设备团队。
1.5.9. 从 CLI 上的 Git 存储库管理设备配置 复制链接链接已复制到粘贴板!
技术预览: 在 Git 存储库中创建并应用设备配置。
完成以下步骤:
创建一个文件,如
site-settings-repo.yaml,其中包含名为site-settings的Repository资源的以下定义:apiVersion: flightctl.io/v1alpha1 kind: Repository metadata: name: site-settings spec: type: git url: https://github.com/<your_org>/<your_repo>.git运行以下命令来创建
Repository资源:flightctl apply -f site-settings-repo.yaml运行以下命令,验证资源是否已正确创建,并可以被 Red Hat Edge Manager 访问:
flightctl get repository/site-settings请参见以下示例输出:
NAME TYPE REPOSITORY URL ACCESSIBLE site-settings git https://github.com/<your_org>/<your_repo>.git True通过更新设备规格将
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-site2 [...]
1.5.10. 设备生命周期 hook 复制链接链接已复制到粘贴板!
技术预览: Red Hat Edge Manager 代理可以使用设备生命周期 hook 在设备生命周期的特定点运行用户定义的命令。例如,您可以在操作系统镜像中添加 shell 脚本,以备份应用程序数据。然后,您可以指定该脚本必须成功运行并成功完成,然后才能代理开始更新操作系统。
另外,当磁盘上的文件发生变化时,某些应用程序或系统服务不会自动重新载入其配置文件。您可以将命令指定为另一个 hook (在代理完成更新过程后调用)来手动重新载入配置文件。
支持以下设备生命周期 hook:
| 生命周期 hook | 描述 |
|
| 代理完成更新后,会调用 hook,但在更改操作系统前。如果此 hook 中的操作返回失败,代理会取消更新。 |
|
| 在代理将更新写入磁盘后,会调用 hook。如果此 hook 中的操作返回失败,代理会取消并回滚更新。 |
|
| 在系统重启前会调用 hook。代理会阻止重启,直到操作完成或超时为止。如果此 hook 中的任何操作返回失败,代理会取消并回滚更新。 |
|
| 当代理重启后首先启动时,会调用 hook。如果此 hook 中的任何操作返回失败,代理会报告失败,但将继续启动。 |
1.5.10.1. 规则文件 复制链接链接已复制到粘贴板!
您可以通过在设备文件系统中的以下位置之一中添加规则文件来定义设备生命周期 hook:
-
/usr/lib/flightctl/hooks.d/<lifecycle_hook_name>/ drop-in 目录中的规则是只读的。要向/usr目录添加规则,您必须在镜像构建过程中将它们添加到操作系统镜像中。 -
/etc/flightctl/hooks.d/<lifecycle_hook_name>/drop-in 目录中的规则是 read-writable。您可以使用多种方法在运行时更新规则。
在创建并放置文件时,您必须考虑以下实践:
- 规则的名称必须是所有小写。
- 如果您在两个位置定义了规则,则规则将合并。
- 如果您在生命周期 hook 目录中添加多个规则文件,则会按照文件名的字典顺序处理这些文件。
-
如果您在两个位置定义了具有相同文件名的文件,
/etc文件夹中的文件优先于/usr文件夹中同名的文件。
规则文件以 YAML 格式编写,包含一个或多个操作的列表。操作可以是运行外部命令的指令。
当您为 hook 指定很多操作时,会按顺序执行操作,然后再开始下一个操作。
如果某个操作返回失败,则会跳过以下操作。
run 操作采用以下参数:
| 参数 | 描述 |
|
|
要运行的命令的绝对路径,后跟任何标志或参数,如 |
|
| 可选。键值对列表,以设置为命令的环境变量。 |
|
| 可选。命令从其中运行该命令的目录。 |
|
|
可选。允许操作完成的最长时间。将持续时间指定为单个正整数,后跟一个时间单位。 |
|
| 可选。运行该操作需要满足的条件列表。如果没有提供,则操作将无条件地运行。 |
默认情况下,每次触发 hook 时都会执行操作。但是,对于在更新 hook 后,您可以使用 If 参数添加执行某个操作必须满足 true 的条件。否则,会跳过该操作。
例如,只有在更新期间给定文件或目录更改时才会运行操作,您可以定义采用以下参数的路径条件:
| 参数 | 描述 |
|
|
到必须在更新期间更改的文件或目录的绝对路径,作为要执行的操作的条件。使用正斜杠( |
|
|
文件操作列表,如创建、 |
如果您在 更新 hook 后 为操作指定路径条件,您可以在命令的参数中包含以下变量,并替换为更改文件的绝对路径:
| 变量 | 描述 |
|
| 路径条件中指定的文件或目录的绝对路径。 |
|
| 在更新过程中更改的文件的空格分隔列表,由路径条件涵盖。 |
|
| 在更新期间创建的文件的空格分隔列表,由路径条件涵盖。 |
|
| 在更新过程中更新的文件的绝对路径以空格分隔,由路径条件涵盖。 |
|
| 在更新过程中删除的文件的空格分隔列表,由路径条件涵盖。 |
Red Hat Edge Manager 代理包含 /usr/lib/flightctl/hooks.d/afterupdating/00-default.yaml 中定义的一组内置规则。如果更改了某些文件,则执行以下命令:
| File | 命令 | 描述 |
|
|
|
通过向 |
|
|
|
对 |
|
|
|
对 |
1.5.10.2. 其他资源 复制链接链接已复制到粘贴板!
1.5.11. 监控设备资源 复制链接链接已复制到粘贴板!
技术预览: 您可以为设备资源设置资源监控器,并在资源利用率超过定义的阈值时创建警报。当代理警告 Red Hat Edge Manager 服务时,该服务会根据严重性级别将设备状态设置为 degraded 或 error。
资源监控器使用以下参数:
| 参数 | 描述 |
|
|
要监控的资源。目前支持 |
|
|
monitor 样本使用的时间间隔,以一个正整数的形式指定,后跟一个时间单位: |
|
| 警报规则列表。 |
|
|
仅针对 |
警报规则采用以下参数:
| 参数 | 描述 |
|
|
警报规则的严重性可以是 |
|
|
资源使用情况测量和平均超过抽样的时间,以正整数指定,后跟一个时间单位: |
|
| 触发警报的用量阈值,以百分比值为单位。在没有%符号的情况下,值范围从 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: 5s1 path: /application_data2 alertRules: - severity: Warning3 duration: 30m percentage: 75 description: Disk space for application data is >75% full for over 30m. - severity: Critical4 duration: 10m percentage: 90 description: Disk space for application data is >90% full over 10m. [...]
1.6. 在边缘设备上管理应用程序 复制链接链接已复制到粘贴板!
技术预览: 您可以通过更新设备规格中的应用程序列表,在设备上部署、更新或删除应用程序。当 Red Hat Edge Manager 代理检查并检测规格中的更改时,代理会从开放容器项目(OCI)兼容 registry 中下载任何新的或更新的应用程序软件包和镜像。然后,代理将软件包部署到适当的应用程序运行时,或从该运行时中删除它们。
Red Hat Edge Manager 支持 podman-compose 工具作为应用程序运行时和格式。
1.6.1. 先决条件 复制链接链接已复制到粘贴板!
- 您必须安装 Red Hat Edge Manager CLI。
- 您必须登录到 Red Hat Edge Manager 服务。
-
您的设备必须安装有
podman-compose工具来运行操作系统镜像。请参阅 构建 bootc 操作系统镜像以用于 Red Hat Edge Manager
1.6.2. 构建应用程序软件包镜像 复制链接链接已复制到粘贴板!
Red Hat Edge Manager 可以从兼容开放容器项目(OCI)的 registry 下载应用程序软件包。您可以构建包含 podman-compose 格式的应用程序软件包的 OCI 容器镜像,并将镜像推送到 OCI registry。
完成以下步骤:
在名为
podman-compose.yaml的文件中定义应用程序的功能,它遵循 Podman Compose 规格。-
使用以下内容创建一个名为
Containerfile的文件:
FROM scratch1 COPY podman-compose.yaml /podman-compose.yaml LABEL appType="compose"2 -
使用以下内容创建一个名为
构建并推送至 OCI registry 的容器镜像。
运行以下命令,定义您具有写入权限的镜像存储库:
OCI_IMAGE_REPO=quai.io/<your_org>/<your_image>运行以下命令来定义镜像标签:
OCI_IMAGE_TAG=v1构建容器镜像。运行以下命令:
podman build -t ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .- 推送容器镜像。
podman push ${OCI_IMAGE_REPO}:${OCI_IMAGE_TAG} .
1.6.3. 使用 CLI 将应用程序部署到设备 复制链接链接已复制到粘贴板!
使用 CLI 从 OCI 注册表将应用程序软件包部署到设备。
完成以下步骤:
在
Device资源的spec.applications字段中指定要部署的应用程序软件包:apiVersion: flightctl.io/v1alpha1 kind: Device metadata: name: <device_name> spec: [...] applications: - name: wordpress1 image: quay.io/rhem-demos/wordpress-app:latest2 envVars:3 WORDPRESS_DB_HOST: <database_host> WORDPRESS_DB_USER: <user_name> WORDPRESS_DB_PASSWORD: <password> [...]注: 对于设备规格
的应用程序部分中的每个应用程序,您可以找到对应的设备状态信息。通过检查设备状态信息,验证设备上应用部署的状态。运行以下命令:
flightctl get device/<your_device_id> -o yaml请参见以下示例输出:
[...] spec: applications: - name: example-app image: quay.io/flightctl-demos/example-app:v1 status: applications: - name: example-app ready: 3/3 restarts: 0 status: Running applicationsSummary: info: All application workloads are healthy. status: Healthy [...]
1.7. 管理设备团队 复制链接链接已复制到粘贴板!
技术预览: Red Hat Edge Manager 通过 设备群 简化了大量设备和工作负载的管理。fleet 是一个资源,它定义由通用设备模板和管理策略管理的一组设备。
当您更改设备模板时,当 Red Hat Edge Manager 代理检测到新目标规格时,团队中的所有设备都会接收更改。
团队中的设备监控也已被简化,因为您可以检查整个团队的状态概述。
群级管理具有以下优点:
- 扩展操作,因为您只需要为每个团队执行一次操作,而不是对每个设备执行一次操作。
- 尽可能减少配置错误和配置偏移的风险。
- 当您将设备添加到团队中的团队或替换设备时,会自动应用目标配置。
fleet 规格由以下功能组成:
- 标签选择器
- 确定哪个设备是该团队的一部分。
- 设备模板
- 定义 Red Hat Edge Manager 在团队中的设备强制执行的配置。
- 策略(policy)
- 监管如何管理设备,例如,如何将对设备模板的更改应用到设备。
您可以同时单独管理和管理的设备。当将设备选为团队时,Red Hat Edge Manager 根据设备模板为新设备创建设备规格。如果您更新一个团队或新设备的设备模板,Red Hat Edge Manager 会在团队中强制实施新规格。
如果没有选择设备到任何群,则该设备被视为用户管理或非受管设备。对于用户管理的设备,您必须手动或通过外部自动化更新设备规格。
重要: 设备不能是同时多个团队的成员。
如需更多信息,请参阅 标签和标签选择器。
1.7.1. 设备选择为一个团队 复制链接链接已复制到粘贴板!
默认情况下,设备不会被分配给一个机。相反,每个团队都使用一个选择器来定义必须将设备添加到团队中的标签。
要了解如何在一个团队中使用标签,请参阅以下示例:
以下列表显示了销售终端设备及其标签点:
| 设备 | 标签 |
| A |
|
| B |
|
| C |
|
| D |
|
如果所有销售点终端都使用相同的配置,并由同一运维团队管理,您可以使用 type=pos-terminal 标签选择器定义一个名为 pos-terminals 的团队。然后,团队包含设备 A、B、C 和 D。
但是,您可能希望为不同机构为开发或生产创建单独的团队。您可以使用 type=pos-terminal、stage=development 标签选择器(选择设备 C 和 D)定义开发团队。然后,您可以使用 type=pos-terminal, stage=production 标签选择器为 production 定义另一个团队。通过使用正确的标签选择器,您可以独立管理这两个团队。
重要 : 您必须以两个团队定义选择器,它们不会选择同一设备。例如,如果一个 fleet 选择 region=east,另一个 fleet 选择 stage=production,则两个团队都尝试选择设备 A。如果两个团队试图选择同一设备,Red Hat Edge Manager 会在当前分配的 fleet 中保留设备(如果有),并在受影响的 fleet 上将 OverlappingSelectors 条件设置为 true。
1.7.2. 设备模板 复制链接链接已复制到粘贴板!
团队的设备模板包含一个设备规格,在模板更新时应用于该团队中的所有设备。
例如,您可以在团队中的所有设备模板中指定,必须运行 quay.io/flightctl/rhel:9.5 操作系统镜像。
然后,Red Hat Edge Manager 服务将目标规格部署到该团队中的所有设备,Red Hat Edge Manager 代理会相应地更新每个设备。
您可以更改设备模板中的其他规格项目,Red Hat Edge Manager 会以同样的方式应用更改。
但是,有时不是该团队中的所有设备都需要有完全相同的规格。Red Hat Edge Manager 允许模板包含基于设备名称或标签值填充的占位符。
占位符的语法与 Go 模板 的语法匹配。但是,您只能使用简单的文本和操作。
不支持在占位符中使用条件或循环。
您可以从设备的元数据引用任何内容,如 {{ .metadata.labels.key }} 或 {{ .metadata.name }}。
您还可以在占位符中使用以下功能:
-
大写的功能会将值更改为大写。例如,函数是{{ upper .metadata.name }}。 -
较低函数将值改为小写。例如,函数为{{ lower .metadata.labels.key }}。 -
replace函数将所有子字符串出现的所有替换为另一个字符串。例如,函数是{{ replace "old" "new" .metadata.labels.key }}。 -
如果访问缺少的标签,
getOrDefault函数会返回一个默认值。例如,他功能是{{ getOrDefault .metadata.labels "key" "default" }}。
您可以组合管道中的功能,例如: combined 函数为 {{ getOrDefault .metadata.labels "key" "default" | upper | replace " "-" }}。
注意: 确保使用正确的 Go 模板语法。例如,{{ .metadata.labels.target-revision }} 无效,因为连字符。相反,您必须将字段指代为 {{ index .metadata.labels "target-revision" }}。
您可以使用以下方法在设备模板中使用占位符:
-
您可以按部署阶段标记设备,例如: stage 标签是
stage: testing和stage: production。然后,您可以在引用要使用的操作系统镜像时将标签与stage键用作占位符,例如,使用quay.io/myorg/myimage:latest-{{ .metadata.labels.stage }},或在引用 Git 存储库中的配置文件夹时。 -
您可以通过部署站点标记设备,例如部署站点为
site: factory-berlin和site: factory-madrid。 -
然后,当使用 Kubernetes 中的网络访问凭证引用 secret 时,您可以将标签与
站点键一起使用。
设备模板中的以下字段支持占位符:
| 字段 | 支持的占位符 |
| 操作系统镜像 | 仓库名称、镜像名称、镜像标签 |
| Git 配置提供程序 | 目标修订,path |
| HTTP 配置提供程序 | URL 后缀、路径 |
| 内联配置提供程序 | 内容,路径 |
1.7.3. 使用 CLI 选择设备到团队中 复制链接链接已复制到粘贴板!
技术预览: 定义标签选择器,将设备添加到团队中。
完成以下任务:
运行以下命令,以验证标签选择器是否返回您要添加到团队中的设备:
flightctl get devices -l type=pos-terminal -l stage=development如果运行命令返回预期的设备列表,您可以使用以下 YAML 文件定义一个选择设备的 fleet :
apiVersion: flightctl.io/v1alpha1 kind: Fleet metadata: name: my_fleet spec: selector: matchLabels: type: pos-terminal stage: development [...]运行以下命令来应用更改:
flightctl apply -f my_fleet.yaml运行以下命令,检查与其他团队选择器的重叠:
flightctl get fleets/my_fleet -o json | jq -r '.status.conditions[] | select(.type=="OverlappingSelectors").status'请参见以下示例输出:
False