一键虚拟化开小鸡的脚本

2024-09-20T06:32:26.png

开设虚拟内存(SWAP)

内存开点swap免得机器炸了
单位换算:输入 1024 产生 1G SWAP-虚拟内存,虚拟内存占用硬盘空间,当实际内存不够用时将自动使用虚拟内存做内存使用,但随之带来IO高占用以及CPU性能占用
建议只开实际内存大小两倍大小的虚拟内存

国际

curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh

检测环境
本项目相关脚本执行前务必执行本脚本检测环境,如果不符合安装PVE的要求则无法使用后续的脚本
检测本机IPV6的网络配置情况(有无IPV6都可安装,只是查询一下罢了)
检测硬件配置是否满足最低要求
检测硬件环境是否可嵌套虚拟化KVM类型的服务器
检测系统环境是否可嵌套虚拟化KVM类型的服务器
不可嵌套虚拟化KVM类型的服务器也可以开LXC虚拟化的服务器,但不推荐安装PVE,不如使用incus
国际

bash <(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

国内

bash

bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/check_kernal.sh)

如果你需要更新IPV6信息再查询,那么执行以下命令后再查询

bash
rm -rf /usr/local/bin/pve_ipv6*
rm -rf /usr/local/bin/pve_check_ipv6*
rm -rf /usr/local/bin/pve_last_ipv6*

PVE主体安装

国际

curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

国内

curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/install_pve.sh -o install_pve.sh && chmod +x install_pve.sh && bash install_pve.sh

bash install_pve.sh

预配置环境

创建资源池mypool(local)
移除订阅弹窗
尝试开启硬件直通
对AppArmor模块检测和自动安装
重启系统前推荐挂上nezha探针方便在后台不通过SSH使用命令行,避免SSH可能因为商家奇葩的预设可能导致重启后root密码丢失
执行reboot前需要等待后台任务执行完毕,一些宿主机的系统apt命令执行很慢,得等一会才能执行完毕,当然大部分的机器没这么烂
国际

bash <(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

国内

bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)

自动配置宿主机的网关

国际

bash <(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

国内

bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_nat_network.sh)

开设KVM虚拟机可使用的镜像

已预安装开启cloudinit
开启SSH登陆
预设置SSH监听V4和V6的22端口
开启允许密码验证登陆
开启允许root登陆
部分预安装Qemu-guest-agent
目前可使用的镜像名字的列表为
https://github.com/oneclickvirt/kvm_images/blob/main/list.text
以及
https://github.com/oneclickvirt/pve_kvm_images
仓库的Release中存储的每日修补镜像。

单独开设NAT的KVM虚拟化的虚拟机

国际

curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

国内

curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm.sh -o buildvm.sh && chmod +x buildvm.sh

各参数含义

./buildvm.sh VMID 用户名 密码 CPU核数 内存 硬盘 SSH端口 80端口 443端口 外网端口起 外网端口止 系统 存储盘 独立IPV6地址(留空默认N)

示例

./buildvm.sh 102 test1 oneclick123 1 512 10 40001 40002 40003 50000 50025 debian11 local N

删除指定虚拟机

下载脚本
国际

curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

国内

curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/pve_delete.sh -o pve_delete.sh && chmod +x pve_delete.sh

使用方法

可以删除对应VMID的虚拟机,这里用上文中的示例102做演示
./pve_delete.sh 102

实际删除数量不固定,空格分隔每个VMID即可,可一次性删除多个

开设独立IPV4地址的虚拟机

手动指定额外IPV4地址开设虚拟机
需要手动在命令中指定IPV4地址,且带上子网长度
如果宿主机自带IPV6子网将可选择是否附加上IPV6地址
如果商家有给IPV4地址和子网长度,请仔细比对,按照下面示例的命令写参数
系统的相关信息将会存储到对应的虚拟机的NOTE中,可在WEB端查看
可选择是否开启独立IPV6,需要宿主机至少有一个/104的子网,最好是一个/64子网
手动附加的IPV4地址与宿主机的IPV4地址是在不同子网内的(IP地址前缀不同),将使用宿主机IP地址做网关
手动附加的IPV4地址与宿主机的IPV4地址是在同一个子网内的(IP地址前缀相同),将使用宿主机的网关做网关
可选择是否指定虚拟机的MAC地址
在虚拟机内外进出流量都走绑定的额外IPV4的地址
TIP

在不同子网内的IP地址,如果附加时不指定MAC地址,那么路由器无法识别源 MAC 地址,流量将被标记为“滥用”,并“可能”导致服务器被阻止。 (如果使用Hetzner的独立服务器务建议提供附加IPV4地址对应的MAC地址防止被报告滥用)
使用方法
下载脚本

国际

curl -L https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_manual_ip.sh -o buildvm_manual_ip.sh && chmod +x buildvm_manual_ip.sh

国内

curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/buildvm_manual_ip.sh -o buildvm_manual_ip.sh && chmod +x buildvm_manual_ip.sh

各参数含义

./buildvm_manual_ip.sh VMID 用户名 密码 CPU核数 内存大小以MB计算 硬盘大小以GB计算 系统 存储盘 IPV4地址 独立IPV6(默认为N) MAC地址(不提供时将不指定虚拟机的MAC地址)

TIP
注意这里的密码最好仅英文与数字混合,且以英文开头,避免密码在设置过程中因为特殊字符被转义而设置失败

测试示例

./buildvm_manual_ip.sh 152 test1 oneclick123 1 1024 10 debian12 local a.b.c.d/24 N

上述命令意义为开设一个带独立IPV4地址的虚拟机

自定义(优化)

在非Debian系统上安装 Proxmox VE 7
本机硬件配置的最低要求同先前正常安装的要求一致

需要先安装docker

curl -sSL https://get.docker.com/ | sh
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

然后使用uname -m查询架构,使用对应架构的命令

开设出的PVE面板信息为:

登录用户名和密码都是root,登录后务必使用web的SSH更改密码以免被爆破

用宿主机SSH时务必登录对应https://IPV4地址:8006在web面板上使用SSH,不要使用宿主机的22端口操控PVE

因为web面板上的SSH是在Docker内的,所以不支持后续的一键配置,请自行配置网关等进行使用

X86架构

docker run -idt --network host \
--privileged \
--name pve \
--add-host pve:10.13.14.101 \
--hostname pve \
spiritlhl/pve:7_x86_64

ARM架构

docker run -idt --network host \
--privileged \
--name pve \
--add-host pve:10.13.14.101 \
--hostname pve \
spiritlhl/pve:7_aarch64

开设出的面板实际是开设在容器内的,但网络已使用host模式,PVE的端口约等于就使用的宿主机的端口

有许多错误需要修复,欢迎PR解决问题,实测在Ubuntu系统的宿主机上安装Proxmox VE的面板成功,解决了通过网络安装Proxmox VE只能使用Debian系统做宿主机的问题

在低配置系统中优化Proxmox-VE的内存占用
以下优化可以减少至少400M内存左右的占用,部分机器能减少6GB以上,实际减少多少内存占用自行测试

减少max_workers数量
执行下述命令查询

cd /usr/share/perl5/PVE/Service
grep 'max_workers => 3' *

可见

pvedaemon.pm:    max_workers => 3,
pveproxy.pm:    max_workers => 3,
spiceproxy.pm:    max_workers => 3, # todo: do we need more?

默认的max_workers是3,可以修改对应的文件,最低max_workers可为1,可使用如下命令进行修改

sed -i "s/max_workers => 3/max_workers => 1/g" /usr/share/perl5/PVE/Service/*

停用HA服务
集群(多节点)可以使用HA服务,如果是单节点,或者没有HA使用的需求,可以执行下述命令禁用

systemctl stop pve-ha-lrm.service 
systemctl stop pve-ha-crm.service 
systemctl disable pve-ha-lrm.service 
systemctl disable pve-ha-crm.service

停用防火墙服务
可执行下述命令停用服务

systemctl stop pve-firewall.service 
systemctl disable pve-firewall.service

停用调度服务
如果不需要计划任务,如备份、同步之类的任务,可执行下述命令停用服务

systemctl stop pvescheduler.service
systemctl disable pvescheduler.service

停用Spiceproxy服务
如果不需要使用Spice进行虚拟机/容器链接(arm下暂不支持Spice),可执行下述命令停用服务

systemctl stop spiceproxy.service 
systemctl disable spiceproxy.service

使用定时任务删除内存缓存
清理不同类型的缓存以及对文件系统进行TRIM操作

shell
TEMP_CRON=$(mktemp)
sudo crontab -l > $TEMP_CRON
echo "*/5 * * * * echo 1 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 60; echo 2 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 120; echo 3 > /proc/sys/vm/drop_caches" >> $TEMP_CRON
echo "*/5 * * * * sleep 180; fstrim -av" >> $TEMP_CRON
sudo crontab $TEMP_CRON
rm $TEMP_CRON

上面的命令需要宿主机本身有sudo和crontab命令才可使用。

在开设出的NAT的KVM虚拟机上自行映射公网端口
使用nano或vim命令修改文件增加端口映射:

/etc/iptables/rules.v4

例如我有一台内网IP为172.16.1.152的KVM虚拟机,虚拟机内已经开设MYSQL监听了3306,我需要使用tcp协议映射出来到宿主机IP上的33306端口上进行使用,那么需要在上面的那个文件中的COMMIT行以上增加如下行

-A PREROUTING -p tcp -m tcp -dport 33306 -j DNAT --to-destination 172.16.1.152:3306

保存文件退出文件编辑后执行

service netfilter-persistent restart

重载端口映射

此时在宿主机上执行

lsof -i:33306

可见端口映射规则是否生效。

原创脚本地址:
https://virt.spiritlhl.net/guide/pve/pve_kvm.html

版权声明
本站所发布的一切源码、模板、应用、文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如有侵权请邮件与我们联系处理。本站内容适用于DMCA政策。
Last modification:September 23rd, 2024 at 02:03 pm

Leave a Comment