k8s在POD内执行echo修改文件可能出现的二义性

本文探讨了在 Kubernetes 环境中使用 `kubectl exec` 命令执行容器内命令时遇到的问题。通过示例,解释了如何通过`kubectl exec pod_name -- /bin/bash -c 'command'`避免命令解析的二义性,确保命令在容器内部正确执行,而不是在宿主机上。总结了解决这类问题的关键在于将命令作为字符串传递给容器内的 shell 解释器。
摘要由CSDN通过智能技术生成

我们知道通过`kubectl exec [-it] pod_name [-c conatiner name] -- comand`的API命令形式,可以在k8s POD的容器内执行shell命令,例如:

# 可以直接删除容器内的文件
kubectl exec  pod_name [-c conatiner name] -- rm /path/to/file

但是,通过`kubectl exec pod_name [-c conatiner name] -- echo -n 1 > /path/to/file`的脚本,却并不能达到预期。

后期复盘,出现这次意外,是因为恰好`/path/to/file`在宿主机上也存在,所以,宿主机脚本执行,并没有报错。但,如果直接执行脚本报错,就没有这次的分析了:)

命令执行过后,通过查看容器内的文件,发现容器内目标文件并没有被修改,出乎了意料之外!

后来逐渐明白,这是因为出现shell脚本解析给kubectl传递命令时出现了二义性,`> /path/to/file`被作为宿主机上脚本执行结果的输出文件,而并非在容器内执行echo的输出文件!

怎么才能达到目的呢?必须让这部分shell命令,能作为字符串传递到容器内才可以,那么,就可以利用`/bin/bash -c comand`来达到目的!

# > 字符在宿主机上具有分割定界的作用
# 如果不作为字符串传递,则会被当作宿主机上shell命令的结果输出使用
kubectl exec pod_name -- /bin/bash -c 'echo -n 1 > /path/to/file'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值