Featured image of post KVM + Cockpit 打造家庭虚拟化平台

KVM + Cockpit 打造家庭虚拟化平台

在一台 i7-10700T / 64G / 1T NVMe 内存的小主机上,运行多个虚拟机,构建后端开发平台的基石。

🏠 KVM + Cockpit 打造家庭虚拟化平台

树莓派只是开始。

我用它跑了 Git、Drone、博客、FRP,甚至尝试了中间件容器,但它的性能注定是实验性的。于是,我正式上马了:

Dell 7080MFF(i7-10700T / 64G / 1T NVMe)

这台性能小钢炮,终于承担起“家庭云平台核心节点”的任务。而我给它装上的第一层盔甲是:

Ubuntu + KVM + Cockpit

这是一个轻量、开源、图形化的虚拟化平台,足以支持我后续部署 Kubernetes、MySQL、Redis、Flink 等中间件集群。


💡 为什么不用 Docker 直接部署?

因为我需要隔离性更强的环境,用于:

  • 测试不同操作系统(如 Ubuntu Server、Debian、Windows)
  • 模拟生产部署架构(多个虚拟机互通)
  • 独立调试网络策略、防火墙、桥接等

Docker 用于中间件和微服务;KVM 用于操作系统层的“沙箱”。


⚙️ 安装流程一览

系统环境:Ubuntu Desktop 25.04

✅ 安装虚拟化组件

1
2
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

这会安装 KVM、libvirt 和 virt-manager(桌面版 GUI 管理器,可选)。

✅ 安装 Web 管理工具 Cockpit

1
sudo apt install -y cockpit cockpit-machines

cockpit-machines 是虚拟机管理插件,必须安装。

✅ 启用 Cockpit Socket(注意!不是直接启动服务)

1
sudo systemctl enable --now cockpit.socket

Cockpit 是通过 socket 按需激活的服务,不能用 systemctl enable cockpit 启动。你可以确认状态:

1
sudo systemctl status cockpit.socket

出现 Active: active (listening) 就表示启动成功。


🌐 Web 管理面板初体验

打开浏览器访问:

1
https://<宿主机IP>:9090

例如:

1
https://192.168.1.100:9090

首次访问会提示自签证书不可信,继续访问即可。使用你的系统用户名/密码登录。

登录后进入 “虚拟机” 页面,就能看到熟悉的图形界面,可以:

  • 上传 ISO 镜像
  • 创建新虚拟机(分配 CPU / 内存 / 磁盘)
  • 启动 / 停止 / 克隆 / 快照
  • 浏览器中直接访问桌面(VNC / SPICE)

没有复杂命令,点几下鼠标就能把虚拟机跑起来。


👤 用户权限设置(必须)

为了能够创建和管理虚拟机,需要将当前用户加入 libvirtkvm 组:

1
sudo usermod -aG libvirt,kvm $(whoami)

执行完后需要重新登录终端或桌面会话。


🧱 虚拟化环境结构规划

我在这台 Ubuntu Desktop 上,通过 virt-manager + Cockpit 构建了一个 KVM 虚拟化平台,所有服务都运行在虚拟机中,便于资源隔离、快照备份和故障恢复。

各个虚拟机按功能划分为三类:

层级功能描述
基础系统 VM最小化安装的 Ubuntu Server 22.04 / Debian,用作集群节点操作系统
集群节点 VMKubernetes 节点、Kafka、Flink 等服务运行环境
辅助用途(Docker 宿主机)Gitea、Drone 等工具直接部署在宿主机的 Docker 中,无需额外 VM

目前所有虚拟机使用 NAT 网络模式,宿主机通过端口转发或 FRP 实现外部访问。


🛠️ 安装虚拟机并配置静态 IP

✅ 安装 Ubuntu Server 虚拟机

我的第一台虚拟机是一个基础系统 VM,作为其他服务的模板。

安装步骤如下:

  1. 从 Ubuntu 官网下载 ubuntu-22.04-server.iso

  2. 将 ISO 镜像移动到虚拟机镜像目录:

    1
    
    sudo mv ubuntu-22.04-server.iso /var/lib/libvirt/images/
    
  3. 打开 Cockpit(通过浏览器访问宿主机 9090 端口);

  4. 虚拟机 > 创建新虚拟机 中,选择该 ISO 镜像;

  5. 按照界面提示配置 CPU、内存、磁盘等参数,完成 Ubuntu Server 安装。

完成首个虚拟机安装后,我通过 Cockpit 提供的“克隆虚拟机”功能,快速复制出多个节点 VM,省去重复安装步骤。


✅ 配置静态 IP 地址

安装好几台虚拟机后,我发现一个大问题:

所有 VM 居然默认分配到同一个 IP,导致后启动的虚拟机会把前一个挤掉,网络出现冲突。

为了解决这个问题,我为每台虚拟机绑定了静态 IP:

  1. 在每台虚拟机中查找其网络接口的 MAC 地址

  2. 回到宿主机的 Cockpit 界面,在 虚拟网络 → 网络 → 静态主机条目 中,点击添加:

    • 填写对应的 MAC 地址;
    • 指定一个固定 IP 地址(比如 192.168.122.11, 192.168.122.12 等);
    • 保存设置。
  3. 重启所有虚拟机,使配置生效。

screenshot2.pngscreenshot3.png

现在,每台虚拟机都有了唯一的固定 IP,方便我后续用 Kubeadm 或 SSH 来管理和部署服务。

🔐 Cockpit + FRP 实现公网访问

我使用 FRP 将 Cockpit 面板穿透到公网:

1
2
3
4
5
[[proxies]]
name = "cockpit"
type = "tcp"
localPort = 9090
remotePort = 9090

这样我就可以通过阿里云域名远程访问家庭服务器上的 Web 管理界面了:

1
https://cockpit.yourdomain.com:9090

📸 控制面板截图

screenshot0.pngscreenshot1.png


🚀 结语:家庭虚拟化平台正式启航

这台 64G 的 Dell 主机,已经成功取代了树莓派成为新的家庭云核心。未来我将:

  • 在虚拟机中部署 Kubernetes 集群
  • 用 GitOps 管理基础架构配置
  • 实现博客、CI/CD、监控、存储、日志等模块集成

敬请期待。

使用 Hugo 构建
主题 StackJimmy 设计