一、什么是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 包管理器将元素操作符图表安装到我们的集群中。
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.启动电源测试
镜像文件挂载正常,启动正常。