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.启动电源测试

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

相关推荐
KTKong2 天前
kubernetes部署rancher无法查看pod日志及通过execute shell进入pod解决办法
容器·kubernetes·rancher
橘淮南枳17 天前
Rancher—多集群Kubernetes管理平台
云原生·容器·kubernetes·rancher
ascarl201018 天前
k8s系列-Rancher 上操作的k8s容器网络配置总结
网络·kubernetes·rancher
it技术分享just_free18 天前
如何使用Rancher管理K8S集群
linux·运维·云原生·容器·kubernetes·rancher
igcllq21 天前
rancher安装并快速部署k8s 管理集群工具
linux·服务器·容器·kubernetes·rancher
Hai9902182 个月前
rancher 图形化界面
rancher
ly14356786192 个月前
95、k8s之rancher可视化
容器·kubernetes·rancher
lgbisha2 个月前
828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群
docker·华为云·rancher
litGrey2 个月前
Rancher 与 Kubernetes(K8s)的关系
容器·kubernetes·rancher
ghostwritten2 个月前
rancher upgrade 【rancher 升级】
rancher