其中等待的那个过程非常非常漫长,比拜登那漫长而响亮的屁要漫长的多,建议睡觉前运行,睡醒了可能会做好。
最终结果如下:
由于 LXC 容器无法使用 overlay2
存储层,为了保持与 Docker 的兼容性,默认存储层一直采用 vfs
。vfs 存储层的劣势很明显,目前的 lxc 虽然只部署 7 个 Docker 项目,但 /var/lib/docker
目录空间占用高达 70GB,因此迫切需要为 vfs 存储层寻找替代品,查阅众多资料后发现 fuse-overlayfs
可以解决这个问题,但lxc有些系统无法通过apt直接安装 fuse-overlayfs,因此就有了这篇文章,详细记录了 lxc 切换 vfs 存储层驱动为 fuse-overlayfs
的详细过程。
Docker 容器采用分层结构,其层级如同洋葱般逐一累加(layers、RUN、COPY、ADD)。这意味着 Dockerfile 中的每个命令将在容器内创建一个新层。每一层仅存储相较于上一层新增的修改内容,从而实现容器间的层级共享,降低存储空间占用和下载时间。然而,需要注意的是,这些层是可以访问的,因此不可通过增加额外层级来保护敏感信息。
在典型的系统环境中,Docker 使用联合文件系统(基于 MergerFS)透明地合并了所需的层级。Docker 将此称为 overlay2(默认存储驱动程序)。这样就创建了一个由所有层级共同组成的单个文件系统,而无需复制文件。容器看到的是一个完整的文件系统,但它实质是由多个文件系统组合而成。
在 LXC 中运行 Docker 时,默认的 overlay2 存储驱动程序不可用,因为 LXC 无法挂载这些高级的 overlay 文件系统(它们是内核构建的)。相反,LXC 使用 vfs,虽然较简单,但也存在一些重大问题。vfs 不会像 overlay2 那样仅更改写入磁盘,而是对现有的整个文件系统进行深度复制,以便在上一层基础上创建下一层。这意味着容器会消耗更多的空间,因为许多基础操作系统文件将在每个层中重复出现,从而显著增加磁盘使用率。因此,多个容器也无法共享相同的底层。强制使用 overlay2 也不会改善这种情况:
ERRO[2021-09-30T09:24:56.9
rancher部署的k3s集群无法加入新的etcd节点,查询日志发现报错,etcd群组中出现本应该已被删除的节点prepaid-de,此节点已经被删除,但却错误的留在了etcd member list中,导致etcd服务无法正常验证。
移除已经无效的节点prepaid-de,恢复etcd集群的可用性。
在k3s集群主控节点安装etcdctl工具。
方法一:可以使用apt install命令直接进行安装
apt install etcd-client
方法二:下载对应etcd版本的etcdctl工具手动安装
首先查询获取etcd的版本
curl -L --cacert /var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --cert /var/lib/rancher/k3s/server/tls/etcd/server-client.crt --key /var/lib/rancher/k3s/server/tls/etcd/server-client.key <https://127.0.0.1:2379/version>
修改ETCD-VER=v
之后的版本号为之前获取到的数字,运行以下命令安装对应版本etcdctl
ETCD_VER=v3.5.0 # choose either URL GOOGLE_URL=https://storage.googleapis.com/etcd GITHUB_URL=https://github.com/etcd-io/etcd/releases/download DOWNLOAD_URL=${GOOGLE_URL} rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gzrm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gztar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.
1、合并存储 删除local-lvm存储空间
lvremove lvremove pve/data lvextend -l +100%FREE -r pve/root
2、web界面删除local-lvm
数据中心-存储-删除local-lvm 编辑local,内容里添加 磁盘映像和容器
不幸的是,在从 ext4 迁移到 ZFS 之后,我发现k3s由于缺少对overlayfsZFS 的支持而导致崩溃。
在解决这个问题之前,我升级到 Debian bullseye。
k3s
目前不支持 ZFS 快照程序。可以通过三种方法解决此问题:
containerd
支持 ZFS)。然而,我就没那么幸运了,几个小时后我就放弃了。使用native
snapshotter,它速度较慢并且消耗更多磁盘(将产生很多重复文件),但它可以工作。
/etc/systemd/system/k3s.service
并添加--snapshotter native
到k3s server
项目之后。我们将利用 ZFS 的 ZVOL 功能来创建一个 ext4 卷以用作 overlayfs 的后端。ZVOL 是 ZFS 可以向系统公开的块设备(与作为 ZFS 文件系统的数据集相反)。这些 ZVOL 可以像普通块设备一样使用:我们将创建其中一个,用 ext4 格式化它并用它来托管 k3s agent目录。
# use zfs list see the zfs root path name and the space of disk, in my server which on PVE7 it's "rpool"
zfs list
# Create a sparse (-s) zvol (-V).
# "Sparse" means that the volume will be allocated as data is written into the
# volume. So this ZVOLs will grow over time, when needed, until 90G
zfs create -s -V 90GB rpool/k3s-agent
# Format the ZVOL as ext4
mkfs.ext4 /dev/zvol/rpool/k3s-agent
# Now you nee
之前用卷组的方法也可以,而且其实性能是一样的。
此方法只适用于Linux,而windows上应该是没办法的,至少我没想到什么办法通过DD的方式来整个软raid 0出来。
过程如下:
其中等待的那个过程非常非常漫长,比拜登那漫长而响亮的屁要漫长的多,建议睡觉前运行,睡醒了可能会做好。
最终结果如下:
目前这个需求已经有人开发了工具,可以直接结合Proxmox VE 内部的备份工具,可以在Backup Log 中看到Rclone 的相关Log,搭配Proxmoe VE 内建CRON 自动备份到各种网路空间,非常方便:
在Proxmox VE 中以root 身份登入,直接使用指令安装rclone
apt update apt install rclone -y
或到Rclone 的官网下载安装:
请务必仔细跟着设定,或是你自己去研究rclone 的config
# rclone config 2021/10/08 02:03:49 NOTICE: Config file "/root/.config/rclone/rclone.conf" not found - using defaults No remotes found - make a new one n) New remote s) Set configuration password q) Quit config n/s/q> n name> gd-backup_crypt # 务必使用这个名字,或是之后改脚本 Type of storage to configure. Enter a string value. Press Enter for the default (""). Choose a number from below, or type in your own value ~~ 15 / Google Drive \ "drive" ~~ Storage> 15 Google Application Client Id Setting your own is recommended. See https://rclone.org/drive/#making-your-own-client-id for how to create your own. If you leave this blank, it will use an internal key which is low performance. Enter a string value. Press Enter for the default (""). client_id> 123456789-xxx
为保证数据安全,在进行调整前建议对LXC容器先进行备份
风险点:目前使用此方法对硬盘缩减后,无法正常创建快照、备份失败的问题,请谨慎操作
环境都是在 Proxmox VE 虚拟系统上架设,都是以 LXC 模式为主,除非有特殊状况会告知使用 VM 模式
系统环境: Proxmox VE 7.2
1、通过命令行接入到 PVE 主机,列出 zfs 清单确认 lxc 容器存储路径,此处我们拿编号200的lxc容器进行演示
zfs list
2、对指定 LXC 存储空间进行缩减,原本 800G 要缩减成 300G
zfs set quota=300G rpool/data/subvol-200-disk-0 zfs set refquota=300G rpool/data/subvol-200-disk-0
3、修改指定 LXC 的配置文件 vim /etc/pve/lxc/200.conf
# 修改前 rootfs: local-zfs:subvol-200-disk-0,size=300G # 修改後 rootfs: local-zfs:subvol-200-disk-0,size=300G
注意:如果进行缩减操作时,lxc还在运行中,则在修改后,需要手动重启容器
4、最后启动 LXC 容器确认是否可以正常运行,使用 pct enter 200
进到容器中,确认总空间是否已经缩减至 300G
完美!接下来,要开始继续缩减另一台空间为8T的lxc容器啦~
参考链接:
https://wiki.freedomstu.com/books/proxmox-ve-%E8%99%9B%E6%93%AC%E7%B3%BB%E7%B5%B1%E8%A8%98%E9%8C%84/page/lxc-WDA