1 使用 Elemental 进行远程主机注册 #
本节记录了作为 SUSE Edge 一部分的“电话回拨网络配置”解决方案,我们使用 Elemental 来协助节点注册。Elemental 是一个软件栈,支持远程主机注册以及通过 Kubernetes 进行集中的云原生操作系统管理。在 SUSE Edge 栈中,我们使用 Elemental 的注册功能来实现远程主机注册至 Rancher,以便将主机集成到集中式管理平台中,并从那里统一部署和管理 Kubernetes 集群以及分层组件、应用程序及其生命周期。
当您想要控制的设备与管理集群不在同一网络,或者没有板载带外管理控制器以实现更直接的控制,并且您需要在边缘启动许多不同的“未知”系统,同时需要大规模安全地注册和管理它们时,这种方法非常有用。这对于零售、工业物联网或其他您无法控制设备安装所在网络的用例来说,是一种常见场景。
1.1 高级体系结构 #
1.2 所需资源 #
以下描述了完成此快速入门所需的最低系统和环境要求:
目标机器上现有的数据将在该过程中被覆盖,请确保备份连接到目标部署节点的所有 USB 存储设备和磁盘上的任何数据。
本指南是使用 Digital Ocean droplet 来托管上游群集,并使用 Intel NUC 作为下游设备创建的。构建安装介质时,使用的是 SUSE Linux Enterprise Server。
1.3 构建启动群集 #
首先创建一个能够托管 Rancher 和 Elemental 的群集。此群集需要能够从下游节点所连接的网络进行路由。
1.3.1 创建 Kubernetes 群集 #
如果您使用的是超大规模云服务商(例如 Azure、AWS 或 Google Cloud),设置群集的最简单方法是使用其内置工具。为了使本指南保持简洁,我们未详细介绍这些选项的每一个处理。
如果您要安装到裸机或其他需要您自行提供 Kubernetes 发行版的托管服务上,我们建议使用 RKE2。
1.3.2 设置 DNS #
在继续之前,您需要设置对群集的访问权限。与群集本身的设置一样,配置 DNS 的方式将根据其托管位置而有所不同。
如果您不想处理 DNS 记录的设置(例如,这只是一个临时测试服务器),则可以使用像 sslip.io 这样的服务来代替。使用此服务,您可以解析任何带有 <address>.sslip.io 的 IP 地址。
1.4 安装 Rancher #
要安装 Rancher,您需要获取对刚创建的群集的 Kubernetes API 的访问权限。这看起来会有所不同,具体取决于所使用的 Kubernetes 发行版。
对于 RKE2,kubeconfig 文件将被写入 /etc/rancher/rke2/rke2.yaml。
将此文件在本地系统上保存为 ~/.kube/config。
您可能需要编辑该文件以包含正确的外部可路由 IP 地址或主机名。
使用 Rancher 文档 中的命令轻松安装 Rancher:
安装 cert-manager:
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set crds.enabled=true然后安装 Rancher 本身:
helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
helm repo update
helm install rancher rancher-prime/rancher \
--namespace cattle-system \
--create-namespace \
--set hostname=<DNS or sslip from above> \
--set replicas=1 \
--set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN> \
--version 2.14.2如果这旨在作为生产系统,请使用 cert-manager 配置真实证书(例如来自 Let’s Encrypt 的证书)。
浏览到您设置的主机名,并使用您使用的 bootstrapPassword 登录 Rancher。您将通过一个简短的设置过程。
1.5 安装 Elemental #
安装 Rancher 后,您现在可以安装 Elemental operator 和所需的 CRD。Elemental 的 Helm chart 作为 OCI 工件发布,因此安装比其他 chart 更简单。 它可以从您安装 Rancher 时使用的同一个 shell 中安装,也可以在浏览器中从 Rancher 的 shell 内安装。
helm install --create-namespace -n cattle-elemental-system \
elemental-operator-crds \
oci://registry.suse.com/rancher/elemental-operator-crds-chart \
--version 1.9.0
helm install -n cattle-elemental-system \
elemental-operator \
oci://registry.suse.com/rancher/elemental-operator-chart \
--version 1.9.01.5.1 (可选)安装 Elemental UI 扩展 #
1.6 配置 Elemental #
为简单起见,我们建议将变量 $ELEM 设置为您希望放置配置目录的完整路径:
export ELEM=$HOME/elemental
mkdir -p $ELEM要允许机器注册到 Elemental,我们需要在 fleet-default 命名空间中创建一个 MachineRegistration 对象。
让我们创建一个该对象的基本版本:
cat << EOF > $ELEM/registration.yaml
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
name: ele-quickstart-nodes
namespace: fleet-default
spec:
machineName: "\${System Information/Manufacturer}-\${System Information/UUID}"
machineInventoryLabels:
manufacturer: "\${System Information/Manufacturer}"
productName: "\${System Information/Product Name}"
EOF
kubectl apply -f $ELEM/registration.yamlcat 命令使用反斜杠 (\) 转义每个 $,以便 Bash 不会对它们进行模板化处理。如果手动复制,请删除反斜杠。
对象创建完成后,找到并记录分配的端点:
REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')或者,也可以通过 UI 完成此操作。
1.7 构建映像 #
虽然当前版本的 Elemental 有一种构建其自身安装介质的方法,但在 SUSE Edge 3.6 中,我们改用 Kiwi 和 Edge Image Builder 来执行此操作,因此生成的系统以 SUSE Linux Micro 作为基础操作系统。
有关 Kiwi 的更多详细信息,请先按照 Kiwi 映像构建器流程 (Chapter 26, 使用 Kiwi 构建更新的 SUSE Linux Micro 镜像) 构建新映像;对于 Edge Image Builder,请查看 Edge Image Builder 入门指南 (Chapter 2, 使用 Edge Image Builder 的独立集群) 以及 组件文档 (Chapter 8, Edge Image Builder)。
在安装了 Podman 的 Linux 系统上,创建目录并放置由 Kiwi 构建的基础映像:
mkdir -p $ELEM/eib_quickstart/base-images
cp /path/to/{micro-base-image-iso} $ELEM/eib_quickstart/base-images/
mkdir -p $ELEM/eib_quickstart/elementalcurl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yamlcat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.3
image:
imageType: iso
arch: x86_64
baseImage: SL-Micro.x86_64-6.2-Base-SelfInstall-GM.install.iso
outputImageName: elemental-image.iso
operatingSystem:
time:
timezone: Europe/London
ntp:
forceWait: true
pools:
- 2.suse.pool.ntp.org
servers:
- 10.0.0.1
- 10.0.0.2
isoConfiguration:
installDevice: /dev/vda
users:
- username: root
encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
packages:
sccRegistrationCode: XXX
EOFtime部分是可选的,但强烈建议进行配置,以避免证书和时钟偏差带来的潜在问题。本示例中提供的值仅用于说明目的。请根据您的具体要求进行调整。未编码的密码为
eib。需要
sccRegistrationCode才能从官方源下载并安装必要的 RPM(或者,也可以手动旁加载elemental-register和elemental-system-agentRPM)。cat命令使用反斜杠 ($) 转义每个\,以便 Bash 不会对它们进行模板化处理。如果手动复制,请删除反斜杠。安装设备将在安装过程中被擦除。
podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
registry.suse.com/edge/3.6/edge-image-builder:1.3.3.1 \
build --definition-file eib-config.yaml如果您要引导物理设备,我们需要将映像刻录到 USB U 盘中。可以使用以下方式执行此操作:
sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress1.8 引导下游节点 #
现在我们已经创建了安装媒体,可以使用它来引导下游节点。
对于您想要使用 Elemental 控制的每个系统,请添加安装媒体并引导设备。安装完成后,它将重启并自行注册。
如果您正在使用 UI 扩展,您应该会看到您的节点出现在“Inventory of Machines”中。
在看到登录提示之前,请勿移除安装媒体;在首次启动期间,系统仍会访问 USB U 盘上的文件。
1.9 创建下游集群 #
使用 Elemental 配置新集群时,我们需要创建两个对象。
- Linux
- UI 扩展
第一个是 MachineInventorySelectorTemplate。此对象允许我们指定集群与清单中机器之间的映射。
创建一个选择器,它将匹配清单中带有标签的任何机器:
cat << EOF > $ELEM/selector.yaml apiVersion: elemental.cattle.io/v1beta1 kind: MachineInventorySelectorTemplate metadata: name: location-123-selector namespace: fleet-default spec: template: spec: selector: matchLabels: locationID: '123' EOF将资源应用到集群:
kubectl apply -f $ELEM/selector.yaml获取机器名称并添加匹配的标签:
MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}') kubectl label MachineInventory -n fleet-default \ $MACHINENAME locationID=123创建一个简单的单节点 K3s 集群资源并将其应用到集群:
cat << EOF > $ELEM/cluster.yaml apiVersion: provisioning.cattle.io/v1 kind: Cluster metadata: name: location-123 namespace: fleet-default spec: kubernetesVersion: v1.35.4+k3s1 rkeConfig: machinePools: - name: pool1 quantity: 1 etcdRole: true controlPlaneRole: true workerRole: true machineConfigRef: kind: MachineInventorySelectorTemplate name: location-123-selector apiVersion: elemental.cattle.io/v1beta1 EOF kubectl apply -f $ELEM/cluster.yaml
创建这些对象后,您应该会看到一个新的 Kubernetes 集群使用您刚刚安装的新节点启动。
1.10 节点重置(可选) #
SUSE Rancher Elemental 支持执行“节点重置”的功能,当从 Rancher 中删除整个集群、从集群中删除单个节点或从机器清单中手动删除节点时,可以选择触发该功能。当您想要重置和清理任何孤立资源,并希望自动将清理后的节点带回机器清单以便重复使用时,这非常有用。默认情况下未启用此功能,因此任何被去除的系统都不会被清理(即数据不会被去除,任何 Kubernetes 集群资源将继续在下游集群上运行),并且需要人工干预来擦除数据并通过 Elemental 将机器重新注册到 Rancher。
如果您希望默认启用此功能,则需要确保您的 MachineRegistration 通过添加 config.elemental.reset.enabled: true 明确启用它,例如:
config:
elemental:
registration:
auth: tpm
reset:
enabled: true然后,所有使用此 MachineRegistration 注册的系统都将自动在其配置中接收 elemental.cattle.io/resettable: 'true' 注释。如果您希望在单个节点上手动执行此操作(例如,因为您现有的 MachineInventory 没有此注释,或者您已经部署了节点),您可以修改 MachineInventory 并添加 resettable 配置,例如:
apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventory
metadata:
annotations:
elemental.cattle.io/os.unmanaged: 'true'
elemental.cattle.io/resettable: 'true'在 SUSE Edge 3.1 中,Elemental Operator 会在操作系统上放置一个标记,该标记将自动触发清理过程;它将停止所有 Kubernetes 服务,删除所有持久数据,卸载所有 Kubernetes 服务,清理任何剩余的 Kubernetes/Rancher 目录,并强制通过原始 Elemental MachineRegistration 配置重新注册到 Rancher。这是自动发生的,无需任何人工干预。被调用的脚本可以在 /opt/edge/elemental_node_cleanup.sh 中找到,并在放置标记后通过 systemd.path 触发,因此其执行是立即的。
使用 resettable 功能的前提是,从 Rancher 中删除节点/集群时,期望的行为是擦除数据并强制重新注册。在这种情况下肯定会丢失数据,因此只有在确定要执行自动重置时才使用此功能。
1.11 后续步骤 #
以下是使用本指南后建议研究的一些资源:
中的端到端自动化Chapter 6, Fleet
中的其他网络配置选项Chapter 9, 边缘网络









