一、什么是elemental
Elemental 是 Rancher 的一个变种,专注于提供一个更轻量级的 Kubernetes 发行版。它旨在提供简化的部署和管理体验,同时保持 Kubernetes 的灵活性和强大功能。Elemental 通常针对较小的部署场景或资源受限的环境,例如测试环境、开发环境或边缘计算场景。通过 Elemental,用户可以更快速地启动和运行 Kubernetes 集群,并使用 Rancher 提供的丰富功能来管理它们。
二、官网
Elemental - Immutable Linux for Rancher
三、使用要求
#参考官网要求
- 配置了 Rancher 服务器(v2.7.0 或更高版本)(设置了 server-url) 
  
- 要配置 Rancher,
server-url请查看Rancher 文档 
 - 要配置 Rancher,
 - 具有 TPM 2.0 的机器(裸机或虚拟化) 
  
- 提示 1:Libvirt 允许为虚拟机设置虚拟 TPM,示例如下
 - 提示 2:您可以在此处缺少 TPM 2.0 模块示例的裸机上启用 TPM 模拟
 - 提示 3:确保您在 x86-64 上使用 UEFI(而不是 BIOS),否则 ISO 将无法启动
 - 提示 4:建议最小卷大小为 25 GB。有关更多详细信息,请参阅Elemental Teal 分区表
 - 提示 5:CPU 和 RAM 要求取决于安装的 Kubernetes 版本,例如K3s或RKE2
 
 - Helm 包管理器 ( Helm )
 - 对于 ARM (aarch64) - 一张 SD 卡(32 GB 或更大,必须很快- 40MB/s 写入速度可以接受)和一个用于安装的 USB 记忆棒
 
四、部署测试例子
一、使用helm部署elemental-operator
我们将使用 Helm 包管理器将元素操作符图表安装到我们的集群中。
helm upgrade --create-namespace -n cattle-elemental-system --install elemental-operator-crds oci://registry.suse.com/rancher/elemental-operator-crds-chart
helm upgrade --create-namespace -n cattle-elemental-system --install elemental-operator oci://registry.suse.com/rancher/elemental-operator-chart 
   
 现在,几秒钟后,您应该会看到操作员 pod 出现在cattle-elemental-system命名空间上:
kubectl get pods -n cattle-elemental-system
NAME                                  READY   STATUS    RESTARTS   AGE
elemental-operator-64f88fc695-b8qhn   1/1     Running   0          16s 
 二、创建4个资源对象
1.selector.yaml
apiVersion: elemental.cattle.io/v1beta1
kind: MachineInventorySelectorTemplate
metadata:
  name: fire-machine-selector
  namespace: fleet-default
spec:
  template:
    spec:
      selector:
        matchExpressions:
          - key: element
            operator: In
            values: [ 'fire' ] 
2.cluster.yaml
kind: Cluster
apiVersion: provisioning.cattle.io/v1
metadata:
  name: volcano
  namespace: fleet-default
spec:
  rkeConfig:
    machineGlobalConfig:
      etcd-expose-metrics: false
      profile: null
    machinePools:
      - controlPlaneRole: true
        etcdRole: true
        machineConfigRef:
          apiVersion: elemental.cattle.io/v1beta1
          kind: MachineInventorySelectorTemplate
          name: fire-machine-selector
        name: fire-pool
        quantity: 1
        unhealthyNodeTimeout: 0s
        workerRole: true
    machineSelectorConfig:
      - config:
          protect-kernel-defaults: false
    registries: {}
  kubernetesVersion: v1.24.8+k3s1 
#这里说一下:
1.selector.yaml与cluster.yaml是为Rancher集群管理服务的资源对象,并且为elemental自定义IOS的文件相关。
2.验证-哪怕我现在并没有使用自定义的ISO文件去创建节点主机,依然有集群存在在Rancher上
                
3.registration.yaml
#这是重点,这个文件为自定义iso镜像内容的文件。
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
  name: fire-nodes
  namespace: fleet-default
spec:
  config:
    cloud-config:
      users:
        - name: root
          passwd: root
    elemental:
      install:
        reboot: true
        device: /dev/sda
        debug: true
  machineInventoryLabels:
    element: fire
    manufacturer: "${System Information/Manufacturer}"
    productName: "${System Information/Product Name}"
    serialNumber: "${System Information/Serial Number}"
    machineUUID: "${System Information/UUID}" 
#其中config/cloud-config: 为你自定义给OS添加的内容,你可以配置自定义网络,自定义主机名。下面提供一个自定义静态网络的配置参考。其余请参考官网文档-Elemental - Immutable Linux for Rancher。
apiVersion: elemental.cattle.io/v1beta1
kind: MachineRegistration
metadata:
  name: fire-nodes
  namespace: fleet-default
spec:
  config:
    cloud-config:
      users:
        - name: root
          passwd: root
      write_files:
        - content: |
            [connection]
            id=fixed-ip
            uuid=9039a243-452d-4f01-9424-78648404d50b
            type=ethernet
            [ipv4]
            address1=192.168.91.103/24
            gateway=192.168.91.254
            dns=8.8.8.8;
            method=manual
          path: /etc/NetworkManager/system-connections/fixed-ip.nmconnection
          permissions: "0600"
    elemental:
      install:
        reboot: true
        device: /dev/sda
        debug: true
  machineInventoryLabels:
    element: fire
    manufacturer: "${System Information/Manufacturer}"
    productName: "${System Information/Product Name}"
    serialNumber: "${System Information/Serial Number}"
    machineUUID: "${System Information/UUID}" 
其中:write_files:为你可以任意将文件传入到OS的途径。网络配置支持使用nm-settings-keyfile 格式,官网如下:nm-settings-keyfile: NetworkManager Reference Manual
4.seedimage.yaml
#这也是重点,这个yaml为使用你自定义的配置文件自动打包构建你的自定义ISO镜像。
apiVersion: elemental.cattle.io/v1beta1
kind: SeedImage
metadata:
  name: fire-img
  namespace: fleet-default
spec:
  baseImage: registry.suse.com/rancher/elemental-teal-iso/5.4:1.2.2
  registrationRef:
    apiVersion: elemental.cattle.io/v1beta1
    kind: MachineRegistration
    name: fire-nodes
    namespace: fleet-default 
#这里使用的根镜像是SLE Micro for Rancher,就是Suse的边缘场景操作系统。非常轻量。
5.构建ISO
kubectl apple -f ./ 
 
会在fleet-default下创建一个POD,来帮助你构建和打包你的镜像。
 
可以看到第一个容器帮助你下载拉取,第二个容器帮助你构建打包,第三个容器负责让你下载。
6.下载构建好的ISO
kubectl get seedimage -n fleet-default -o yaml 
        #等待POD 构建以及出现下载的地址
 
#下载iso:
kubectl wait --for=condition=ready pod -n fleet-default fire-img
wget --no-check-certificate `kubectl get seedimage -n fleet-default fire-img -o jsonpath="{.status.downloadURL}"` -O elemental-teal.x86_64.iso 
7.查看获取到的iso

8.但是有个问题是你必须要有TPM模块才可以使用。故选择使用Vsphere-Fusion来测试
1.创建一台虚拟机,挂载ISO.
2.启动电源测试

镜像文件挂载正常,启动正常。


















