:从 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虚拟机配置建议CPU2 核 内存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 ISOhttps://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 servers 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再输入密码vboxuser192.168.56.103s password: 123456看到 Ubuntu 命令行提示符后就说明 SSH 登录成功了。后面大部分操作都可以在 SSH 终端里完成便于直接复制粘贴命令输出等内容。二十九、可选配置 HTTP 代理如果你的网络环境需要代理访问 GitHub、Docker Hub 或某些软件源可以配置 HTTP 代理环境变量。编辑/etc/profilesudo vi /etc/profile在文件最后追加export https_proxyhttp://proxy_ip_address:proxy_port export http_proxyhttp://proxy_ip_address:proxy_port export ftp_proxyhttp://proxy_ip_address:proxy_port export no_proxy127.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 了。