基于 KubeVirt + K3s 的虚拟机环境一键安装与管理脚本
支持一键安装 KubeVirt 运行时,并开设各种 Linux 虚拟机(提供 SSH 访问),支持 CPU、内存、磁盘资源限制,端口映射,cloud-init 初始化等。
- 使用 K3s 作为轻量级 Kubernetes,自动安装单节点集群
- 使用 KubeVirt 提供虚拟机能力(基于 KVM/QEMU)
- 使用 CDI(Containerized Data Importer)导入云镜像
- 通过 NodePort Service + iptables DNAT 实现端口映射
- 支持系统:Ubuntu 22.04, Debian 12, AlmaLinux 9, RockyLinux 9, CentOS Stream 9, openSUSE Leap 15.5
- 支持架构:amd64 (x86_64)
- 宿主机系统支持:Ubuntu 20.04/22.04/24.04,Debian 11/12
- 宿主机需支持 KVM 虚拟化(
/dev/kvm存在且可用) - 最低配置:2 核 CPU,4GB RAM,20GB 可用磁盘
- root 权限运行
- 需要公网访问以下载 K3s、KubeVirt 组件和虚拟机镜像
bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtinstall.sh)curl -sSL -o onevm.sh https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/onevm.sh
chmod +x onevm.sh
./onevm.sh <name> <cpu> <memory_gb> <disk_gb> <password> <sshport> <startport> <endport> [system]参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
name |
虚拟机名称(小写字母数字和连字符) | test |
cpu |
CPU 核心数 | 1 |
memory_gb |
内存(GB) | 1 |
disk_gb |
磁盘大小(GB) | 10 |
password |
root 密码 | 123456 |
sshport |
宿主机 SSH 映射端口 | 25000 |
startport |
公网端口范围起始 | 34975 |
endport |
公网端口范围结束 | 35000 |
system |
操作系统 | ubuntu |
支持的系统:
| 系统标识 | 说明 | 镜像来源 |
|---|---|---|
ubuntu |
Ubuntu 22.04 LTS | pve_kvm_images(ubuntu22) → kvm_images(ubuntu22) → 官方 |
ubuntu24 |
Ubuntu 24.04 LTS | pve_kvm_images(ubuntu22) → kvm_images(ubuntu22) → 官方 |
debian |
Debian 12 | pve_kvm_images(debian12) → kvm_images(debian12) → 官方 |
debian11 |
Debian 11 | pve_kvm_images(debian11) → kvm_images(debian11) → 官方 |
almalinux |
AlmaLinux 9 | pve_kvm_images(almalinux9) → kvm_images(almalinux9) → 官方 |
rockylinux |
RockyLinux 9 | pve_kvm_images(rockylinux9) → kvm_images(rockylinux9) → 官方 |
centos |
CentOS 7 | pve_kvm_images(centos7) → kvm_images(centos7) → 官方 |
centos8-stream |
CentOS Stream 8 | pve_kvm_images(centos8-stream) → kvm_images(centos8-stream) → 官方 |
centos-stream |
CentOS Stream 9 | 官方上游(无组织预置镜像) |
opensuse |
openSUSE Leap 15.5 | pve_kvm_images(opensuse-leap-15) → kvm_images(opensuse-leap-15) → 官方 |
示例:
./onevm.sh vm1 2 2 20 MyPassword 25000 34975 35000 debiancurl -sSL -o create_vm.sh https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/create_vm.sh
chmod +x create_vm.sh
./create_vm.shcurl -sSL -o listvms.sh https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/listvms.sh
chmod +x listvms.sh
./listvms.shcurl -sSL -o deletevm.sh https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/scripts/deletevm.sh
chmod +x deletevm.sh
./deletevm.sh <name>bash <(curl -sSL https://raw.githubusercontent.com/oneclickvirt/kubevirt/main/kubevirtuninstall.sh)批量开设时,连接信息会记录在当前目录的 vmlog 文件中,格式如下:
vm1 root@<宿主机IP>:25000 密码: MyPassword 端口范围: 34975-35000
vm2 root@<宿主机IP>:25001 密码: MyPassword 端口范围: 35001-35026
宿主机(K3s + KubeVirt)
├── K3s Kubernetes(单节点)
│ ├── KubeVirt Operator(管理虚拟机生命周期)
│ └── CDI(导入云镜像到 PVC)
├── 虚拟机 Pod(virt-launcher)
│ ├── vm1(QEMU/KVM)
│ │ ├── SSH :22 ←→ iptables DNAT → 宿主机:25000
│ │ └── 额外端口 ←→ iptables DNAT → 宿主机:34975-35000
│ └── vm2(QEMU/KVM)
│ ├── SSH :22 ←→ iptables DNAT → 宿主机:25001
│ └── 额外端口 ←→ iptables DNAT → 宿主机:35001-35026
# 查看所有虚拟机状态
kubectl get vm -n kubevirt-vms
# 查看虚拟机实例(运行中的)
kubectl get vmi -n kubevirt-vms
# 查看数据卷导入进度
kubectl get dv -n kubevirt-vms
# 进入虚拟机串口控制台(Ctrl+] 退出)
virtctl console <vmname> -n kubevirt-vms
# 启动/停止/重启虚拟机
virtctl start <vmname> -n kubevirt-vms
virtctl stop <vmname> -n kubevirt-vms
virtctl restart <vmname> -n kubevirt-vms- 虚拟机首次启动需要等待镜像下载导入(根据网速可能需要 5-20 分钟)
- 宿主机需要开启 KVM 嵌套虚拟化或直接使用裸金属服务器
- 端口转发通过 iptables 实现,重启后自动通过 systemd 服务恢复
- 如需重置密码,通过
virtctl console进入控制台手动修改