rancher/elemental 构建不可变IOS(一)

一、什么是elemental

Elemental 是 Rancher 的一个变种,专注于提供一个更轻量级的 Kubernetes 发行版。它旨在提供简化的部署和管理体验,同时保持 Kubernetes 的灵活性和强大功能。Elemental 通常针对较小的部署场景或资源受限的环境,例如测试环境、开发环境或边缘计算场景。通过 Elemental,用户可以更快速地启动和运行 Kubernetes 集群,并使用 Rancher 提供的丰富功能来管理它们。

二、官网

Elemental - Immutable Linux for Rancher

三、使用要求

#参考官网要求

  • 配置了 Rancher 服务器(v2.7.0 或更高版本)(设置了 server-url)
  • 具有 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 版本,例如K3sRKE2
  • Helm 包管理器 ( Helm )
  • 对于 ARM (aarch64) - 一张 SD 卡(32 GB 或更大,必须很快- 40MB/s 写入速度可以接受)和一个用于安装的 USB 记忆棒

四、部署测试例子

一、使用helm部署elemental-operator

我们将使用 Helm 包管理器将元素操作符图表安装到我们的集群中。

codeBlock_bY9V 复制代码
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命名空间上:

codeBlock_bY9V 复制代码
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.启动电源测试

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

相关推荐
Hai99021814 天前
rancher 图形化界面
rancher
ly143567861920 天前
95、k8s之rancher可视化
容器·kubernetes·rancher
lgbisha24 天前
828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群
docker·华为云·rancher
litGrey25 天前
Rancher 与 Kubernetes(K8s)的关系
容器·kubernetes·rancher
ghostwritten1 个月前
rancher upgrade 【rancher 升级】
rancher
ghostwritten1 个月前
Helm Deploy Online Rancher v2.9.1
rancher
心软且酷丶1 个月前
如何完整删除rancher中已接入的rancher集群并重新导入
容器·kubernetes·rancher
ghostwritten1 个月前
uninstall rancher【卸载 rancher】
rancher
神奇的海马体1 个月前
部署Rancher2.9管理K8S1.26集群
云原生·容器·kubernetes·rancher
shenghuiping20011 个月前
windows11 安装 Rancher Desktop
k8s·rancher·k3s