By accessing the website and accepting the Cookie Policy, you agree to use the cookies provided by the Site in accordance with to analyze traffic, remember your preferences, and optimize your experience.
k3s k8s rancher etcd    2023-12-08 15:05:22    43    0    0

定位问题

rancher部署的k3s集群无法加入新的etcd节点,查询日志发现报错,etcd群组中出现本应该已被删除的节点prepaid-de,此节点已经被删除,但却错误的留在了etcd member list中,导致etcd服务无法正常验证。

解决思路

移除已经无效的节点prepaid-de,恢复etcd集群的可用性。

解决方案

在k3s集群主控节点安装etcdctl工具。 

一、安装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.
pve    2023-12-08 15:04:59    91    0    0

1、合并存储 删除local-lvm存储空间

lvremove
lvremove pve/data lvextend -l +100%FREE -r pve/root


2、web界面删除local-lvm

数据中心-存储-删除local-lvm 编辑local,内容里添加 磁盘映像和容器​


2023-12-08 15:04:59    130    0    0

K3s、ZFS

不幸的是,在从 ext4 迁移到 ZFS 之后,我发现k3s由于缺少对overlayfsZFS 的支持而导致崩溃。

在解决这个问题之前,我升级到 Debian bullseye。

k3s, ZFS 和 overlayfs

k3s​目前不支持 ZFS 快照程序。可以通过三种方法解决此问题:

  • 使用外部 containerd 和 ZFS 快照程序(containerd​支持 ZFS)。然而,我就没那么幸运了,几个小时后我就放弃了。
  • 使用native​ snapshotter,它速度较慢并且消耗更多磁盘(将产生很多重复文件),但它可以工作。

    • 只需编辑/etc/systemd/system/k3s.service​并添加--snapshotter native​到k3s server​项目之后。
  • 为k3s ”agent” 创建专用的ext4分区格式的ZVOL卷 。这是我最终选择的解决方案,因为它速度更快且占用空间更少。

为k3s创建ZVOL

我们将利用 ZFS 的 ZVOL 功能来创建一个 ext4 卷以用作 overlayfs 的后端。ZVOL 是 ZFS 可以向系统公开的块设备(与作为 ZFS 文件系统的数据集相反)。这些 ZVOL 可以像普通块设备一样使用:我们将创建其中一个,用 ext4 格式化它并用它来托管 k3s agent目录。

  1. # use zfs list see the zfs root path name and the space of disk, in my server which on PVE7 it's "rpool"
  2. zfs list
  3. # Create a sparse (-s) zvol (-V).
  4. # "Sparse" means that the volume will be allocated as data is written into the
  5. # volume. So this ZVOLs will grow over time, when needed, until 90G
  6. zfs create -s -V 90GB rpool/k3s-agent
  7. # Format the ZVOL as ext4
  8. mkfs.ext4 /dev/zvol/rpool/k3s-agent
  9. # Now you nee
pve    2023-12-08 15:04:59    71    0    0

之前用卷组的方法也可以,而且其实性能是一样的。

此方法只适用于Linux,而windows上应该是没办法的,至少我没想到什么办法通过DD的方式来整个软raid 0出来。

过程如下:

 

cat /proc/mdstat

mdadm /dev/md2 --fail /dev/sdb2

mdadm /dev/md2 --remove /dev/sdb2

wipefs -a /dev/sdb2

mdadm --grow /dev/md2 --level=0
mdadm --grow /dev/md2 --level=0 --raid-devices=2 --add /dev/sdb2

watch cat /proc/mdstat
# 等待重建完毕

mdadm --misc --detail /dev/md2

resize2fs /dev/md2


df -h

其中等待的那个过程非常非常漫长,比拜登那漫长而响亮的屁要漫长的多,建议睡觉前运行,睡醒了可能会做好。

最终结果如下:



pve    2023-12-08 15:04:59    194    0    0

目前这个需求已经有人开发了工具,可以直接结合Proxmox VE 内部的备份工具,可以在Backup Log 中看到Rclone 的相关Log,搭配Proxmoe VE 内建CRON 自动备份到各种网路空间,非常方便:

安装Rclone

在Proxmox VE 中以root 身份登入,直接使用指令安装rclone

apt update
apt install rclone -y

或到Rclone 的官网下载安装:

初始化 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
PVE Proxmox ProxmoxVE    2023-12-08 15:04:59    238    0    0

为保证数据安全,在进行调整前建议对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

2023-12-08 15:04:59    55    0    0

最近在配置zfs RAM Cache 大小时,不小心在/etc/modprobe.d/zfs.conf文件中多输入了一行换行,导致重启后服务器无法正常载入ZFS模块,进不去系统了。

查了好久资料,以下为具体的操作记录:

 

根据错误提示,找到相关的配置项目,并排除错误配置

这里直接删除/etc/modprobe.d/zfs.conf这个文件

rm -rf /etc/modprobe.d/zfs.conf

 

重新手动载入ZFS模块,并装载硬盘上的rpool存储池

modprobe zfs
zpool import -N rpool
成功后ctrl+dexit继续开机(有可能提示有多个rpool,可以zpool import看一下id,然后zpool impot id -N导入)
 

修改存储中的错误配置文件

成功引导系统,登录账号后,将错误配置修改
由于这里涉及修改zfs.conf文件,修改后需要手动更新下:
update-initramfs -u

更新grub:

update-grub

重启,系统恢复正常。