跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Edge 文档 / 快速入门 / 使用 Elemental 进行远程主机初始配置

2 使用 Elemental 进行远程主机初始配置

本章介绍 SUSE Edge 中的“电告总部网络置备”解决方案。我们将使用 Elemental 来协助完成节点初始配置。Elemental 是一个软件堆栈,可用于注册远程主机和通过 Kubernetes 实现集中式云原生操作系统全面管理。在 SUSE Edge 堆栈中,我们将使用 Elemental 的注册功能将远程主机初始配置到 Rancher,以便将主机集成到集中式管理平台,然后从该平台部署和管理 Kubernetes 群集以及分层组件、应用程序及其生命周期,所有这些操作都在一个中心位置完成。

此方法在以下情况下可能很有用:您要控制的设备与上游群集不在同一网络中,或没有带外管理控制器初始配置功能可以进行更直接的控制;您要在边缘处引导许多不同的“未知”系统,并且需要安全地大规模初始配置和管理这些系统。这种情况在以下领域的用例中很常见:零售、工业物联网,或几乎无法通过设备要安装到的网络进行控制的其他领域。

2.1 概要体系结构

Elemental 体系结构快速入门

2.2 所需资源

下面说明了学习本快速入门所要满足的最低系统和环境要求:

  • 集中式管理群集的主机(托管 Rancher 和 Elemental 的主机):

    • 至少 8 GB RAM 和 20 GB 磁盘空间,用于开发或测试(对于生产用途,请参见此处

  • 要置备的目标节点,即边缘设备(可以使用虚拟机进行演示或测试)

    • 至少 4GB RAM、2 个 CPU 核心和 20 GB 磁盘空间

  • 管理群集的可解析主机名,或用于 sslip.io 等服务的静态 IP 地址

  • 用于通过 Edge Image Builder 构建安装媒体的主机

    • 运行 SLES 15 SP5、openSUSE Leap 15.5 或其他支持 Podman 的兼容操作系统。

    • 已安装 KubectlPodmanHelm

  • 用于引导的 USB 闪存盘(如果使用物理硬件)

注意
注意

在初始配置过程中会重写目标计算机上的现有数据,因此请务必备份挂接到目标部署节点的所有 USB 存储设备和磁盘上的所有数据。

本指南是使用托管上游群集的 Digital Ocean droplet 以及用作下游设备的 Intel NUC 制作的。为了构建安装媒体,我们使用了 SUSE Linux Enterprise Server。

2.3 如何使用 Elemental

安装和使用 Elemental 的基本步骤如下:

2.3.1 构建引导群集

首先创建一个能够托管 Rancher 和 Elemental 的群集。必须可以从下游节点所连接到的网络路由此群集。

2.3.1.1 创建 Kubernetes 群集

如果您使用的是超大规模云(例如 Azure、AWS 或 Google Cloud),那么,设置群集的最简单方法是使用这些云的内置工具。为简洁起见,本指南不会详细介绍每种选项的用法过程。

如果您要安装到裸机或其他宿主服务,同时需要提供 Kubernetes 发行版本身,我们建议您使用 RKE2

2.3.1.2 设置 DNS

在继续之前,需要设置群集访问权限。与群集本身的设置一样,DNS 的配置方式根据群集的托管位置而异。

提示
提示

如果您不想处理 DNS 记录的设置(例如,这只是一个临时使用的测试服务器),可以改用 sslip.io 之类的服务。通过此服务,可以使用 <address>.sslip.io 解析任何 IP 地址。

2.3.2 安装 Rancher

要安装 Rancher,需要访问刚刚创建的群集的 Kubernetes API。具体方法取决于使用的 Kubernetes 发行版。

对于 RKE2,kubeconfig 文件会写入 /etc/rancher/rke2/rke2.yaml。将此文件作为 ~/.kube/config 保存在本地系统上。可能需要编辑该文件,以包含正确的外部可路由 IP 地址或主机名。

使用 Rancher 文档中所述的命令轻松安装 Rancher:

  1. 安装 cert-manager

    • Linux
    • Windows
    helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
    
    kubectl create namespace cattle-system
    
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.crds.yaml
    helm repo add jetstack https://charts.jetstack.io
    
    helm repo update
    
    helm install cert-manager jetstack/cert-manager \
     --namespace cert-manager \
     --create-namespace
  2. 然后安装 Rancher 本身:

    • Linux
    • Windows
    helm install rancher rancher-prime/rancher \
      --namespace cattle-system \
      --set hostname=<DNS or sslip from above> \
      --set replicas=1 \
      --set bootstrapPassword=<PASSWORD_FOR_RANCHER_ADMIN>
注意
注意

如果目标系统是生产系统,请使用 cert-manager 配置实际证书(例如 Let's Encrypt 提供的证书)。

浏览到您设置的主机名,然后使用您的 bootstrapPassword 登录到 Rancher。系统将指导您完成一个简短的设置过程。

2.3.3 安装 Elemental

安装 Rancher 后,接下来可以安装 Elemental Operator 和所需的 CRD。Elemental 的 Helm chart 作为 OCI 项目发布,因此其安装过程比其他 chart 略简单一些。可以通过您用来安装 Rancher 的同一外壳安装 Helm chart,也可以在浏览器中通过 Rancher 的外壳安装。

helm install --create-namespace -n cattle-elemental-system \
 elemental-operator-crds \
 oci://registry.suse.com/rancher/elemental-operator-crds-chart \
 --version 1.4.4

helm install --create-namespace -n cattle-elemental-system \
 elemental-operator \
 oci://registry.suse.com/rancher/elemental-operator-chart \
 --version 1.4.4

2.3.3.1 (可选)安装 Elemental UI 扩展

  1. 要使用 Elemental UI,请登录到您的 Rancher 实例,单击左上角的三点菜单:

    安装 Elemental 扩展 1
  2. 在此页面上的“Available”(可用)选项卡中,单击“Elemental”卡片上的“Install”(安装):

    安装 Elemental 扩展 2
  3. 确认您要安装该扩展:

    安装 Elemental 扩展 3
  4. 安装后,系统将提示您重新加载页面。

    安装 Elemental 扩展 4
  5. 重新加载后,可以通过“OS Management”(操作系统管理)全局应用程序访问 Elemental 扩展。

    访问 Elemental 扩展

2.3.3.2 配置 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.yaml
注意
注意

cat 命令使用反斜杠 (\) 将每个 $ 符号转义,以免 Bash 将其模板化。如果手动复制命令,请去除反斜杠。

创建该对象后,找到并记下分配的端点:

REGISURL=$(kubectl get machineregistration ele-quickstart-nodes -n fleet-default -o jsonpath='{.status.registrationURL}')

或者,可以在 UI 中执行此操作。

UI 扩展
  1. 在“OS Management”(操作系统管理)扩展中,单击“Create Registration Endpoint”(创建注册端点):

    单击“Create Registration”(创建注册)
  2. 为此配置命名。

    添加名称
    注意
    注意

    您可以忽略“Cloud Configuration”(云配置)字段,因为此处的数据将被 Edge Image Builder 中的后续步骤覆盖。

  3. 接下来,向下滚动并单击“Add Label”(添加标签),为注册计算机时创建的每个资源添加标签。标签可用于区分计算机。

    添加标签
  4. 最后,单击“Create”(创建)以保存配置。

    单击“Create”(创建)
UI 扩展

如果您刚刚创建了配置,则应会看到列出的注册 URL,可以单击“Copy”(复制)来复制该网址:

复制 URL
提示
提示

如果您退出了该屏幕,可以单击左侧菜单中的“Registration Endpoints”(注册端点),然后单击刚刚创建的端点的名称。

此 URL 将在下一步骤中使用。

2.3.4 构建安装媒体

虽然当前版本的 Elemental 提供了构建其自身安装媒体的方法,但在 SUSE Edge 3.0 中,我们会改用 Edge Image Builder 来构建安装媒体,因此最终构建的系统使用 SLE Micro 作为基础操作系统。

提示
提示

有关 Edge Image Builder 的更多细节,请查看相关入门指南(第 3 章 “使用 Edge Image Builder 配置独立群集)和组件文档(第 9 章 “Edge Image Builder)。

在装有 Podman 的 Linux 系统上,运行:

mkdir -p $ELEM/eib_quickstart/base-images
mkdir -p $ELEM/eib_quickstart/elemental
curl $REGISURL -o $ELEM/eib_quickstart/elemental/elemental_config.yaml
cat << EOF > $ELEM/eib_quickstart/eib-config.yaml
apiVersion: 1.0
image:
    imageType: iso
    arch: x86_64
    baseImage: SLE-Micro.x86_64-5.5.0-Default-SelfInstall-GM.install.iso
    outputImageName: elemental-image.iso
operatingSystem:
  users:
    - username: root
      encryptedPassword: \$6\$jHugJNNd3HElGsUZ\$eodjVe4te5ps44SVcWshdfWizrP.xAyd71CVEXazBJ/.v799/WRCBXxfYmunlBO2yp1hm/zb4r8EmnrrNCF.P/
EOF
注意
注意
  • 未编码的口令是 eib

  • cat 命令使用反斜杠 (\) 将每个 $ 符号转义,以免 Bash 将其模板化。如果手动复制命令,请去除反斜杠。

podman run --privileged --rm -it -v $ELEM/eib_quickstart/:/eib \
 registry.suse.com/edge/edge-image-builder:1.0.2 \
 build --definition-file eib-config.yaml

如果要引导物理设备,我们需要将映像刻录到 USB 闪存盘中。为此请使用以下命令:

sudo dd if=/eib_quickstart/elemental-image.iso of=/dev/<PATH_TO_DISK_DEVICE> status=progress

2.3.5 引导下游节点

现在我们已创建安装媒体,接下来可以用它来引导下游节点。

对于您要使用 Elemental 控制的每个系统,请添加安装媒体并引导设备。安装后,系统会重引导并自行注册。

如果您正在使用 UI 扩展,则应会看到您的节点出现在“Inventory of Machines”(计算机清单)中。

注意
注意

在出现登录提示之前,请勿移除安装媒体;在首次引导期间,仍需访问 USB 记忆棒上的文件。

2.3.6 创建下游群集

使用 Elemental 置备新群集时,需要创建两个对象。

  • Linux
  • UI 扩展

第一个对象是 MachineInventorySelectorTemplate。此对象用于指定群集与清单中计算机之间的映射。

  1. 创建一个选择器,用于根据标签匹配清单中的任何计算机:

    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
  2. 将资源应用于群集:

    kubectl apply -f $ELEM/selector.yaml
  3. 获取计算机名称并添加匹配标签:

    MACHINENAME=$(kubectl get MachineInventory -n fleet-default | awk 'NR>1 {print $1}')
    
    kubectl label MachineInventory -n fleet-default \
     $MACHINENAME locationID=123
  4. 创建简单的单节点 K3s 群集资源,并将其应用于群集:

    cat << EOF > $ELEM/cluster.yaml
    apiVersion: provisioning.cattle.io/v1
    kind: Cluster
    metadata:
      name: location-123
      namespace: fleet-default
    spec:
      kubernetesVersion: v1.28.9+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 群集使用刚刚安装的新节点运行。

提示
提示

为了能够更轻松地将系统分组,可以添加一个启动脚本,用于在环境中查找已知在该位置独有的内容。

例如,如果您知道每个位置都有一个唯一的子网,则可以编写一个脚本来查找网络前缀,并为相应的 MachineInventory 添加标签。

通常需要根据您的系统设计自定义此脚本,如下所示:

INET=`ip addr show dev eth0 | grep "inet\ "`
elemental-register --label "network=$INET" \
 --label "network=$INET" /oem/registration

2.4 节点重置

SUSE Rancher Elemental 支持执行“节点重置”,从 Rancher 中删除整个群集、从群集中删除单个节点或者从计算机清单中手动删除某个节点时,可以选择性地触发该操作。当您想要重置和清理任何孤立资源,并希望自动将清理的节点放回计算机清单以便重复使用时,此功能非常有用。默认未启用此功能,因此不会清理任何已去除的系统(即,不会去除数据,任何 Kubernetes 群集资源将继续在下游群集上运行),并且需要手动干预才能擦除数据,并通过 Elemental 将计算机重新注册到 Rancher。

如果您希望默认启用此功能,则需要通过添加 config.elemental.reset.enabled: true,来确保 MachineRegistration 明确启用此功能,例如:

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.0 中,Elemental Operator 会在操作系统上放置一个标记,该标记将自动触发清理过程;它会停止所有 Kubernetes 服务、去除所有永久数据、卸装所有 Kubernetes 服务、清理所有剩余 Kubernetes/Rancher 目录,并通过原始 Elemental MachineRegistration 配置强制重新注册到 Rancher。此过程会自动发生,无需任何手动干预。调用的脚本可以在 /opt/edge/elemental_node_cleanup.sh 中找到,将在放置标记后通过 systemd.path 触发,因此会立即执行。

警告
警告

使用 resettable 功能的假设条件是,从 Rancher 去除节点/群集时的所需行为是擦除数据并强制重新注册。在这种情况下,必然会丢失数据,因此,请仅在您确定要执行自动重置时才使用此功能。

2.5 后续步骤

下面是使用本指南后建议阅读的一些资源: