前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【记录】一键虚拟化项目 | 开源、易于使用的服务器虚拟化项目

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

作者头像
夜梦星尘
发布2024-08-20 18:48:44
550
发布2024-08-20 18:48:44
举报
文章被收录于专栏:夜梦星尘的折腾日记

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

1.前言

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

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

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

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

2.地址

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

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

3.准备

夜梦使用的服务器为:

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

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

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的密码,其他一路默认就能使用面板了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-8-09 2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2.地址
  • 3.准备
  • 4.系统与硬件配置要求
    • 4.1硬件要求
      • 4.2项目特点​
        • 4.3检测环境​
        • 5.LXD主体安装
          • 5.1关闭防火墙​
            • 5.2开设虚拟内存SWAP​
              • 5.3安装LXD​
              • 6.LXC虚拟化
                • 6.1单独生成一个NAT服务器​
                  • 6.1.1使用方法​
                  • 6.1.2示例​
                  • 6.1.3删除测试小鸡​
                • 6.2普通版本批量生成​
                  • 6.3纯SSH端口版本批量生成​
                    • 6.4自定义批量生成版本​
                      • 6.5查看已批量开设的信息​
                        • 6.6部分常用LXD命令​
                          • 6.7更新上述所有一键脚本的相关命令​
                          • 7.可视化操作面板
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档