【记录】一键虚拟化项目 | 开源、易于使用的服务器虚拟化项目

2024-08-20 18:48:44 浏览数 (1)

本文发布于376天前,最后更新于371天前,其中的信息可能有所发展或是发生改变

1.前言

你会如何在服务器配置数量方面进行选择呢?

是购买一台配置高的服务器,还是选择购买多台配置低的服务器呢?

夜梦选择后者,毕竟高配服务器对夜梦来说没用。最近夜梦一直在折腾,多点服务器就可以部署多个项目,几个小项目可以同时跑。

此外,最近夜梦 闲的没事干 想要学习学习虚拟化方面的知识,于是找到了一个名为“一键虚拟化项目”的资源,借助该项目可以在一台主机上创建多个虚拟机,实现多“一机多用”!

2.地址

一键虚拟化项目 | 开源、易于使用的服务器虚拟化项目 (spiritlhl.net)

夜梦使用LXD方法,具体参考:系统与硬件配置要求 | LXD

3.准备

夜梦使用的服务器为:

  • 腾讯云:https://curl.zijiebao.com/

夜梦开的小机在两服务商机器上面已经测试成功!

官网给的步骤已经十分详细,夜梦这里仅仅做简单叙述。

4.系统与硬件配置要求

4.1硬件要求

  • 系统:Debian 8 , Ubuntu 18 (推荐 Ubuntu 20.04)
  • 虚拟化:推荐KVM、VMWARE虚拟化
  • 内存:内存至少512MB
  • 硬盘:硬盘(系统盘)至少10G
  • 网络:独立的IPV4地址,IPV6可有可无,带宽能下载脚本就行,网络能连接Github的raw页面就行

4.2项目特点​

  • 本套脚本开发使用的Ubuntu20,Ubuntu别的长期维护版本应该也没问题,Debian无法使用zfs时自动切换别的存储类型
  • 已设置同时进行TCP和UDP转发,除了SSH端口其他的映射内网外网端口一致
  • 已设置支持开出的LXC容器进行docker嵌套虚拟,默认普通版本和纯探针版本使用debian11系统
  • 已屏蔽容器内可能用于滥用的工具包和IPV4网络的TCP/UDP协议的端口( 3389 8888 54321 65432 ),以防止容器被用于扫描和爆破,且可外置进程检查有问题自动停机
  • 已支持一键为LXC容器配置IPV6地址(前提是母鸡有IPV6子网,无IPV6地址则不配置),自动适配子网大小
  • 保证你要开的盘为默认的系统盘(sda或者sda1)而不是挂载的盘(sdb之类的),不确定的使用fdisk -ldf查看
  • 挂载其他盘的详看 其他说明
  • 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置

4.3检测环境​

使用后续脚本的务必执行本命令检测宿主机是否符合要求

国际

代码语言:javascript复制
bash <(wget -qO- --no-check-certificate https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/pre_check.sh)

国内

代码语言:javascript复制
bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/pre_check.sh)

5.LXD主体安装

夜梦这里仅介绍手动安装过程(方便排查Bug)。

5.1关闭防火墙​

代码语言:javascript复制
apt update
apt install curl wget sudo dos2unix ufw jq -y
ufw disable

5.2开设虚拟内存SWAP​

虚拟内存的大小看你需要开多少台机器。

举个例子:如果你每台机器内存开256M,开8台,则换算下来需要2G内存。但是如果你的宿主机实际内存只有512MB,那么你就至少还需要1.5G的虚拟内存,保守点开2G虚拟内存即可。不就是超开嘛!实际swap开的虚拟内存最好是实际内存的2倍(影响小),按照例子来说也就是1GB。

执行下面命令,输入1,再输入2048,代表开2G虚拟内存

国际

代码语言:javascript复制
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/swap.sh -o swap.sh && chmod  x swap.sh && bash swap.sh

国内

代码语言:javascript复制
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/script

5.3安装LXD​

代码语言:javascript复制
apt install snapd -y
snap install lxd
/snap/bin/lxd init

如果上面的命令中出现下面的错误

代码语言:javascript复制
(snap "lxd" assumes unsupported features: snapd2.39 (try to update snapd and refresh the core snap))

使用命令修补后再进行lxd的安装

代码语言:javascript复制
snap install core

如果无异常,一般的选项回车默认即可。其中两项需要注意一下:

  • 选择配置物理盘大小(提示最小1GB那个选项),建议填空闲磁盘大小减去内存大小后乘以0.95并向下取整。
  • 提示带auto的更新image的选项记得选no,避免更新占用系统。

测试lxc有没有软连接上

代码语言:javascript复制
lxc -h

如果报错则执行以下命令软连接lxc命令:

代码语言:javascript复制
! lxc -h >/dev/null 2>&1 && echo 'alias lxc="/snap/bin/lxc"' >> /root/.bashrc && source /root/.bashrc
export PATH=$PATH:/snap/bin

连接后再测试lxc命令是否有报错找不到。

6.LXC虚拟化

6.1单独生成一个NAT服务器​

只生成一个NAT服务器,可自定义限制所有内容

脚本下载:

国际

代码语言:javascript复制
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/buildone.sh -o buildone.sh && chmod  x buildone.sh && dos2unix buildone.sh

国内

代码语言:javascript复制
curl -L https://ghproxy.com/https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/buildone.sh -o buildone.sh && chmod  x buildone.sh && dos2unix buildone.sh
6.1.1使用方法​
代码语言:javascript复制
./buildone.sh 小鸡名称 内存大小 硬盘大小 SSH端口 外网起端口 外网止端口 下载速度 上传速度 是否启用IPV6(Y or N) 系统(留空则为debian11)

内存大小以MB计算,硬盘大小以GB计算,下载速度上传速度以Mbit计算,是否启用IPV6不一定要填Y或者N,没有这个参数也行,留空默认不开启IPV6

如果外网起端口外网止端口都设置为0则不做区间外网端口映射了,只映射基础的SSH端口,注意不能为空,不进行映射需要设置为0

支持自定义小鸡的系统,不填写留空时默认使用debian11,注意传入参数为系统名字 版本号,如:

  • debian10,debian11,debian12
  • ubuntu18,ubuntu20,ubuntu22
  • centos8,centos9 (实际开设出来都是Stream版本)
  • alpine3.15,alpine3.16,alpine3.17,alpine3.18
  • 注意都是小写字母 数字的组合,自行尝试,如果搜索无该系统则会自动退出脚本
  • 版本号可以带英文小数点,为了适配alpine的版本号已支持
  • 注意部分系统可能因为未加载cgroup,所以在容器内测试系统资源会显示的宿主机的系统资源,实际是有约束的
6.1.2示例​
代码语言:javascript复制
./buildone.sh test 256 2 20001 20002 20025 500 500 N
  • 以下为开设的示例小鸡的信息:
代码语言:javascript复制
`小鸡名字` - test
`SSH登录的用户名` - root
`SSH登录的密码` - 随机生成
`CPU核数` - 1   
`内存大小` - 256MB
`磁盘大小` - 2G   
`内外网映射端口一致的区间` - 20002到20025
`上传带宽` - 500Mbit
`下载带宽` - 500Mbit
`自动设置外网IPV6地址` - N
`系统` - debian11

需要查看信息则执行

代码语言:javascript复制
cat 小鸡名字

比如查询示例的信息就是

代码语言:javascript复制
cat test

如果已通过以上方法生成过小鸡,还需要批量生成小鸡,可使用自定义批量生成版本的脚本,但注意先删除测试小鸡再进行批量生成小鸡

6.1.3删除测试小鸡​
代码语言:javascript复制
lxc stop test
lxc delete test
rm -rf test
rm -rf test_v6
ls

6.2普通版本批量生成​

开出的小鸡配置:

  • 1核256MB内存1GB硬盘限速300Mbit带宽
  • 带1个SSH端口,25个外网端口
  • 默认内存和硬盘大小

TIP lxc若命令无问题,执行初始化开小鸡,这一步最好放screen中后台挂起执行,开小鸡时长与你开几个和母鸡配置相关

执行下面命令加载开机脚本

国际

代码语言:javascript复制
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/init.sh -o init.sh && chmod  x init.sh && dos2unix init.sh

国内

代码语言:javascript复制
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/init.sh -o init.sh && chmod  x init.sh && dos2unix init.sh

下面命令为开小鸡名字前缀为tj10个小鸡

代码语言:javascript复制
./init.sh tj 10

有时候init.sh的运行路径有问题,此时建议前面加上sudo强制根目录执行

6.3纯SSH端口版本批量生成​

开出的小鸡配置:

  • 1核128MB内存300MB硬盘限速300Mbit带宽
  • 只有一个SSH端口
  • 无法挂载warp

TIP lxc若命令无问题,执行初始化开小鸡,这一步最好放screen中后台挂起执行,开小鸡时长与你开几个和母鸡配置相关

加载开机脚本

国际

代码语言:javascript复制
curl -L https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/least.sh -o least.sh && chmod  x least.sh && dos2unix least.sh

国内

代码语言:javascript复制
curl -L https://ghproxy.com/https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/least.sh -o least.sh && chmod  x least.sh && dos2unix least.sh

下列命令最后一行为开小鸡名字前缀为tj10个小鸡

代码语言:javascript复制
./least.sh tj 10

有时候least.sh的运行路径有问题,此时建议前面加上sudo强制根目录执行

6.4自定义批量生成版本​

  • 可自定义内存和硬盘大小
  • 有执行过上面的手动批量生成过也没问题,配置是继承的不覆盖

如果需要多次批量生成小鸡,可使用

国际

代码语言:javascript复制
curl -L https://github.com/spiritLHLS/lxd/raw/main/scripts/add_more.sh -o add_more.sh && chmod  x add_more.sh && bash add_more.sh

国内

代码语言:javascript复制
curl -L https://ghproxy.com/https://github.com/spiritLHLS/lxd/raw/main/scripts/add_more.sh -o add_more.sh && chmod  x add_more.sh && bash add_more.sh

可多次运行批量生成小鸡,且继承前面已生成的部分在后面添加,可自定义内存和硬盘大小

6.5查看已批量开设的信息​

开完小鸡后,具体信息会生成在当前目录下的log文件中,格式如下

代码语言:javascript复制
1号服务器名称 密码 ssh端口 外网端口起始 外网端口终止
2号服务器名称 密码 ssh端口 外网端口起始 外网端口终止

如果想要查看,只需在当前目录执行以下命令打印log文件即可

代码语言:javascript复制
cat log

WARNING

不要拿该脚本开出的小鸡当生产环境,LXC虚拟化不支持换内核,dd,开启bbr等操作

6.6部分常用LXD命令​

查看所有

代码语言:javascript复制
lxc list

查看个例

代码语言:javascript复制
lxc info 服务器名字

启动个例

代码语言:javascript复制
lxc start 服务器名字

停止个例

代码语言:javascript复制
lxc stop 服务器名字

删除个例

代码语言:javascript复制
lxc delete -f 服务器名字

进入内部

代码语言:javascript复制
lxc exec 服务器名字 /bin/bash

TIP 在alpine中不用/bin/bash而是用/bin/sh,常规的系统都是/bin/bash 退出则输入exit回车即可

删除所有LXC容器

代码语言:javascript复制
lxc list | awk '{print $2}' | grep -v "^$" | xargs -I {} lxc delete -f {}

在容器内执行删除无用日志

代码语言:javascript复制
sudo apt-get autoremove
sudo apt-get clean
sudo find /var/log -type f -delete
sudo find /var/tmp -type f -delete
sudo find /tmp -type f -delete
sudo find /var/cache/apt/archives -type f -delete

6.7更新上述所有一键脚本的相关命令​

删除原始配置脚本

代码语言:javascript复制
rm -rf /usr/local/bin/alpinessh.sh
rm -rf /usr/local/bin/config.sh
rm -rf /usr/local/bin/ssh.sh
rm -rf /usr/local/bin/check-dns.sh
rm -rf /root/alpinessh.sh
rm -rf /root/config.sh
rm -rf /root/ssh.sh
rm -rf /root/buildone.sh
rm -rf /root/add_more.sh

下载回新版本的相关配置脚本

代码语言:javascript复制
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/check-dns.sh -O /usr/local/bin/check-dns.sh && chmod  x /usr/local/bin/check-dns.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/config.sh -O /usr/local/bin/config.sh && chmod  x /usr/local/bin/config.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/ssh.sh -O /usr/local/bin/ssh.sh && chmod  x /usr/local/bin/ssh.sh
wget https://raw.githubusercontent.com/spiritLHLS/lxd/main/scripts/alpinessh.sh -O /usr/local/bin/alpinessh.sh && chmod  x /usr/local/bin/alpinessh.sh

其他一键脚本自己对应下载回来就行了

7.可视化操作面板

  • 非必须,该面板只是为了方便可视化操作,没有也没问题
  • 作者仓库:跳转
代码语言:javascript复制
lxc config set core.https_address [::]
lxc config set core.trust_password some-secret-string
snap install lxdmosaic

安装完毕后打开宿主机IP地址,按照提示设置admin的密码,其他一路默认就能使用面板了

0 人点赞