基于主机安装的目录扩容
概述
基于主机安装的 Rainbond 使用 RKE2 作为 Kubernetes 运行时,主要涉及两个重要的存储目录:
- RKE2 数据目录:
/var/lib/rancher/rke2
- 存储 Kubernetes 集群数据、etcd 数据、容器运行时数据等 - Rainbond 数据目录:
/opt/rainbond
- 存储 LocalPath StorageClass 数据和本地缓存文件
随着集群使用时间的增长,这些目录可能会占用大量磁盘空间。本文将介绍如何为这些目录扩容存储空间。
扩容场景
- 场景一:全新安装时扩容
- 如果您还未安装 Rainbond,建议在安装前就准备好足够的存储空间。
- 场景二:已安装环境扩容
- 如果您已经安装了 Rainbond,需要通过数据迁移的方式进行扩容。
场景一:全新安装时扩容
1. 准备存储设备
在安装 Rainbond 之前,准备好足够容量的磁盘或分区。
2. 挂载目录
# 假设新磁盘设备为 /dev/sdb1 和 /dev/sdc1
# 格式化磁盘
mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdc1
# 创建挂载点
mkdir -p /var/lib/rancher/rke2
mkdir -p /opt/rainbond
# 挂载磁盘
mount /dev/sdb1 /var/lib/rancher/rke2
mount /dev/sdc1 /opt/rainbond
# 设置开机自动挂载
echo "/dev/sdb1 /var/lib/rancher/rke2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdc1 /opt/rainbond ext4 defaults 0 0" >> /etc/fstab
3. 继续正常安装
完成磁盘挂载后,按照正常的安装流程进行 Rainbond 安装。
场景二:已安装环境扩容
注意
在进行目录迁移前,请务必做好数据备份,确保可以随时恢复到原始状态。
扩容关键目录(RKE2 + Rainbond)
1. 准备工作
# 检查当前磁盘使用情况
df -h /var/lib/rancher/rke2
df -h /opt/rainbond
# 准备新的存储设备
# RKE2 数据目录使用 /dev/sdb1
mkfs.ext4 /dev/sdb1
# Rainbond 数据目录使用 /dev/sdc1
mkfs.ext4 /dev/sdc1
2. 清空节点(重要)
在停止 RKE2 服务前,需要先清空节点上的工作负载:
# 设置节点为不可调度状态
kubectl cordon <节点名称>
# 驱逐节点上的所有 Pod(除了 DaemonSet)
kubectl drain <节点名称> --ignore-daemonsets --delete-emptydir-data --force
# 确认节点已清空
kubectl get pods --all-namespaces -o wide | grep <节点名称>
提示
- 如果是单节点集群,此步骤会导致服务中断
- 如果是多节点集群,建议逐个节点进行迁移
- 确保其他节点有足够资源承载被驱逐的工作负载
3. 停止 RKE2 服务
# 在当前节点上停止 RKE2 服务
systemctl stop rke2-server
systemctl stop rke2-agent # 如果是 agent 节点
4. 备份数据
# 直接重命名原目录作为备份
mv /var/lib/rancher/rke2 /var/lib/rancher/rke2.bak
mv /opt/rainbond /opt/rainbond.bak
# 验证备份完整性
du -sh /var/lib/rancher/rke2.bak
du -sh /opt/rainbond.bak
5. 挂载新存储
# 创建新的挂载点(原目录已重命名为备份)
mkdir -p /var/lib/rancher/rke2
mkdir -p /opt/rainbond
# 挂载新磁盘
mount /dev/sdb1 /var/lib/rancher/rke2
mount /dev/sdc1 /opt/rainbond
# 设置开机自动挂载
echo "/dev/sdb1 /var/lib/rancher/rke2 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/sdc1 /opt/rainbond ext4 defaults 0 0" >> /etc/fstab
6. 迁移数据
# 将备份数据迁移到新目录
cp -a /var/lib/rancher/rke2.bak/* /var/lib/rancher/rke2/
cp -a /opt/rainbond.bak/* /opt/rainbond/
7. 启动服务
# 启动 RKE2 服务
systemctl start rke2-server
# 或者对于 agent 节点
systemctl start rke2-agent
# 检查服务状态
systemctl status rke2-server
8. 验证迁移
# 检查集群状态
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
kubectl get nodes
# 检查 Rainbond 组件状态
kubectl get pods -n rbd-system
# 验证磁盘挂载
df -h /var/lib/rancher/rke2
df -h /opt/rainbond
9. 恢复节点调度
# 恢复节点为可调度状态
kubectl uncordon <节点名称>
# 检查节点状态
kubectl get nodes
10. 清理工作
# 确认迁移成功后,清理备份数据
rm -rf /var/lib/rancher/rke2.bak
rm -rf /opt/rainbond.bak
最佳实践
存储容量规划
RKE2 数据目录 (/var/lib/rancher/rke2
)
- 建议初始容量:100GB 以上
- 主要存储:etcd 数据、容器镜像、容器运行时数据
- 增长因素:集群规模、应用数量、镜像数量
Rainbond 数据目录 (/opt/rainbond
)
- 建议初始容量:200GB 以上
- 主要存储:应用持久化数据、构建缓存、应用模板
- 增长因素:应用数据量、构建频率、模板数量
性能优化
- 使用 SSD 存储:建议为关键目录使用 SSD 存储以提升性能
- 合理规划 IOPS:确保存储设备有足够的 IOPS 支持高并发访问
- 定期清理:参考 集群资源清理 定期清理不必要的数据
常见问题
1. 迁移后服务无法启动
可能原因:
- 数据迁移不完整
- 权限设置错误
- 磁盘挂载失败
解决方法:
# 检查磁盘挂载
mount | grep -E "(rke2|rainbond)"
# 检查目录权限
ls -la /var/lib/rancher/rke2
ls -la /opt/rainbond
# 检查服务日志
journalctl -u rke2-server -f
2. 数据迁移过程中断
解决方法:
# 停止服务
systemctl stop rke2-server
systemctl stop rke2-agent # 如果是 agent 节点
# 清理不完整的数据
rm -rf /var/lib/rancher/rke2/*
rm -rf /opt/rainbond/*
# 重新从备份恢复
cp -a /var/lib/rancher/rke2.bak/* /var/lib/rancher/rke2/
cp -a /opt/rainbond.bak/* /opt/rainbond/
# 重新启动服务
systemctl start rke2-server
# 或者对于 agent 节点
systemctl start rke2-agent
回滚方案
如果迁移过程中出现问题,可以通过以下步骤回滚:
完整回滚步骤
# 1. 停止 RKE2 服务
systemctl stop rke2-server
systemctl stop rke2-agent # 如果是 agent 节点
# 2. 卸载新磁盘
umount /var/lib/rancher/rke2
umount /opt/rainbond
# 3. 恢复原目录
mv /var/lib/rancher/rke2.bak /var/lib/rancher/rke2
mv /opt/rainbond.bak /opt/rainbond
# 4. 启动服务
systemctl start rke2-server
# 或者对于 agent 节点
systemctl start rke2-agent
# 5. 恢复节点调度(如果之前已经 cordon)
kubectl uncordon <节点名称>
注意
执行目录扩容前,请务必做好完整备份,确保可以随时回滚到原始状态。建议在维护窗口期间进行操作。