最近准备把前段时间自己搭过的一套环境整理成系列文章:从零搭建一个单节点 K8S 可观测实验室。
这个系列不是为了搭一个生产级 Kubernetes 集群,也不是为了追求复杂架构,而是想从一台普通的本地虚拟机开始,逐步搭出一个可以长期使用的个人技术实验室。
它可以用来研究 Kubernetes、Docker、Linux 网络、可观测系统、CI/CD,也可以用来验证一些平时在文档里看到但没有真正动手做过的东西。
这一篇先从最基础的部分开始:在 Windows 11 上使用 VirtualBox 安装 Ubuntu 24.04 Server 虚拟机。
一、为什么要搭一个单节点 K8S 可观测实验室?
很多技术概念,单独看文档时好像能理解,但真正要把它们串起来,就会发现中间有很多断点。
比如 Kubernetes 负责运行应用,Prometheus 负责采集指标,Grafana 负责展示,Loki 负责收集日志,Tempo 负责链路追踪,OpenTelemetry 负责把应用里的观测数据送出来。
这些组件单独看都不算难,但真正有价值的是把它们连成一条完整链路:
应用运行在 Kubernetes 里 -> 产生指标、日志、Trace -> 被采集、存储、查询、展示 -> 帮助我们观察系统、定位问题、验证改动所以我想搭一个小型实验室,把这些东西放在同一个环境里慢慢研究。
单节点的好处是成本低、可控、方便重装。即使搭坏了,也可以直接删掉虚拟机重来。对个人学习和技术验证来说,这种环境反而很合适。
二、这个系列大致会包括什么?
这个系列后续大致会围绕几个方向展开,具体内容可能会根据实际搭建过程调整。
大致包括:
在 VirtualBox 里安装 Ubuntu 24.04 Server
在 Ubuntu 上安装单节点 Kubernetes
安装 Prometheus + Grafana,观察集群指标
安装 Loki + Fluent Bit,收集 Kubernetes 日志
安装 Tempo + OpenTelemetry,跑通最小链路追踪 Demo
接入 Jenkins 或 GitHub Actions,尝试 CI/CD 流程
做一些简单压测、告警和故障验证
总结这个实验室如何用于后续研究、表达和技术积累
这里不会一开始就追求“大而全”,而是尽量从一个能跑起来、能看见现象、能反复实验的环境开始。
三、这个实验室后续还能用来做什么?
虽然这个系列的主线是 Kubernetes 和可观测,但这台虚拟机后续其实可以扩展出很多方向。
1. 从虚拟机到容器,再到 Kubernetes
这个环境本身就包含了一条很典型的技术链路:
Windows 11 宿主机 -> VirtualBox 虚拟机 -> Ubuntu 24.04 Server -> containerd / Docker -> Kubernetes Pod通过这条链路,可以顺着理解虚拟机、Linux、容器和 Kubernetes 之间的关系。
比如,VM 和容器到底有什么区别?Docker 和 Kubernetes 是什么关系?容器里的 root 和宿主机 root 是不是一回事?privileged 容器为什么会带来安全风险?
这些问题光看概念容易模糊,自己搭一个环境之后,就可以慢慢实验和验证。
2. 学习 Kubernetes 配置、权限和安全边界
单节点环境虽然不是生产环境,但非常适合学习 Kubernetes 的基础资源和权限模型。
比如 Pod、Service、ConfigMap、Secret、Volume、Namespace、ServiceAccount、RBAC、Security Context 等,都可以在这个环境里反复尝试。
尤其是权限相关内容,平时看起来比较抽象,但实际操作后会更容易理解:什么情况下容器权限不够,什么情况下权限又给得太大,为什么生产环境要限制 privileged 容器和 HostPath 挂载。
3. 增加网卡后,可以继续研究网络
如果后面给虚拟机增加更多网卡,还可以继续研究 Linux 网络和 Kubernetes 网络。
比如 NAT、Host-Only、Bridge、路由表、iptables/nftables、tcpdump 抓包、CNI、Service 访问路径等,都可以在这个基础环境上继续展开。
如果进一步深入高性能网络方向,还可以把它和 SR-IOV、DPDK、HugePages、CPU 亲和性、NUMA 等概念关联起来。
当然,VirtualBox 本身不是做高性能网络实验的最佳环境。如果真的要研究 DPDK、SR-IOV 或网卡直通,后面最好还是使用物理机、KVM/QEMU 或更专业的虚拟化环境。
但作为入门和概念验证,这个实验室已经足够有价值。
4. 有 GPU 后,可以扩展到 AI 部署
如果后面有合适的 GPU 资源,还可以把这个实验室扩展到 AI 应用部署。
比如部署一个简单的模型 API、Embedding 服务、Ollama、vLLM 或其他推理服务,再配合 Prometheus、Grafana、日志和 Trace 去观察它的运行状态。
GPU 资源调度、NVIDIA Container Toolkit、Kubernetes Device Plugin、显存监控这些内容,也可以作为后续扩展方向。
不过 GPU 相关实验对硬件和虚拟化环境要求更高,VirtualBox 并不是最理想的 GPU 透传方案。所以第一阶段还是先把 Linux、Kubernetes、可观测和 CI/CD 这条主线跑通。
四、实验环境说明
本文使用的环境是:
宿主机:Windows 11 虚拟化软件:Oracle VirtualBox 虚拟机系统:Ubuntu 24.04 LTS Server虚拟机配置建议:
CPU:2 核 内存:4GB 起步 硬盘:50GB 以上,建议 100GB我这里直接给了 100GB 硬盘空间,主要是为了避免后面安装 Kubernetes 镜像、Prometheus、Loki、Tempo 等组件后空间不够,还要再折腾扩容。
Ubuntu 这里选择 24.04 LTS,而不是追最新版本。原因很简单:这个实验室的重点是学习 Kubernetes 和可观测系统,底层操作系统先选择一个稳定的 LTS 版本更合适。
五、下载并安装 VirtualBox
先到 VirtualBox 官网下载 Windows 版本安装包:
https://www.virtualbox.org/wiki/Downloads安装完成后,建议使用管理员模式启动 VirtualBox。
这样后面创建虚拟机、配置 Host-Only 网络时,可以减少一些权限相关的问题。
六、下载 Ubuntu 24.04 Server ISO
到 Ubuntu Server 官网下载 Ubuntu 24.04 LTS Server ISO:
https://ubuntu.com/download/server本文使用的是类似下面这样的 ISO 文件:
ubuntu-24.04.4-live-server-amd64.iso下载完成后,先放在一个固定目录里备用。
七、创建 Ubuntu 虚拟机
打开 VirtualBox,选择菜单:
控制 -> 新建填写虚拟机基本信息:
名称:Ubuntu24.04S 文件夹:默认,或者自己指定一个目录 虚拟光盘:选择刚才下载的 ubuntu-24.04.4-live-server-amd64.iso 操作系统版本:Ubuntu 24.04 LTS这里有一个比较重要的选项:
继续进行无人值守安装建议取消勾选。
无人值守安装虽然方便,但有时候容易引入一些不符合预期的配置。对于实验环境来说,手动安装一遍反而更稳,也能顺便熟悉 Ubuntu Server 的安装流程。
八、指定虚拟硬件
点击“指定虚拟硬件”。
建议配置:
内存:4096 MB 处理器:2Kubernetes 和后面的可观测组件都比较吃资源,尤其 Prometheus、Grafana、Loki、Tempo 都跑起来之后,内存太小会比较难受。
如果电脑资源允许,内存给 4GB 起步会比较合适。
九、指定虚拟硬盘
点击“指定虚拟硬盘”。
硬盘空间可以按自己情况设置。
我这里设置成:
100 GB如果你的电脑磁盘空间比较紧张,也可以先给 50GB。
设置完成后,点击“完成”。
十、配置第二块网卡:Host-Only 网络
虚拟机创建完成后,不要急着启动。
先点击:
设置 -> 网络默认情况下,网卡 1 一般是 NAT,用于虚拟机访问外网。
这里我们再启用一块网卡,用于 Windows 宿主机通过 SSH 连接 Ubuntu 虚拟机。
选择:
网卡 2配置如下:
启用网络连接:勾选 连接方式:仅主机(Host-Only)网络这样配置后,虚拟机会有两类网络:
NAT 网络:用于虚拟机访问互联网 Host-Only 网络:用于宿主机 SSH 连接虚拟机这一步很重要。后面大部分操作都会通过 SSH 连接进去完成,而不是一直在 VirtualBox 的控制台窗口里敲命令。
十一、启动虚拟机并开始安装 Ubuntu
点击“启动”。
第一次启动时,VirtualBox 可能会弹出一些键盘、鼠标捕获相关提示,可以先看一下,然后把通知清掉。
进入 Ubuntu 安装界面后,开始安装。
十二、选择安装语言
安装界面一般没有中文选项,直接选择:
English回车继续。
十三、是否更新安装器
接下来会提示是否更新安装器。
为了节省时间,可以选择:
Continue without updating系统安装完成后,我们后面会统一执行更新,所以这里不更新也没关系。
十四、选择键盘布局
键盘布局保持默认即可。
选择:
Done十五、选择安装类型
这里选择:
Ubuntu Server如果你的磁盘或内存非常紧张,也可以选择:
Ubuntu Server (minimized)不过 minimized 版本会少一些常用包,后面可能需要自己补装。
为了减少不必要的问题,我这里选择标准的 Ubuntu Server。
十六、配置网络
网络配置页面一般不用改,保持默认即可。
选择:
Done十七、配置代理
如果你的网络环境需要 HTTP 代理,可以在这里填写代理地址,格式类似:
http://proxy_ip_address:proxy_port例如:
http://192.168.1.1:8080如果不需要代理,直接选择:
Done十八、配置 Ubuntu 镜像源
默认镜像源一般可以直接使用。
如果你在国内,遇到下载速度慢或者连接失败,也可以换成国内镜像源,例如:
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/配置完成后,选择:
Done十九、磁盘分区配置
磁盘布局保持默认即可。
选择:
Done下一页会显示最终的磁盘分区配置,也保持默认:选择:
Done随后系统会提示这是一个破坏性操作,会格式化虚拟硬盘。
选择:
Continue这里格式化的是虚拟机自己的虚拟硬盘,不会影响 Windows 宿主机硬盘。
二十、创建用户
接下来填写用户信息。
我这里实验环境使用的是:
Your name: vboxuser Your server's name: vbox-ubuntu24-server Pick a username: vboxuser Choose a password: 123456 Confirm your password: 123456这里的123456只是本地实验环境的演示密码。真实环境不要使用这种弱密码,更不要把弱密码机器暴露到公网。
填写完成后,选择:
Done二十一、是否启用 Ubuntu Pro
这里选择:
Skip for now然后选择:
Continue二十二、安装 OpenSSH Server
这一步非常重要。
安装界面会问是否安装 SSH Server。
用空格选中:
Install OpenSSH Server这里也可以导入 SSH key,不过为了简化实验流程,我这里暂时不导入,后面直接用密码登录。
选择:
Done二十三、选择 Server 可选组件
这里一个都不用选。
后面 Kubernetes、Prometheus、Grafana、Loki、Tempo 等组件,我们都会自己安装和配置。
直接选择:
Done二十四、等待系统安装完成
接下来 Ubuntu 会正式开始安装。
如果想看详细日志,可以选择:
View full log安装完成后,选择:
Reboot now二十五、重启前释放安装光盘
重启时需要注意:
如果提示移除安装介质,就在 VirtualBox 里释放 Ubuntu ISO 光盘。
可以在 VirtualBox 菜单里找到类似:
设备 -> 光驱 -> 移除虚拟盘否则可能会再次进入安装界面。
二十六、登录 Ubuntu Server
重启完成后,会进入 Ubuntu 登录界面。
有时候登录界面上会夹杂一些系统日志输出,看起来比较乱,这个没关系,按一下回车即可。
看到类似提示:
vbox-ubuntu24-server login:输入用户名:
vboxuser然后输入密码:
123456登录成功后,就会进入 Ubuntu Server 命令行环境。
二十七、查找 Host-Only 网卡 IP 地址
接下来需要找到虚拟机的 Host-Only 网络 IP,用于 Windows 上的 SSH 连接。
在 Ubuntu 里执行:
ip a s | grep 192.168我这台机器分到的地址是:
192.168.56.103你的地址可能不一样,比如:
192.168.56.101 192.168.56.102 192.168.56.104只要是192.168.56.x这一类地址,一般就是 VirtualBox Host-Only 网络地址。
二十八、使用 SSH 登录 Ubuntu 虚拟机
Windows 上可以直接使用 PowerShell 自带的 SSH,也可以使用 PuTTY、MobaXterm、Tabby、Termius 等工具。
这里我使用 PuTTY。
PuTTY 下载地址:
https://putty.org/index.html打开 PuTTY 后,在 Host Name 里填写刚才查到的 IP,例如:
192.168.56.103端口保持默认:
22连接类型选择:
SSH如果想保存会话,可以在 Saved Sessions 里填写一个名字,例如:
VBox_Ubuntu24.04然后点击:
Save这样以后就不用每次都手动输入 IP 了。
最后点击:
Open第一次连接时,如果遇到 Host Key 验证提示,点击:
Accept然后在登录提示后输入用户名:
login as: vboxuser再输入密码:
vboxuser@192.168.56.103's password: 123456看到 Ubuntu 命令行提示符后,就说明 SSH 登录成功了。
后面大部分操作都可以在 SSH 终端里完成,便于直接复制粘贴命令,输出等内容。
二十九、可选:配置 HTTP 代理
如果你的网络环境需要代理访问 GitHub、Docker Hub 或某些软件源,可以配置 HTTP 代理环境变量。
编辑/etc/profile:
sudo vi /etc/profile在文件最后追加:
export https_proxy=http://proxy_ip_address:proxy_port export http_proxy=http://proxy_ip_address:proxy_port export ftp_proxy=http://proxy_ip_address:proxy_port export no_proxy=127.0.0.1,localhost,192.168.56.0/24,192.168.31.0/24保存后执行:
source /etc/profile检查代理是否生效:
echo $http_proxy echo $https_proxy echo $no_proxy有些安装命令需要sudo,默认情况下 sudo 可能不会保留当前用户的代理环境变量。
建议使用visudo修改 sudoers 配置:
sudo visudo找到类似下面这一行:
#Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"把前面的#去掉:
Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"保存退出。
注意:不要直接随意编辑/etc/sudoers。如果 sudoers 文件格式写错,可能会导致 sudo 无法使用。visudo会在保存前做语法检查,更安全。
三十、更新 Ubuntu 24.04 系统组件
安装完成后,先更新软件包索引:
sudo apt update然后升级已有组件:
sudo apt upgrade -y如果看到类似下面的提示:
The following upgrades have been deferred due to phasing: fwupd一般不用紧张。这是 Ubuntu 的 phased updates 机制,表示部分更新正在分批推送。对于实验环境来说,通常可以先忽略,后面再更新即可。
升级完成后,可以重启一次虚拟机:
sudo reboot重启后再次用 PuTTY 登录即可。
三十一、这一篇完成了什么?
到这里,单节点 K8S 可观测实验室的第一步就完成了。
我们已经完成了:
安装 VirtualBox
下载 Ubuntu 24.04 Server ISO
创建 Ubuntu Server 虚拟机
配置 NAT + Host-Only 双网卡
手动安装 Ubuntu 24.04 Server
启用 OpenSSH Server
从 Windows 使用 SSH 登录 Ubuntu
可选配置 HTTP 代理
更新 Ubuntu 系统组件
这一步看起来比较基础,但它是后面所有实验的地基。
后续 Kubernetes、Prometheus、Grafana、Loki、Tempo、OpenTelemetry、CI/CD 等内容,都会建立在这台 Ubuntu Server 虚拟机上。
下一篇开始,就可以在 Ubuntu 24.04 上安装单节点 Kubernetes 了。