使用 Podman 桌面创建 MicroShift 可启动镜像
如果您不熟悉 BootC,它提供了一种令人印象深刻的方法,可以从单个 Containerfile 或预先存在的 bootc 支持的镜像直接将应用程序部署到裸机。
一个“可启动”镜像,被称为 BootC 容器镜像,允许您使用简单的容器镜像来创建完整的可启动操作系统,无论是 raw
虚拟机镜像还是用于 USB 安装的 iso
!
此功能非常适合各种用途,从简单的 HTTP 服务器到为全栈应用程序供电的操作系统。
在本教程中,我们将部署一个名为 MicroShift 的 OpenShift 派生产品,它是 OpenShift 的边缘优化版本,专为单节点设置和资源受限配置而设计。将其视为 OpenShift 的紧凑版本!
整个过程使用单个 Containerfile(或 Dockerfile)完成。
要求
在开始本教程之前,请确保您拥有以下内容
- 一个有效的 Red Hat 帐户 以访问基于 RHEL 的镜像
- 访问 OpenShift Hybrid Cloud 拉取密钥
- 已安装 Podman 桌面
- Podman 桌面 BootC 扩展
- 您喜欢的 VM 运行软件(例如,使用 libvirt)
构建 BootC 容器镜像
首先,我们将从 BootC 容器镜像构建初始镜像,稍后我们将从中创建可启动的操作系统。
登录 Red Hat 注册表
在继续之前,请从目录中下载 Red Hat 身份验证扩展,以启用对 Red Hat 注册表的访问。
然后登录您的帐户。
下载您的 OpenShift Hybrid Cloud 拉取密钥
下载您的 拉取密钥。
将其下载为 pull-secret.txt
。将其放在安全的位置。
创建 Containerfile(或 Dockerfile)
Containerfile 对创建可启动镜像至关重要。
需要注意的是,我们在构建过程中将提供一个参数,即用于访问虚拟机的密码,该虚拟机将通过 redhat
用户名登录。
我们将使用来自 MicroShift 镜像模式 GitHub 文档 的 Containerfile。
将 Containerfile 从上面的链接复制到一个新文件,我们将使用 Podman 桌面构建该文件。
$ curl https://raw.githubusercontent.com/openshift/microshift/main/docs/config/Containerfile.bootc-rhel9 -o Containerfile
使用 Podman 桌面构建
选择 Containerfile 并使用 Podman 桌面进行构建。
您需要提供以下内容
- 将在 Containerfile 中创建的
redhat
用户的密码。
在构建页面参数中将参数传递为 USER_PASSWD
。
使用 BootC Podman 桌面扩展构建可启动镜像
安装
从扩展目录安装 BootC Podman 桌面扩展。
构建镜像
现在,从我们的容器镜像创建可启动镜像!
单击导航栏上的新 BootC 图标,然后转到构建。
构建完成后,您将在仪表板上看到确认信息。
接下来,选择我们构建的镜像并选择合适的输出格式以测试可启动镜像。RAW 是使用 QEMU 和其他 VM 软件(如 libvirt
)进行本地测试的常见选择。
测试镜像
探索使用本地软件或云平台测试镜像的各种方法。以下是使用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 登录 VM
$ 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 登录 VM
$ 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 桌面验证 MicroShift
或者,您可以将 MicroShift 配置文件复制到本地机器,并在 Podman 桌面远程对其进行测试。
- 在您的本地机器上,创建
.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 桌面验证 MicroShift 集群。
Podman 桌面会自动检测您的 .kube/config
文件。
注意:您可能需要修改您的 .kube/config
文件,以反映您的集群的正确域名或 IP 地址。
存储配置
默认情况下,存储配置 需要 LVM 分区,并且不会部署 LVMS 存储管理器。这是由于在构建 RAW 镜像时存在限制。需要使用非本地存储解决方案才能使用具有存储功能的 OpenShift 工件。添加 LVM 支持的功能在此 拉取请求 中跟踪。
结论
本教程逐步介绍了使用 Podman Desktop 和 BootC 扩展部署可启动 MicroShift 镜像的方法。通过利用 BootC 和 Podman 等工具,我们简化了创建轻量级且功能齐全的 OpenShift 环境的过程,该环境适用于单节点边缘计算场景。
感谢您的关注,祝您部署顺利!