背景:
在 Kubernetes 容器环境中,通过 kubectl cp命令拷贝大文件时,经常会遇到连接中断、超时等问题,导致文件传输失败。这一问题在文件大小超过 500MB 时尤为明显,严重影响了数据备份、故障排查和应用程序部署的效率。
解决方案:
可通过FTP和对象存储的方式进行解决该问题,以下表格为不同方式的优缺点对比
| 对比维度 | Kubectl cp | FTP | 对象存储 |
|---|---|---|---|
| 大文件传输稳定性 | 差,易中断 | 好,支持断点续传 | 好,分片上传 |
| 传输速度 | 慢,单线程 | 快,多线程 | 快,并行分片 |
| 文件大小限制 | 有,受内存和超时限制 | 无限制 | 无限制,支持48.8TB |
| 对集群的影响 | 高,占用APIServer资源 | 低,独立通道 | 低,独立通道 |
| 安全性 | 需要高权限(exec) | 可配置认证和加密 | 高,支持加密和访问控制 |
| 适用场景 | 小文件临时传输 | 大文件内外网传输 | 海量数据存储与分发 |
在使用 FTP 时,需要在不同集群之间开放网络端口,配置防火墙规则,增加了攻击面。而对象存储作为云服务,无需任何网络配置,可直接使用,有更好的账号权限控制体系,降低了安全风险。
服务器FTP
在10.1.1.1上使用SFTP服务,创建用户,并配置授权和文件目录
USER=ftp_user |
在容器内进行上传文件
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


