- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 kubectl 的日常用户,但不是 Linux 专家。最近部署后需要编辑一些服务类型,所以搜索并使用了 kubectl replace而且效果很好。
cat yaml | kubectl replace -f -
service/tracs-pool-1sv replaced
但我不明白为什么要在最后添加短破折号 -
。医生只说:
Replace a pod based on the JSON passed into stdin.
我搜索发现this所以问题,并且学习的 kubectl 命令可能是那种不读取 stdin 的命令(我对吗?)。
我试过了
cat yaml |xargs kubectl replace -f
但返回错误:
the path "apiVersion:" does not exist
那么结尾的短破折号(-)语法是为 kubectl ONLY 构建的吗?或者是 linux bash stdin 管道的一些更常见的语法?有人可以解释为什么 xargs 在这里不起作用并且我必须在末尾放置一个短破折号(-)吗?
最佳答案
这是一个相当常见但不通用的 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 states对于许多命令来说,
...an operand naming a file can be specified as '-', which means to use the standard input instead of a named file....
支持此功能的一些命令包括 cat , grep , sort和 tar(POSIX 不需要)。例如,在两台 Linux 计算机之间移动目录树的一种方法是在 stdout 上创建一个 tar 文件,通过 ssh 将该流传输到远程计算机,然后从 stdin 解压 tar 文件:
tar cf - . | ssh elsewhere tar xf - -C /other/dir
xargs是一个将标准输入上的文件名列表转换(最常见)为命令行参数的工具。例如,find(1) 可以将匹配文件名的列表打印到其标准输出,因此您可以构建一个管道来删除 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
关于bash - 需要对 kubectl stdin 和 pipeline 进行一些解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54032336/
使用 Config View 获取以下输出。注意没有“当前上下文” root@Bootstrap [ /etc ]# kubectl config view apiVersion: v1 cluste
最近在学习Kubernetes,对“kubectl apply”和“kubectl replace”的区别不是很清楚。有没有我们只能使用其中一种的情况? 最佳答案 我已经写了一篇关于 apply、re
我想使用单个 kubectl patch 命令修补 Kubernetes 部署中的所有 容器模板,而不必知道它们的名称。这可能吗? 我知道我可以通过awk、sed、jq和kubectl replace
我能找到的唯一两种身份验证方法是创建一个新的身份验证上下文,例如 kubectl config set-credentials gajus/foo --token=foo kubectl config
我正在尝试使用 kubectl -o jsonpath 从服务 yaml(在元数据注释下)检索 kubernetes last-applied-configuration,但该字段的名称是“kubec
我在 k8s 中已有部署,我想更新容器,我在部署和运行中更新了 docker 镜像标签(新的唯一 ID): kubectl apply -f testdeploy.yml --namespace=my
我正在尝试在 kubectl 中使用 kustomize。具体来说,我想知道等效的 kubectl 命令: kustomize build --load_restrictor LoadRestrict
对于每个带有kubectl的命令,我需要使用sudo kubectl。 我了解安全性观点,但是我正在测试环境中工作,并且希望能够不使用sudo来使用它。 我尝试运行sudo -i并使用root帐户运行
如何在 YAML 文件中使用环境变量? 我正在使用 kubectl 创建命名空间,并想知道如何使用变量而不是 testnamespace喜欢 name: $var apiVersion: v1 kin
我使用 Mac OS 作为开发环境。 如果我安装 minikube , kubectl将使用 minikube 制作的本地集群作为默认选项。我发现我可以使用 kubectl命令与 minikube前缀
我对文档的理解是: kubectl create 在集群中创建新的 k8s 资源 kubectl replace 更新实时集群中的资源 kubectl apply 如果我想做创建+替换 ( Refer
我是 k8s 新手,在这里遇到了一个小问题。 上下文如下:我需要每天通过 crontask 调用 kubectl delete [podname] 一次,并等到 k8s 重新创建 pod,然后登录到该
通过使用kubectl exec -ti POD_NAME bash我能够访问容器内的终端并执行命令。 我能理解上面命令的可用性和方便性。作为 K8s 运算符(operator),我经常使用 exec
我是 kubernetes 的新手,正在尝试了解何时使用 kubectl autoscale 和 kubectl scale 命令 最佳答案 部署中的 规模 表示应始终运行多少 pod 以确保应用程序
我用 kubectl create -f pod.xml 创建了一个 pod和 kubectl apply -f pod.xml使用下面的 yaml,我没有看到任何区别,使用这两个命令创建了一个 po
我一直在使用带有各种标志的“kubectl run”以交互方式运行作业,但最近我已经超出了我可以用这些标志做的事情,并且已经逐渐使用 YAML 配置文件来描述我的工作。 但是,我找不到与“-i”和“-
在reference docs ,他们说您可以像这样打印容器的图像。 kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.contai
我正在使用 kubectl 来控制 Azure 上的 Kubernetes 服务(扩展、获取 pod 状态)。在生产脚本中自动调用 kubectl 是否安全,而不用担心凭证会过期? 这是我在生产服务器
我正在尝试使用 kubeadm 工具创建一个高可用性集群。我正在尝试安装 kubeadm 安装的先决条件中指定的工具。当我运行时 sudo apt-get install -y kubelet kub
我的 CI 工具使用生命周期,所以如果 Dev 部署有效,它会进入 QA。 我有一个端到端的测试容器,我想在 kubernetes 中运行,但是如何从容器中获取退出代码? 我可以以某种方式运行容器并在
我是一名优秀的程序员,十分优秀!