使用kubectl cp从POD拷贝数据到本地报unexpected EOF错误如何解决
kubectl cp 报unexpected EOF 解决方案
该报错在kubectl v1.21.0版本中属于已知缺陷,可通过以下方案解决:
- 方案1:升级kubectl客户端至v1.21.1及以上版本,该版本已修复cp命令的EOF相关bug,升级后重新执行原拷贝命令即可。
- 方案2:使用exec+tar组合命令绕过cp的内置缺陷,直接通过标准流传输文件:
拷贝单个文件执行:kubectl exec device-database-79fc964c8-q7ncc -- tar cf - /tmp/plsql_data/prod.dump | tar xf - -C /Users/raja/
拷贝整个tmp目录执行:kubectl exec device-database-79fc964c8-q7ncc -- tar cf - /tmp | tar xf - -C /Users/raja/
若POD不在default命名空间,可在exec后添加-n <你的命名空间名称>参数。 - 方案3:确认目标POD内已安装tar工具。kubectl cp底层依赖tar实现文件传输,若POD使用极简镜像(如distroless、未预装tar的alpine镜像),需先安装tar再执行cp命令,Debian/Ubuntu系镜像安装命令如下:
kubectl exec -it device-database-79fc964c8-q7ncc -- apt update && apt install -y tar - 方案4:调整命令中的路径为绝对路径,原命令中
device-database-79fc964c8-q7ncc:tmp为相对路径,改为device-database-79fc964c8-q7ncc:/tmp可避免路径匹配错误触发的报错。 - 若dump文件体积较大,可先压缩再传输减少传输耗时,执行命令如下:
kubectl exec device-database-79fc964c8-q7ncc -- gzip -c /tmp/plsql_data/prod.dump > /Users/raja/prod.dump.gz
内容的提问来源于stack exchange,提问作者User1984
相关产品推荐
相关产品推荐

