使用 Podman Desktop 创建 MicroShift 可启动镜像

如果您不熟悉 BootC,它提供了一种令人印象深刻的方法,可以直接从单个 Containerfile 或预先存在的、支持 bootc 的镜像将应用程序部署到裸机上。
一个“可启动”镜像,也称为 BootC 容器镜像,允许您使用一个简单的容器镜像来创建一个完整的可启动操作系统,无论是 raw 格式的虚拟机镜像还是用于 USB 安装的 iso!
此功能非常适合各种用途,从简单的 HTTP 服务器到为全栈应用程序提供支持的操作系统。
在本教程中,我们将部署一个名为 MicroShift 的 OpenShift 衍生版,这是一个专为资源受限配置下的单节点设置而优化的 OpenShift 边缘版本。可以把它看作是 OpenShift 的一个紧凑版!
整个过程都通过一个单独的 Containerfile(或 Dockerfile)来完成。
要求
开始本教程前,请确保您已具备:
- 一个有效的 Red Hat 帐户,以便访问基于 RHEL 的镜像。
- 访问 OpenShift Hybrid Cloud 的拉取凭证。
- 已安装 Podman Desktop。
- Podman Desktop BootC 扩展。
- 您偏好的虚拟机运行软件(例如,使用 libvirt)
构建 BootC 容器镜像
首先,我们将构建初始的 BootC 容器镜像,稍后我们将用它来创建一个可启动的操作系统。
登录 Red Hat 镜像仓库
在继续之前,请从目录中下载 Red Hat Authentication 扩展,以启用对 Red Hat 镜像仓库的访问。

然后登录您的帐户。

下载您的 OpenShift 混合云拉取密钥
下载您的拉取凭证。
它会以 pull-secret.txt 的形式下载。请将其存放在安全的位置。
创建 Containerfile(或 Dockerfile)
Containerfile 对于创建可启动镜像至关重要。
需要注意的是,在构建过程中,我们将提供*一个*参数,即 PASSWORD,以便通过 redhat 用户名登录虚拟机。
我们将使用 MicroShift 镜像模式 GitHub 文档中的 Containerfile。
将上述链接中的 Containerfile 复制到一个新文件中,我们将使用 Podman Desktop 来构建它。
$ curl https://raw.githubusercontent.com/openshift/microshift/main/docs/config/Containerfile.bootc-rhel9 -o Containerfile
使用 Podman Desktop 构建
选择 Containerfile 并在 Podman Desktop 中构建它。
您需要提供:
- 在 Containerfile 中创建的
redhat用户的密码。
在构建页面的参数中以 USER_PASSWD 的形式传递该参数。

使用 BootC Podman Desktop 扩展构建可引导镜像
安装
从扩展目录安装 BootC Podman Desktop 扩展。

构建镜像
现在,从我们的容器镜像创建可启动镜像!
点击导航栏上新的 BootC 图标,然后转到构建页面。

构建完成后,您会在仪表盘上看到一条确认信息。
接下来,选择我们构建的镜像,并为测试可启动镜像选择一个合适的输出格式。对于使用 QEMU 和其他虚拟机软件(如 libvirt)进行本地测试,RAW 是一个常见的选择。
测试镜像
探索各种测试镜像的方法,可以使用本地软件或云平台。以下是使用 RAW 输出的可启动镜像的一些常见步骤。
运行虚拟机
本指南不涵盖所有运行虚拟机的方法,但以下是最常见的几种:
- Windows (.vhd)
- macOS Silicon (.raw)
- Linux (.raw)
当使用 Hyper-V 时,用 BootC 创建一个 .vhd 镜像。
- 构建时,选择
.vhd选项。 - 安装 Hyper-V
- 导入虚拟机
-
构建时,选择
.raw选项和 ARM64 架构。 -
安装 QEMU
$ brew install qemu
- 导航到包含您的
disk.raw文件的目录。
$ cd ~/output
- 运行
qemu命令
$ qemu-system-aarch64 \
-m 8G \
-M virt \
-accel hvf \
-cpu host \
-smp 4 \
-serial mon:stdio \
-nographic \
-netdev user,id=mynet0,hostfwd=tcp::2222-:22 \
-device e1000,netdev=mynet0 \
-drive file=/opt/homebrew/share/qemu/edk2-aarch64-code.fd,format=raw,if=pflash,readonly=on \
-drive file=disk.raw,if=virtio,cache=writethrough,format=raw
- 验证连接
通过上述 qemu 命令,本地已在 :2222 端口上打开了一个端口,用于 SSH 转发到可启动镜像。您现在可以通过以下方式访问您的虚拟机:
$ ssh redhat@localhost -p 2222
-
构建时,选择
.raw选项和 AMD64 架构。 -
导航到包含您的
disk.raw文件的目录。
$ cd ~/output
- 运行
qemu命令
$ qemu-system-x86_64 \
-m 8G \
-cpu Broadwell-v4 \
-nographic \
-netdev user,id=mynet0,hostfwd=tcp::2222-:22 \
-device e1000,netdev=mynet0 \
-snapshot disk.raw
- 验证连接
通过上述 qemu 命令,本地已在 :2222 端口上打开了一个端口,用于 SSH 转发到可启动镜像。您现在可以通过以下方式访问您的虚拟机:
$ ssh redhat@localhost -p 2222
配置和验证 MicroShift
启动虚拟机后,您现在可以配置 MicroShift 并验证连接。
复制 OpenShift 拉取凭证
在继续验证 OpenShift 之前,必须先将 OpenShift 拉取凭证复制过去,以便 MicroShift 可以下载需要 Red Hat 镜像仓库认证的容器镜像。
下面我们将把您之前下载的 OpenShift 凭证复制到虚拟机中。
-
下载您的 OpenShift 拉取凭证,它会以
pull-secret.txt的形式下载。 -
使用
scp复制到虚拟机
$ scp -P 2222 pull-secret.txt redhat@localhost:~/
- 通过 SSH 登录到虚拟机
$ ssh redhat@localhost -p 2222
- 将凭证移动到
/etc/crio/openshift-pull-secret
$ sudo mv pull-secret.txt /etc/crio/openshift-pull-secret
- 重启
microshift服务
$ sudo systemctl restart microshift
列出 Pod
下面我们将通过 SSH 登录到虚拟机,并确认 MicroShift 正在正确部署 Pod。
- 通过 SSH 登录到虚拟机
$ ssh redhat@localhost -p 2222
- 将生成的
kubeconfig文件复制到~/.kube/config
$ mkdir -p ~/.kube
$ sudo cp /var/lib/microshift/resources/kubeadmin/kubeconfig ~/.kube/config
$ sudo chown redhat ~/.kube/config
- 使用
oc或kubectl验证 Pod 是否正在运行
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system csi-snapshot-controller-856bb8b9bc-9n7lj 1/1 Running 1 3d23h
kube-system csi-snapshot-webhook-7c64d4d4d7-98v6l 1/1 Running 1 3d23h
openshift-dns dns-default-n2td4 2/2 Running 2 3d23h
openshift-dns node-resolver-7cslg 1/1 Running 1 3d23h
openshift-ingress router-default-7cbc67954b-nqqc6 1/1 Running 1 3d23h
openshift-ovn-kubernetes ovnkube-master-zcqw5 4/4 Running 5 3d23h
openshift-ovn-kubernetes ovnkube-node-crnn9 1/1 Running 2 3d23h
openshift-service-ca service-ca-6799f567-k7lsc 1/1 Running 1 3d23h
使用 Podman Desktop 验证 MicroShift
或者,您可以将 MicroShift 配置文件复制到本地计算机,并在 Podman Desktop 上进行远程测试。
- 在您的本地计算机上,如果
.kube目录不存在,请创建它。
$ mkdir ~/.kube
- 将远程
kubeconfig文件复制到本地配置文件
在 MicroShift 中,一个 kubeconfig 文件会自动创建在 /var/lib/microshift/resources/kubeadmin/kubeconfig。
将该文件复制到您的本地系统
scp -P 2222 redhat@localhost:/var/lib/microshift/resources/kubeadmin/kubeconfig ~/config
如果您已经有一个 ~/.kube/config 文件,请将 config 的内容复制到 ~/.kube/config 文件中。
- 使用 Podman Desktop 验证 MicroShift 集群
Podman Desktop 将自动检测您的 .kube/config 文件。
注意:您可能需要修改您的 .kube/config 文件,以反映您集群的正确域名或 IP 地址。

存储配置
默认情况下,存储配置需要一个 LVM 分区,并且不会部署 LVMS 存储管理器。这是由于构建 RAW 镜像时的限制所致。要使用具有存储能力的 OpenShift 工件,需要一个替代的非本地存储解决方案。添加 LVM 支持的功能正在此拉取请求中跟踪。
结论
本教程提供了使用 Podman Desktop 和 BootC 扩展部署可引导 MicroShift 镜像的分步指南。通过利用 BootC 和 Podman 等工具,我们简化了创建轻量级但功能齐全的 OpenShift 环境的过程,该环境适用于单节点边缘计算场景。
感谢您的跟随,祝您部署愉快!
