使用 RHEL 镜像模式安装
在 bootc 镜像中嵌入 MicroShift
摘要
第 1 章 在 MicroShift 中使用 RHEL 的镜像模式 复制链接链接已复制到粘贴板!
您可以使用 Red Hat Enterprise Linux (RHEL)的镜像模式将 MicroShift 嵌入到操作系统镜像中。
RHEL 的镜像模式只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
1.1. Red Hat Enterprise Linux (RHEL)的镜像模式 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux (RHEL)的镜像模式是一个技术预览部署方法,它使用容器原生虚拟化方法构建、部署和管理操作系统作为引导镜像。通过使用 bootc,您可以构建、部署和管理操作系统,就像任何其他容器一样。
- 此容器镜像使用标准 OCI 或 Docker 容器作为基础操作系统更新的传输和交付格式。
- bootc 镜像包括用于启动操作系统的 Linux 内核。
- 通过使用 bootc 容器,开发人员、操作管理员和解决方案提供商都可以使用相同的容器原生工具和技术。
镜像模式会将软件的创建和安装分成两个步骤:一个构建系统上的一个,另一个在正在运行的目标系统中。
- 在构建系统步骤中,Podman 构建会检查可用于安装的 RPM 文件,确定任何依赖项,并创建了需要完成的链步骤的有序列表,最终结果是可安装的新的操作系统。
- 在 running-target-system 步骤中,bootc 更新下载、解包,并使新操作系统与当前运行的系统一起启动。本地配置更改将转发到新操作系统,但在重启系统并新操作系统镜像替换正在运行的镜像之前,才会生效。
1.1.1. 在 MicroShift 中使用 RHEL 的镜像模式 复制链接链接已复制到粘贴板!
要将镜像模式用于 RHEL,请确保以下资源可用:
- 具有有效红帽订阅的 RHEL 9.4 主机,用于构建 MicroShift bootc 镜像。
- 用于存储和访问 bootc 镜像的远程 registry。
- 您可以在 AArch64 或 x86_64 系统架构上使用带有 MicroShift 集群的 RHEL 的镜像模式。
在 MicroShift 中使用镜像模式的工作流包括以下步骤:
- 构建 MicroShift bootc 镜像。
- 发布镜像。
- 运行镜像。此步骤包括配置 MicroShift 网络和存储。
在镜像模式中不支持 rpm-ostree 文件系统,且不得用于更改使用镜像模式的部署。
1.2. 构建 bootc 镜像 复制链接链接已复制到粘贴板!
使用 Containerfile 构建包含 MicroShift 的 Red Hat Enterprise Linux (RHEL)。
RHEL 的镜像模式是技术预览。不支持在生产环境中使用 bootc 镜像。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。 -
rhocp和fast-datapath存储库可在主机订阅中访问。存储库不一定需要在主机上启用。 - 您有一个远程 registry,如 Red Hat quay,用于存储和访问 bootc 镜像。
流程
创建一个包含以下指令的 Containerfile :
RHEL 镜像模式的 Containerfile 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在构建容器镜像时,Podman 使用容器内的主机订阅信息和存储库。如果主机上没有
rhocp和fast-datapath存储库,则构建会失败。运行以下 image build 命令创建本地 bootc 镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 <your_redhat_user_password& gt; 替换为您的密码。
注意在镜像构建过程中如何使用 secret:
-
需要 podman--
authfile参数从registry.redhat.ioregistry 中拉取基础rhel-bootc:9.4镜像。 -
build
USER_PASSWD参数用于为redhat用户设置密码。
验证
运行以下命令验证本地 bootc 镜像是否已创建:
sudo podman images "${IMAGE_NAME}"$ sudo podman images "${IMAGE_NAME}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/microshift-4.17-bootc latest 193425283c00 2 minutes ago 2.31 GB
REPOSITORY TAG IMAGE ID CREATED SIZE localhost/microshift-4.17-bootc latest 193425283c00 2 minutes ago 2.31 GBCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. 将 bootc 镜像发布到远程 registry 复制链接链接已复制到粘贴板!
将您的 bootc 镜像发布到远程注册表,以便镜像可用于在另一主机上运行容器,或者当您要使用 bootc 镜像层安装新操作系统时。
先决条件
-
您已登录到使用具有
sudo权限的用户凭证构建镜像的 RHEL 9.4 主机。 - 您有一个远程 registry,如 Red Hat quay,用于存储和访问 bootc 镜像。
- 您创建了 Containerfile 并构建镜像。
流程
运行以下命令登录到您的远程 registry:
REGISTRY_URL=quay.io $ sudo podman login "${REGISTRY_URL}"REGISTRY_URL=quay.io $ sudo podman login "${REGISTRY_URL}"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 REGISTRY_URL 替换为您的 registry 的 URL。
运行以下命令来发布镜像:
REGISTRY_IMG=<myorg/mypath>/"${IMAGE_NAME}" IMAGE_NAME=<microshift-4.17-bootc> $ sudo podman push localhost/"${IMAGE_NAME}" "${REGISTRY_URL}/${REGISTRY_IMG}"REGISTRY_IMG=<myorg/mypath>/"${IMAGE_NAME}"1 2 IMAGE_NAME=<microshift-4.17-bootc>3 $ sudo podman push localhost/"${IMAGE_NAME}" "${REGISTRY_URL}/${REGISTRY_IMG}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 使用推送到 registry 的镜像运行容器,如 "Running the MicroShift bootc container" 部分所述。
1.4. 配置网络和存储以便在 bootc 容器中运行 MicroShift 复制链接链接已复制到粘贴板!
1.4.1. 为 CNI 配置 MicroShift bootc 镜像 复制链接链接已复制到粘贴板!
为内核不匹配配置临时解决方案,以启用 MicroShift OVN-Kubernetes (OVN-K) Container Network Interface (CNI)。
MicroShift OVN-K CNI 需要 openvswitch 内核模块在 bootc 镜像中可用。bootc 镜像作为使用主机内核的容器启动。主机内核可能与构建镜像的不同,从而导致不匹配。内核版本与 /lib/modules 目录中的模块不匹配,这意味着无法在容器中加载 openvswitch 模块,容器无法运行。您可以通过在主机上预加载 openvswitch 模块来解决这个问题。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。
流程
运行以下命令,检查
openvswitch模块可用于当前主机内核版本:find /lib/modules/$(uname -r) -name "openvswitch*"
$ find /lib/modules/$(uname -r) -name "openvswitch*"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
/lib/modules/5.14.0-427.28.1.el9_4.x86_64/kernel/net/openvswitch /lib/modules/5.14.0-427.28.1.el9_4.x86_64/kernel/net/openvswitch/openvswitch.ko.xz
/lib/modules/5.14.0-427.28.1.el9_4.x86_64/kernel/net/openvswitch /lib/modules/5.14.0-427.28.1.el9_4.x86_64/kernel/net/openvswitch/openvswitch.ko.xzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令设置
IMAGE_NAME环境变量:IMAGE_NAME=microshift-4.17-bootc
$ IMAGE_NAME=microshift-4.17-bootcCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查 bootc 镜像中使用的 kernel-core
软件包版本:sudo podman inspect "${IMAGE_NAME}" | grep kernel-core$ sudo podman inspect "${IMAGE_NAME}" | grep kernel-coreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
"created_by": "kernel-core-5.14.0-427.26.1.el9_4.x86_64"
"created_by": "kernel-core-5.14.0-427.26.1.el9_4.x86_64"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 内核版本与
/lib/modules目录的输出不匹配。
运行以下命令,在主机上预安装
openvswitch模块作为临时解决方案:sudo modprobe openvswitch
$ sudo modprobe openvswitchCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4.2. 检查 MicroShift CSI 的主机配置 复制链接链接已复制到粘贴板!
如果主机已配置为具有可用空间的卷组(VG),则该配置由容器继承。MicroShift 逻辑卷管理器(LVM)容器存储接口(CSI)可以使用 VG 来分配存储。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。
流程
运行以下命令确定卷组是否存在,并具有所需的可用空间:
sudo vgs
$ sudo vgsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 现有卷组的输出示例
VG #PV #LV #SN Attr VSize VFree rhel 1 1 0 wz--n- <91.02g <2.02g
VG #PV #LV #SN Attr VSize VFree1 rhel 1 1 0 wz--n- <91.02g <2.02gCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果没有可用的卷组,输出为空,或者
VFree值为 0。
注意如果主机有一个有可用存储的卷组,您可以立即运行容器。您不需要进一步配置 MicroShift CSI。
重要如果您没有卷组,则必须为 LVM CSI 设置一个,以便在 bootc MicroShift 容器中分配存储。如需更多信息,请参阅其他资源。
其他资源
1.4.3. 为 bootc 镜像和 MicroShift CSI 配置容器存储 复制链接链接已复制到粘贴板!
当主机上没有带有所需存储的卷组时,请使用这个步骤。创建并分配要与容器共享的额外 LVM 卷组循环设备,并由 MicroShift 逻辑卷管理器(LVM)容器存储接口(CSI)使用。
如果您在检查 MicroShift CSI 的主机配置时找到一个有足够空间的卷组,则不需要完成此步骤。继续运行 bootc 镜像。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。
流程
运行以下命令,创建一个用于 LVM 分区的文件:
VGFILE=/var/lib/microshift-lvm-storage.img sudo losetup -f "${VGFILE}"VGFILE=/var/lib/microshift-lvm-storage.img sudo losetup -f "${VGFILE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将文件调整为指定的大小:
VGSIZE=1G $ sudo truncate --size="${VGSIZE}" "${VGFILE}"VGSIZE=1G1 $ sudo truncate --size="${VGSIZE}" "${VGFILE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定文件的大小。
运行以下命令来查询 loop 设备名称:
VGLOOP=$(losetup -j ${VGFILE} | cut -d: -f1)$ VGLOOP=$(losetup -j ${VGFILE} | cut -d: -f1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在 loop 设备中创建空闲卷组:
sudo vgcreate -f -y <my-volume-group> "${VGLOOP}"$ sudo vgcreate -f -y <my-volume-group> "${VGLOOP}"1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将 < my-volume-group > 替换为您要创建的卷组的名称。
1.5. 运行 MicroShift bootc 容器 复制链接链接已复制到粘贴板!
运行 MicroShift bootc 容器,以探索其复杂性并试验新的功能和依赖项。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。 - 您有一个 pull secret 文件,用于下载所需的 MicroShift 容器镜像。
流程
输入以下命令为 MicroShift 服务运行容器:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果主机内核版本与 bootc 镜像内核版本不同,
systemd-modules-load服务将无法在容器中启动。可以安全地忽略此故障,因为主机已加载了所有必要的内核模块。- MicroShift 启动后,终端会显示登录提示。
- 使用您的用户凭据登录正在运行的容器。
运行以下命令,验证所有 MicroShift pod 是否正在运行,且没有错误:
watch sudo oc get pods -A \ --kubeconfig /var/lib/microshift/resources/kubeadmin/kubeconfig$ watch sudo oc get pods -A \ --kubeconfig /var/lib/microshift/resources/kubeadmin/kubeconfigCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 现在,您可以使用在容器中运行的 MicroShift,与使用任何其他 MicroShift 集群一样。
1.5.1. 远程访问 MicroShift 集群 复制链接链接已复制到粘贴板!
使用以下步骤,使用 kubeconfig 文件从远程位置访问 MicroShift 集群。
user@workstation 登录用于远程访问主机计算机。该流程中的 <user> 值是 user@workstation 登录到 MicroShift 主机所使用的用户名。
先决条件
-
已安装
oc二进制文件。 -
user@microshift已打开来自本地主机的防火墙。
流程
以
user@workstation的身份,如果 Red Hat Enterprise Linux (RHEL)机器没有,使用以下命令创建一个~/.kube/文件夹:mkdir -p ~/.kube/
[user@workstation]$ mkdir -p ~/.kube/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以
user@workstation的身份,运行以下命令来为您的 MicroShift 主机的主机名设置变量:MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>
[user@workstation]$ MICROSHIFT_MACHINE=<name or IP address of MicroShift machine>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以
user@workstation的身份,运行以下命令来复制生成的kubeconfig文件,该文件包含您要从运行 MicroShift 的 RHEL 机器连接到本地机器的主机名或 IP 地址:ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/config
[user@workstation]$ ssh <user>@$MICROSHIFT_MACHINE "sudo cat /var/lib/microshift/resources/kubeadmin/$MICROSHIFT_MACHINE/kubeconfig" > ~/.kube/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要为此步骤生成
kubeconfig文件,请参阅为远程访问生成额外的 kubeconfig 文件。以
user@workstation的身份,运行以下命令来更新~/.kube/config文件的权限:chmod go-r ~/.kube/config
$ chmod go-r ~/.kube/configCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
以
user@workstation的身份,输入以下命令验证 MicroShift 是否正在运行:oc get all -A
[user@workstation]$ oc get all -ACopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.6. 为 bootc 镜像和 MicroShift CSI 清理容器存储 复制链接链接已复制到粘贴板!
您可以删除与容器共享的额外 LVM 卷组循环设备,并由 MicroShift 逻辑卷管理器(LVM)容器存储接口(CSI)使用。
先决条件
- 一个 Red Hat Enterprise Linux (RHEL) 9.4 主机,具有有效的红帽订阅,用于构建 MicroShift bootc 镜像和运行容器。
-
您使用具有
sudo权限的用户凭证登录到 RHEL 9.4 主机。
流程
使用以下命令清理 loop 设备和其他卷组:
输入以下命令分离 loop 设备:
sudo losetup -d "${VGLOOP}"$ sudo losetup -d "${VGLOOP}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令删除 LVM 卷组文件:
sudo rm -f "${VGFILE}"$ sudo rm -f "${VGFILE}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow