200字
「LXD虚拟化」极限榨干!开设自己的LXC小鸡
2025-11-30
2025-11-30

最近买了一台RakSmart的美西1C1G VPS,年付只花了1.8刀,只可惜的年付,所以不准备在上面跑什么服务,放着吃灰了快半个月。在很多人眼里,这种配置除了挂个探针或者跑个简单的梯子,似乎难堪大用。

不如来折腾一下,给自己开几台LXC小鸡玩玩。还可以看看一台内存仅有64mb的LXC小鸡有什么用。

准备工作

  • ​宿主机​:一台 Linux VPS(推荐 Debian 11/12 或 Ubuntu 20.04+),配置 1C1G 即可。

  • ​目标​:开设数个 64MB 内存的 Alpine Linux 容器。

第一步:重装并给服务器加上SWAP

一台干净的宿主机十分关键,我们首先使用DD脚本来重装系统,这里使bin456789大佬的DD脚本:

# 下载DD脚本
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh || wget -O ${_##*/} $_

# 安装Debian 12
bash reinstall.sh debian 12

1GB 内存非常紧张。为了防止某个容器突然发力导致宿主机内存溢出死机,我们必须配置虚拟内存,执行以下命令:

# 1. 创建一个 1GB 的 Swap 文件
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

# 2. 写入 fstab 实现开机自动挂载
echo '/swapfile none swap sw 0 0' | tee -a /etc/fstab

# 3. 调整 Swappiness (倾向于使用物理内存,只有内存吃紧时才用 Swap)
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf

第二步:安装与配置 LXD

LXD 是管理 LXC 容器的「神器」,比原生的 LXC 命令更人性化。

1. 安装 LXD

这里推荐使用 Snap 安装,因为版本更新且兼容性好:

# 确保 snapd 已安装
apt update && apt install -y snapd

# 安装 LXD
snap install lxd

# 将当前用户加入 lxd 组(如果是 root 操作可忽略,但建议执行)
adduser root lxd

2. 初始化 LXD(关键步骤!)

执行初始化命令:

lxd init

⚠️ 注意: 在配置过程中,系统会问你使用什么存储后端 (Storage backend)。

  • 默认通常是 ZFS 或 Btrfs。

  • 但是在 1GB 内存机器上,请务必手动输入 dir​ (Directory)。

  • ​原因​:ZFS 的 ARC 缓存机制会占用大量内存,而 dir​ 模式直接使用目录存储,虽然快照性能稍弱,但​不额外占用内存​,这对小内存机器至关重要。

  • Clustering? -> no​

  • New storage pool? -> yes​

  • Name of storage pool? -> default​

  • Name of the storage backend? -> dir​

  • Create a new MAAS server? -> no​

  • Network bridge? -> yes​

  • Name of the bridge? -> lxdbr0​ (默认即可)

  • IPv4? -> yes​ (auto)

  • IPv6? -> no​ (除非你需要)


第三步:定制「64MB 迷你」配置文件

我们需要创建一个 Profile(配置文件模板),以后每次创建小鸡时套用这个模板,就能自动限制它的资源。

  1. 创建名为 mini​ 的配置:

    lxc profile create mini
  2. 编辑 Profile:

    lxc profile edit mini

    这会打开一个文本编辑器,请将内容修改为以下 YAML 配置:

    description: "64MB Alpine Mini Server Profile"
    devices:
      eth0:
        name: eth0
        network: lxdbr0
        type: nic
      root:
        path: /
        pool: default
        type: disk
    config:
      limits.cpu: "1"             # 限制使用1个核心
      limits.cpu.allowance: 20%   # (可选) 限制最多占用20% CPU时间,防止卡死宿主
      limits.memory: 64MB         # 硬性限制内存
      limits.memory.swap: "false" # 禁止容器使用 Swap,逼迫其在64MB内运行

    注:limits.memory.swap: "false"​ 比较激进。如果你希望容器满了之后能借用一点宿主机的 Swap 防止崩溃,可以删除这一行。


第四步:生产迷你小鸡

一切准备就绪,我们来启动第一台名为 alpine01​ 的容器,使用 Alpine Edge 版本。

# 启动容器,同时加载 default(网络)和 mini(资源限制)配置
lxc launch images:alpine/edge alpine01 --profile default --profile mini
  • ​images:alpine/edge​: 使用 Alpine 的 Edge 版本(最新),也可以用 images:alpine/3.18​。

  • ​--profile default​: 加载默认网络配置。

  • ​--profile mini​: 加载我们刚才设定的 64MB 限制。

验证资源占用:运行 lxc list​ 查看列表。 运行 lxc info alpine01​ 查看具体资源使用。

lxc list

你应该能看到 alpine01​ 正在运行,且拥有一个内网 IP(如 10.x.x.x)。

如果你想看看这个示例的资源消耗,这是 LXD 提供的原生监控命令,可以看到该容器实际消耗了宿主机多少资源。

lxc info alpine01

第五步:NAT 端口映射

由于宿主机只有一个公网 IP,我们需要通过端口转发来从外网访问这台小鸡。 假设我们将宿主机的 10122​ 端口映射到 alpine01​ 的 SSH 端口 22​。

lxc config device add alpine01 ssh-proxy proxy listen=tcp:0.0.0.0:10122 connect=tcp:127.0.0.1:22

第六步:配置容器内部环境

Alpine 默认非常精简,默认没有开启 SSH 远程登录,我们需要进去设置一下。

  1. 进入容器 Shell:

    # 进入容器内部 Shell
    lxc exec alpine01 -- sh
  2. 在容器内执行安装与配置:

    # ---- 以下在容器内执行 ----
    # 1. 安装 openssh (Alpine 默认可能是 dropbear,openssh 更习惯些)
    apk add openssh
    rc-update add sshd default
    
    # 2. 允许 root 密码登录 (或者配置密钥,更安全)
    echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
    
    # 3. 设置 root 密码
    passwd
    # (输入你的密码)
    
    # 4. 启动 SSH
    /etc/init.d/sshd start
    
    # 退出容器
    exit

大功告成! 现在,你可以通过你常用的 SSH 客户端连接你的迷你小鸡了:

  • ​IP​: 宿主机公网 IP

  • ​Port​: 10101

  • ​User​: root


总结与玩法

在 1C1G 的机器上,除去系统本身占用,你大约还有 700MB+ 的可用内存。

  • ​理论极限​:你可以开设 10 台 以上这样的 64MB 小鸡。

  • 能干什么?

    • ​集群测试​:模拟 Ansible 批量管理,测试 K3s (可能需要调大一点内存)。

    • ​内网穿透节点​:运行 Frp 客户端。

    • ​静态网站​:每个小鸡跑一个 Nginx 托管静态 HTML,毫无压力。

    • ​Python 脚本​:跑一些轻量的爬虫或监控脚本。

「LXD虚拟化」极限榨干!开设自己的LXC小鸡
作者
Liebesfreud
发表于
2025-11-30
License
CC BY-NC-SA 4.0