【问题标题】:How to edit a kubernetes resource from a shell script如何从 shell 脚本编辑 kubernetes 资源
【发布时间】:2018-10-18 01:12:27
【问题描述】:

我浏览了文档以使用kubectl edit 命令编辑 kubernetes 资源。执行命令后,YAML 格式的文件将在编辑器中打开,我可以根据需要更改值并保存它。我正在尝试通过sed 执行这些步骤。如何实现以下步骤?

  1. 对部署资源执行kubectl edit
  2. 设置一个从 truefalse 的值(使用 sed)
  3. 保存更改

我尝试通过以下方式实现这一目标:

$ kubectl edit deployment tiller-deploy -n kube-system | \
   sed -i "s/\(automountServiceAccountToken:.*$\)/automountServiceAccountToken: true/g"`

【问题讨论】:

  • 请在您的帖子中发布输入和预期输出的示例。
  • 该命令应该如何工作?

标签: shell sed kubectl


【解决方案1】:

您的命令缺少反引号。但即使你把它放在那里,它也不起作用。原因是当您执行kubectl edit ... 时,它会在vim 上编辑文件。我不确定 sed 是否可以在 vim 上工作。即使是这样,输出也会转到一个文件中,因此您会收到 Vim: Warning: Output is not to a terminal 错误,我不知道如何解决。

我建议您获取文件并保存它。替换所需参数并再次运行:

kubectl get deploy tiller-deploy -n kube-system -o yaml > tiller.yaml && sed -i "s/automountServiceAccountToken:.*$/automountServiceAccountToken: true/g" tiller.yaml && kubectl replace -f tiller.yaml

我试过上面的命令,它成功了。

注意:不需要添加-n kube-system,因为yaml文件已经包含了命名空间。

【讨论】:

    【解决方案2】:

    我刚刚找到了一种不那么复杂的方法:

    KUBE_EDITOR="sed -i s/SOMETHING TO CHANGE/CHANGED/g" kubectl edit resource -n your-ns
    

    【讨论】:

      【解决方案3】:

      我通过sed 命令通过管道命令自动化,而不创建临时文件。以下面的示例为例,我将名称服务器 8.8.8.8 替换为 1.1.1.1

      $ kubectl -n kube-system get configmap/kube-dns -o yaml | sed "s/8.8.8.8/1.1.1.1/" | kubectl replace -f -
      

      【讨论】:

        【解决方案4】:

        感谢@suren 提供了我真正想要的东西,但您不需要将其保存在文件中。你可以直接使用管道操作kubectl replace

        kubectl get deploy test-deploy  -o yaml | sed "s/find/replace/g" | kubectl replace -f -
        
        

        【讨论】:

          【解决方案5】:

          我不知道 kubectl,但文档似乎解释说它提取数据,从编辑器编辑而不是发回,在这种情况下不确定 sed 管道是否有效

          如果管道工作 不要使用 -i,您不会更改管道中的文件

          kubectl edit deployment tiller-deploy -n kube-system | \
           sed 's/automountServiceAccountToken:.*$/automountServiceAccountToken: true/g'
          

          如果编辑文件(并在 sed 中使用组)

          kubectl edit deployment tiller-deploy -n kube-system > YourCOnfigFile && \
           sed -i 's/\(automountServiceAccountToken:\).*$/\1 true/g' YourConfigFile \
           && Some kubectl to send back YourConfigFile
          

          【讨论】:

          • kubectl edit deployment tiller-deploy -n kube-system > YourCOnfigFile 会抛出错误
          猜你喜欢
          • 2012-12-31
          • 2022-12-11
          • 1970-01-01
          • 2016-08-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-24
          相关资源
          最近更新 更多