曲线救国:通过 OrbStack 在 Apple Silicon 平台搭建 K3s x86 集群

曲线救国:通过 OrbStack 在 Apple Silicon 平台搭建 K3s x86 集群

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

本文介绍了作者在使用M1 MacBook Pro和OrbStack创建虚拟机以及使用K3s集群时遇到的技术挑战。作者发现在x86虚拟机上安装K3s时会出现问题,怀疑问题可能出在K3s内置的Containerd配置上。作者尝试使用Docker作为容器运行时来解决问题,并通过在集群创建时添加--docker参数来配置K3s使用Docker。最后,作者验证了这一解决方案,并成功安装了K3s集群。

🔎

延伸解读

问题根源:Containerd 与 seccomp 的兼容性

文章指出,在 OrbStack 创建的 x86 虚拟机上安装 K3s 时,会遇到“seccomp is not supported”的错误。由于 Docker 和 K3s 都依赖 Containerd,但 Docker 运行正常,作者怀疑问题出在 K3s 内置的 Containerd 配置上。这提示我们,在类似虚拟化环境中,容器运行时的 seccomp 支持可能成为关键瓶颈,而不仅仅是 K3s 本身的问题。

解决方案:切换 K3s 的容器运行时为 Docker

作者通过为 K3s 添加 --docker 参数,将容器运行时从内置的 Containerd 切换为 Docker,从而绕过了 seccomp 错误。这一做法利用了 Docker 在该环境下已正常工作的特性,且 K3s 官方文档支持此配置。对于遇到类似兼容性问题的用户,这提供了一个可行的替代方案,但需注意 Docker 作为运行时可能带来额外的资源开销。

实践验证:从安装到确认的完整流程

文章详细记录了验证步骤:使用 OrbStack 创建 x86 Ubuntu 22.04 虚拟机,安装 Docker 并验证其能运行 amd64 镜像,然后通过脚本安装 K3s 并禁用 traefik、local-storage 等非必要组件。最终通过 kubectl 确认节点使用 docker://26.1.0 作为容器运行时,集群运行正常。这一流程表明,在 Apple Silicon 上模拟 x86 环境搭建 K3s 集群是可行的,但需严格遵循步骤。

资源管理:测试后及时清理虚拟机

文章在结尾提醒,验证完成后记得删除虚拟机以释放资源。这反映了在本地开发环境中,临时创建的虚拟机和集群可能占用大量磁盘和内存,尤其是通过 Rosetta 转换运行的 x86 虚拟机。养成及时清理的习惯,可以避免资源浪费,保持开发机的高效运行。

❓

Q&A

如何在 Apple Silicon 上使用 OrbStack 创建虚拟机?

可以通过命令 'orb create -a amd64 ubuntu:jammy ubuntu' 创建一个 x86 的 Ubuntu 22.04 虚拟机。

在安装 K3s 时遇到的问题是什么?

在 x86 虚拟机上安装 K3s 时,出现了与 Containerd 配置相关的问题,导致无法创建 pod sandbox。

如何解决 K3s 安装中的 Containerd 配置问题?

可以通过在创建 K3s 集群时添加 '--docker' 参数,让 K3s 使用 Docker 作为容器运行时来解决问题。

如何在虚拟机上安装 Docker?

可以通过 SSH 进入虚拟机后,执行 'sudo apt update' 和 'sudo apt install -y gpg',然后按照 Docker 官方文档的步骤安装 Docker。

安装 K3s 时需要禁用哪些组件?

在安装 K3s 时,可以禁用 traefik、local-storage、metrics-server 和 servicelb,以实现轻量级安装。

安装完成后如何验证 K3s 集群的运行状态?

可以使用 'kubectl get po -A' 命令查看所有命名空间的 pod 状态,确认 K3s 集群是否正常运行。

🏷️

标签

➡️

继续阅读