如何在 Kubernetes Pod 和您的机器之间复制文件
在 Kubernetes Pod 中运行的容器是不需要手动交互的独立计算单元。有时您可能需要将文件复制到 Pod 的文件系统或从 Pod 的文件系统复制文件,这可能是因为您正在调试问题并希望存档存储在容器中的日志、配置文件或缓存。
以下是如何使用 Kubectl 的内置传输功能或手动替代方法在您的机器和 Pod 中的容器之间移动文件。
复印到您的机器或从您的机器复印
该kubectl cp命令是复制到容器文件系统或从容器文件系统复制的最简单方法。它的工作原理与docker cp您可能已经在本地容器开发中熟悉的类似。
kubectl cp需要源和目标参数。源或目标之一必须是 Pod 引用。这被格式化为 Pod 名称,后跟一个冒号和容器内文件系统路径。
kubectl cp example-pod:/tmp/example-dir ./example-dir
此示例将/tmp/example-dirfrom的内容复制example-pod到example-dir本地文件系统上。反转参数会将您的机器复制example-dir回 Pod。
命令参数
由于单个 Pod 可以容纳多个容器,因此在使用cp. Kubernetes 将默认复制到或从 Pod 中的第一个容器实例。您可以通过添加-c标志来定位特定容器:
kubectl cp example-pod:/tmp/example-dir ./example-dir -c second-container
像所有其他的kubectl命令,cp有违通过定义群连接你的KUBECONFIG环境变量。这默认为~/.kube/conf.
引用命名空间 Pod 时有两个选项。您可以--namespace example-namespace在文件系统参考中添加标准标志或使用完整的 Pod 路径:
kubectl cp example-namespace/example-pod:/tmp/example-dir ./example-dir
默认情况下保留文件属性。将--no-preserve标志添加到您的cp命令以从留在目的地的复制文件中去除所有权和权限数据。与常规 Unix 不同cp,Kubectl 的实现始终是递归的,因此引用目录也将包含其内容。
当 Kubectl Cp 不起作用时
kubectl cp有一个很大的警告:在内部,它是一个简单的tar. 该命令将压缩源路径,将存档复制到目标,然后提取其内容。您的容器映像必须tar在其路径中包含二进制文件才能使其正常工作。
这意味着kubectl cp当您遵循 Docker 最佳实践来保持镜像较小时,这可能并不总是一种选择。尽管流行的最小基础(例如alpinedo include)tar,它可能不会出现在每个图像中,并且如果您从头开始组装它们,则不会出现。
使用tar也限制了kubectl cp可以复制的内容。您无法解析符号链接或使用诸如/tmp/*.log. 当需要此功能时,您将不得不使用不同的方法。
一种选择是将kubectl exec、cat命令和 shell 重定向结合起来,将文件的内容从集群中流式传输到本地文件中:
kubectl exec \
--namespace 示例-namespace \
example-pod -c 第二个容器 \
-- cat /tmp/example-file > 本地文件
该kubectl exec命令在 Pod 中启动一个 shell 会话。之后的所有内容都在--容器内运行。调用cat文件的输出将发送到您的终端,在那里它可以重定向到本地文件。
当您复制少量相对较小的文件时,此技术适用。如果您需要检索一个大目录,它很快就会变得乏味。不幸的是,如果不向容器中添加额外的软件,就没有更好的选择。
如果你感觉大胆,你可以在你的容器安装SSH和使用scp,以从您的主机访问它的文件系统。这将为您提供完整的复制体验,但代价是运行额外的守护程序并产生潜在的安全问题。它应该只在受到适当保护的集群上考虑。
添加tar到您的容器映像是一个更安全的选择。这使您可以在需要额外功能时使用kubectl cp和解锁更高级的手动复制kubectl exec。如果遇到cp语法限制,请tar直接调用viakubectl exec向命令添加额外的标志:
kubectl exec \
--namespace 示例-namespace \
example-pod -c 第二个容器 \
-- tar -cf /tmp/example-dir | tar xf - -C ./extracted-dir
这tar -cF在您的容器内运行,并将结果通过管道传输到tar xf本地机器上的提取命令。的-指示tar来提取通过标准输入流馈送到它的数据。-C用于指定目标目录。
概括
该kubectl cp命令允许您在 Kubernetes Pod 和您的机器之间复制文件。它适用于任一方向,但不能用于将文件从 Pod 移动到 Pod。如果您需要这样做,最好使用两阶段程序,首先从 Pod A 复制到您的机器,然后再复制到 Pod B。
由于cp依赖于tar后台,您需要确保您的容器映像包含它。你会看到一个No such file or directory tar错误,如果你尝试运行cp对抗吊舱没有tar。在这种情况下,无论是添加tar到容器或使用的组合kubectl exec并cat,如果你只需要找回一些文件。
如何在 Kubernetes Pod 和您的机器之间复制文件的更多相关文章
- Linux机器之间复制文件和目录方式&Linux的scp命令详解
本文转载于:http://www.cnblogs.com/hitwtx/archive/2011/11/16/2251254.html 整理总结如下: 不同的Linux之间copy文件常用有3种方法: ...
- Linux下不同机器之间的文件拷贝
通过 scp 命令实现不同机器之间的文件拷贝. (1)本机考到目标机器:scp 本机文件 目的地: 如:scp /home/odp-web.war root@192.168.6.137:/usr/ ...
- 如何在docker和宿主机之间复制文件
如何在docker和宿主机之间复制文件 最近在用Docker布署hadoop,要将文件上传到HDFS首先文件得在Docker容器中吧,网上提供的方法差不多有三种 1.用-v挂载主机数据卷到容器内 ...
- Linux下不同机器之间拷贝文件
在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...
- Linux系统下不同机器之间拷贝文件的方法
在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...
- 不同Linux机器之间拷贝文件
不同的Linux之间copy文件常用有3种方法: 第一种就是ftp,也就是其中一台Linux安装ftp Server,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种方法就是 ...
- 如何在 Linux 上复制文件/文件夹到远程系统?
从一个服务器复制文件到另一个服务器,或者从本地到远程复制是 Linux 管理员的日常任务之一. 我觉得不会有人不同意,因为无论在哪里这都是你的日常操作之一.有很多办法都能处理这个任务,我们试着加以概括 ...
- 如何在Kubernetes里创建一个Nginx service
Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...
- 实例演示:如何在Kubernetes上大规模运行CI/CD
本周四晚上8:30,第二期k3s在线培训如约开播!本期课程将介绍k3s的核心架构,如高可用架构以及containerd.一起来进阶探索k3s吧! 报名及观看链接:http://z-mz.cn/PmwZ ...
- Kubernetes入门(四)——如何在Kubernetes中部署一个可对外服务的Tensorflow机器学习模型
机器学习模型常用Docker部署,而如何对Docker部署的模型进行管理呢?工业界的解决方案是使用Kubernetes来管理.编排容器.Kubernetes的理论知识不是本文讨论的重点,这里不再赘述, ...
随机推荐
- 数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊
墨天轮社区正持续举办[聊聊故障处理那些事儿]DBA专题征文活动中,每月进行评优发奖,鼓励大家记录工作中遇到的数据库故障处理过程,不仅用于自我复盘与分析,同时也能帮助其他的同仁们避坑. 这里为大家整理出 ...
- 墨天轮沙龙 | 清华乔嘉林:Apache IoTDB,源于清华,建设开源生态之路
在6月8日举办的[墨天轮数据库沙龙第七期-开源生态专场]中,清华大学博士,助理研究员,Apache IoTDB PMC 乔嘉林老师分享了<Apache IoTDB,源于清华,建设开源生态之路&g ...
- rabbitmq 新下载链接🔗
Linux下安装RabbitMQ需要依赖socat和erlang插件环境 1 插件下载 1.1 RabbitMQ下载 下载地址一:https://www.rabbitmq.com/download. ...
- Monaco Editor 实现一个日志查看器
我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:文长 前言 在 Web IDE 中,控制台中展示日志是至关 ...
- 记一次pip/pip3安装uwsgi报错
背景 本来是想着在centos 7.9的主机上面部署一个flask应用,采用的方式是linux+nginx+uwsgi来进行发布,其他的都没有问题,但是在使用pip安装uwsgi时报错了,安装不成功, ...
- buck电路 & boost电路
buck电路 buck电路是直流的降压电路,我们下面给大家讲下,如何把12V的直流电压降压成5V的直流电压 1.buck电路拓扑:12V----->5V 2.降压原理 a.开关闭合,电流走向 电 ...
- Power BI如何连接MySQL数据库
既然写了如何卸载MySQL connector net(相关文章见如何解决MySQL Connector NET xxxx无法卸载的问题(win10)),那就顺便再写一篇Power BI(以下简称PB ...
- 4年经验来面试20K的测试岗,连基础都不会,还不如招应届生。
公司前段时间缺人,也面了不少测试,结果竟然没有一个合适的.一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望.看简历很多都是3.4年工作经验,但面 ...
- 让性能提升56%的Vue3.5响应式重构之“版本计数”
前言 Vue3.5响应式重构主要分为两部分:双向链表和版本计数.在上一篇文章中我们讲了 双向链表 ,这篇文章我们接着来讲版本计数. 欧阳年底也要毕业了,加入欧阳的面试交流群(分享内推信息).高质量vu ...
- 如何使用程序生成一个复杂的2D迷宫游戏地图
相关: I Solved The World's Hardest Maze (with Code) 本文不做过多的内容介绍,本文主要是分享上面的这个视频内容,该内容介绍了一些自动生成复杂2D迷宫的算法 ...