从零搭建一个单节点 K8S 可观测实验室(一):从 Ubuntu 24.04 开始

最近准备把前段时间自己搭过的一套环境整理成系列文章:从零搭建一个单节点 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 处理器:2

Kubernetes 和后面的可观测组件都比较吃资源,尤其 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 了。