如何从shell脚本编辑kubernetes资源

时间:2018-05-08 06:54:19

标签: shell sed kubectl

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

  1. 为部署资源执行kubectl edit
  2. 将值从true设置为false(使用sed)
  3. 保存更改
  4. 我试图通过以下方式实现这一目标:

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

5 个答案:

答案 0 :(得分:4)

您的命令缺少反引号。但即使你把它放在那里,它也行不通。原因是当你执行upstream时,它会在vim上编辑文件。我不确定sed会在vim上工作。即使它确实如此,输出也会转到文件中,因此您会收到git pull upstream master git merge upstream/master git rebase upstream/master 错误,我不知道如何解决。

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

kubectl edit ...

我尝试了上面的命令并且有效。

注意:无需添加Vim: Warning: Output is not to a terminal,因为yaml文件已包含命名空间。

答案 1 :(得分:3)

我刚刚发现了一种不太复杂的方法:

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

答案 2 :(得分:1)

感谢@suren提供我真正想要的内容,但您无需将其保存在文件中。您可以直接通过管道执行 private void button5_Click(object sender, EventArgs e) { using (cnn = new SqlConnection(v)) { using (cmd = new SqlCommand("DELETE FROM Table_Group WHERE age = @age", cnn)) { cmd.Parameters.RemoveAt(comboBox1.SelectedIndex); cmd.Connection.Open(); cmd.ExecuteNonQuery(); cnn.Close(); cmd.Dispose(); } } }

kubectl replace

答案 3 :(得分:0)

我不知道kubectl但是doc似乎解释说它提取数据,从编辑器编辑而不是发回,在这种情况下不确定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

答案 4 :(得分:0)

我通过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 -