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

2024-04-29 22:12

本文主要是介绍rancher/elemental 构建不可变IOS(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、什么是elemental

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

二、官网

Elemental - Immutable Linux for Rancher

三、使用要求

        #参考官网要求

  • 配置了 Rancher 服务器(v2.7.0 或更高版本)(设置了 server-url)
    • 要配置 Rancher,server-url请查看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-selectornamespace: fleet-default
spec:template:spec:selector:matchExpressions:- key: elementoperator: Invalues: [ 'fire' ]

        2.cluster.yaml

kind: Cluster
apiVersion: provisioning.cattle.io/v1
metadata:name: volcanonamespace: fleet-default
spec:rkeConfig:machineGlobalConfig:etcd-expose-metrics: falseprofile: nullmachinePools:- controlPlaneRole: trueetcdRole: truemachineConfigRef:apiVersion: elemental.cattle.io/v1beta1kind: MachineInventorySelectorTemplatename: fire-machine-selectorname: fire-poolquantity: 1unhealthyNodeTimeout: 0sworkerRole: truemachineSelectorConfig:- config:protect-kernel-defaults: falseregistries: {}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-nodesnamespace: fleet-default
spec:config:cloud-config:users:- name: rootpasswd: rootelemental:install:reboot: truedevice: /dev/sdadebug: truemachineInventoryLabels:element: firemanufacturer: "${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-nodesnamespace: fleet-default
spec:config:cloud-config:users:- name: rootpasswd: rootwrite_files:- content: |[connection]id=fixed-ipuuid=9039a243-452d-4f01-9424-78648404d50btype=ethernet[ipv4]address1=192.168.91.103/24gateway=192.168.91.254dns=8.8.8.8;method=manualpath: /etc/NetworkManager/system-connections/fixed-ip.nmconnectionpermissions: "0600"elemental:install:reboot: truedevice: /dev/sdadebug: truemachineInventoryLabels:element: firemanufacturer: "${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-imgnamespace: fleet-default
spec:baseImage: registry.suse.com/rancher/elemental-teal-iso/5.4:1.2.2registrationRef:apiVersion: elemental.cattle.io/v1beta1kind: MachineRegistrationname: fire-nodesnamespace: 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.启动电源测试

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

这篇关于rancher/elemental 构建不可变IOS(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/947285

相关文章

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转

Java使用Mail构建邮件功能的完整指南

《Java使用Mail构建邮件功能的完整指南》JavaMailAPI是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能,本文将介绍如何使用JavaMail发送和接收邮件,希望对大家有所... 目录1、简述2、主要特点3、发送样例3.1 发送纯文本邮件3.2 发送 html 邮件3.3 发送带

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问