kubectl cp 是什么
cp 在本地与容器之间复制文件:它把源路径打包成归档流,通过连接节点上的服务进程传输,再在目标端解开,因此容器里必须有归档工具,精简镜像常常因为缺少它而直接失败。语法沿用“命名空间/对象名:路径”的写法,多容器时需要显式指定容器。它适合临时取日志、传小配置,不适合大批量数据:走的是控制通道,速度受限于接口服务与网络。
基本信息
| 语法 | kubectl cp 源 目标,Pod 路径写成 命名空间/对象名:路径 |
|---|---|
| 方向 | 本地到容器、容器到本地都支持;目录会整体递归处理 |
| 多容器 | -c 指定容器名,Pod 里有多个容器时必须显式给出 |
| 前提条件 | 容器内需要有归档工具与基本命令行工具,否则传输直接失败 |
| 路径语义 | 源目录末尾不带点号时,落地为目标目录下的同名子目录 |
| 性能 | 走控制通道,大文件与大量小文件都很慢,并占用接口服务资源 |
典型使用场景
- 从容器里取日志、堆栈文件与诊断输出
- 把临时配置或证书传进容器验证启动行为
- 导出小体量分析数据,避免为一次性需求搭建对象存储
- 容器仍在运行时抓取崩溃现场信息
- 在边车容器与主容器之间搬运数据(分别指定容器)
使用示例
使用示例
kubectl cp dev/web-1:/var/log/app.log ./app.log # 从容器下载单个文件
kubectl cp dev/web-1:/data -c sidecar ./data-dump # 指定容器,目录整体下载
kubectl cp ./config.yaml dev/web-1:/tmp/config.yaml # 上传单个文件
kubectl cp ./htmldir dev/web-1:/tmp/ # 上传目录:落地为 /tmp/htmldir
kubectl cp ./htmldir/. dev/web-1:/tmp/htmldir # 只传目录内容时用点号语义
kubectl exec -it dev/web-1 -- ls -l /tmp # 传输后进容器确认结果路径写法差异
| 写法 | 结果 | 注意 |
|---|---|---|
| 本地目录到容器目录 | 目标下出现同名子目录 | 等价于归档解包语义 |
| 源用目录加点号 | 目录内容直接落在目标 | 目标目录需已存在 |
| 目标路径以斜杠结尾 | 目标视为目录 | 源是文件时尤其要注意 |
| 容器路径写根目录 | 权限与路径都易出错 | 不要在根目录下直接放文件 |
cp 走的是控制通道:大目录传输明显更慢并占用接口服务带宽,批量数据建议改用对象存储或共享存储中转。
上传到容器里的文件写在可写层,容器重建即消失:需要长期保留的内容应放到挂载的卷,或直接进镜像。