Как редактировать ресурс kubernetes из сценария оболочки - PullRequest
0 голосов
/ 08 мая 2018

Я просмотрел документацию для редактирования ресурса kubernetes с помощью команды kubectl edit. После выполнения команды в редакторе открывается файл в формате YAML, в котором я могу изменить значения в соответствии с требованием и сохранить его. Я пытаюсь выполнить эти шаги с помощью sed. Как можно выполнить следующие шаги?

  1. Выполнить kubectl edit для ресурса развертывания
  2. Установите значение от true до false (используя sed)
  3. Сохранить изменения

Я пытался добиться этого следующим образом:

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

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

В вашей команде отсутствует обратный удар. Но даже если вы положите его туда, это не сработает. Причина в том, что когда вы делаете 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 уже содержит пространство имен.

0 голосов
/ 23 декабря 2018

Я автоматизируюсь путем передачи команд через команду 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 -
0 голосов
/ 08 мая 2018

Я не знаю kubectl, но, похоже, документ объясняет, что он извлекает данные, редактирует их из редактора, а затем отправляет обратно, но в этом случае не уверен, что sed pipe работает

если трубопровод работает Не используйте -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
...