本文发布于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 -l
和df
查看 - 挂载其他盘的详看 其他说明
- 一键脚本支持自定义限制所有内容,普通版本支持多次运行批量生成不覆盖先前生成的配置
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
- 以下为开设的示例小鸡的信息:
`小鸡名字` - 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
下面命令为开小鸡名字前缀为tj的10个小鸡
代码语言: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
下列命令最后一行为开小鸡名字前缀为tj的10个小鸡
代码语言: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.可视化操作面板
- 非必须,该面板只是为了方便可视化操作,没有也没问题
- 作者仓库:跳转
lxc config set core.https_address [::]
lxc config set core.trust_password some-secret-string
snap install lxdmosaic
安装完毕后打开宿主机IP地址,按照提示设置admin的密码,其他一路默认就能使用面板了