背景:

在 Kubernetes 容器环境中,通过 kubectl cp命令拷贝大文件时,经常会遇到连接中断、超时等问题,导致文件传输失败。这一问题在文件大小超过 500MB 时尤为明显,严重影响了数据备份、故障排查和应用程序部署的效率。

解决方案:

可通过FTP和对象存储的方式进行解决该问题,以下表格为不同方式的优缺点对比

对比维度 Kubectl cp FTP 对象存储
大文件传输稳定性 差,易中断 好,支持断点续传 好,分片上传
传输速度 慢,单线程 快,多线程 快,并行分片
文件大小限制 有,受内存和超时限制 无限制 无限制,支持48.8TB
对集群的影响 高,占用APIServer资源 低,独立通道 低,独立通道
安全性 需要高权限(exec) 可配置认证和加密 高,支持加密和访问控制
适用场景 小文件临时传输 大文件内外网传输 海量数据存储与分发

在使用 FTP 时,需要在不同集群之间开放网络端口,配置防火墙规则,增加了攻击面。而对象存储作为云服务,无需任何网络配置,可直接使用,有更好的账号权限控制体系,降低了安全风险。

服务器FTP

在10.1.1.1上使用SFTP服务,创建用户,并配置授权和文件目录

USER=ftp_user
BASE=/home/vsftpd/$USER # 真实目录
UPLOAD=$BASE/dump # 上传目录
# 1. 建用户 / 设 shell 为 nologin
useradd -d $BASE -s /sbin/nologin -M $USER
# 2. 建目录并赋权
mkdir -p $UPLOAD
chown root:root $BASE
# 根目录必须属 root,否则 chroot 报错
chmod 755 $BASE
chown $USER:$USER $UPLOAD
# 上传目录归用户,方便写文件chmod 750 $UPLOAD
chmod 750 $UPLOAD

在容器内进行上传文件

wget https://yw-ops.cos.ap-guangzhou.myqcloud.com/ncftpput && chmod 775 ncftpput &&  ./ncftpput -m -u ftp_user -p nmk@2025 10.1.1.1 /dump/$(date +%Y%m%d)  /要上传的文件

通过FTP客户端或SCP进行下载容器文件

对象存储(字节云举例)

创建存储桶

创建账号,只保留编程访问,去掉控制台访问,只授权对象存储只读的权限

对aksk进行授权

登录容器上传文件

wget https://m645b3e1bb36e-mrap.mrap.accesspoint.tos-global.volces.com/linux/amd64/tosutil && chmod +x tosutil && ./tosutil cp -i AKLTYjZhNTlhNGJiNzdlNDJjN -k TUdNNE0yTTBZek14T  -e tos-cn-guangzhou.ivolces.com -re cn-guangzhou {FILENAME} tos://tos-vke-file/DIR/FILENAME

通过对象存储工具或对象存储带验证的链接下载容器文件
参考:https://www.volcengine.com/docs/6349/152743?lang=zh