热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

需要对kubectlstdin和管道进行一些解释

如何解决《需要对kubectlstdin和管道进行一些解释》经验,为你挑选了1个好方法。

我是kubectl的日常用户,但不是linux的专家.最近我需要在部署后编辑一些服务类型,所以搜索并使用kubectl 替换它并且运行良好.

cat yaml | kubectl replace -f -

service/tracs-pool-1sv replaced

但是我不明白为什么要在最后添加短划线 -.该文件只说:

根据传入stdin的JSON替换pod.

我搜索并发现了这个问题,并且学到了kubectl命令可能是那种不读取标准输入的命令(我是对的吗?).

我试过了

cat yaml |xargs kubectl replace -f

但错误返回:

the path "apiVersion:" does not exist

所以是结束短破折号( - )语法kubectl内置ONLY?或者是linux bash stdin管道的一些更常见的语法?有人可以解释为什么xargs不能在这里工作,我必须在最后放一个短划线( - )?



1> David Maze..:

这是一个相当普遍但不通用的Un*x约定.(它在POSIX规范中提到,因此大多数非Linux Unices也会支持它.)

这里重要的细节是该kubectl ... -f选项需要一个文件名.如果你有一个名为的文件x.yaml,那么更直接的方式来编写你所展示的内容

kubectl replace -f x.yaml

你说的-f -,表面上意味着"一个名为"的文件-,但是kubectl(以及许多其他工具)实际上将其解释为"过程的标准输入".例如,您可以将它用于非常轻量级的模板系统,例如

sed 's/TAG/1.2.3-20190103/g' x.yaml | kubectl replace -f -

对于一般的Un*x工具,POSIX.1指出,对于许多命令,

...命名文件的操作数可以指定为' - ',这意味着使用标准输入而不是命名文件....

一些支持它的命令包括cat,grep,sort和tar(POSIX不需要).例如,在两台Linux机器之间移动目录树的一种方法是在stdout上创建一个tar文件,通过ssh将流传输到远程机器,然后从stdin解压缩tar文件:

tar cf - . | ssh elsewhere tar xf - -C /other/dir

xargs是一种工具,可以将(最常见的)标准输入上的文件名列表转换为命令行参数.例如,find(1)可以将匹配文件名的列表打印到其stdout,因此您可以构建一个管道来删除shell备份文件,例如

find . -name '*~' | xargs rm

你通常不会在Kubernetes中使用它; 例如,您的示例尝试将YAML内容本身作为命令行参数传递kubectl给.您可以kubectl在目录树中应用类似的内容

find . name '*.yaml' | xargs -n1 kubectl apply -f

但由于kubectl ... -f 支持目录名称(不是通用约定),你可以更直接地做同样的事情

kubectl apply -f . # where . is the current directory


推荐阅读
author-avatar
17114php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有