Как редактировать ресурс kubernetes из сценария оболочки
Я просмотрел документацию для редактирования ресурса kubernetes, используя kubectl edit
команда. После выполнения команды в редакторе открывается файл в формате YAML, где я могу изменить значения в соответствии с требованием и сохранить его. Я пытаюсь выполнить эти шаги с помощью sed
, Как можно выполнить следующие шаги?
- казнить
kubectl edit
для ресурса развертывания - Установите значение из
true
вfalse
(используя sed) - Сохраните изменения
Я пытался добиться этого следующим образом:
$ kubectl edit deployment tiller-deploy -n kube-system | \
sed -i "s/\(automountServiceAccountToken:.*$\)/automountServiceAccountToken: true/g"`
6 ответов
В вашей команде отсутствует обратная связь. Но даже если вы положите его туда, это не сработает. Причина в том, что когда вы делаете 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 уже содержит пространство имен.
Я просто нашел менее запутанный способ сделать это:
KUBE_EDITOR="sed -i s/SOMETHING TO CHANGE/CHANGED/g" kubectl edit resource -n your-ns
Я автоматизирую через передачу команд через 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 -
Простой способ сделать это, просто используйте kubectl-patch вместо sed.
$ kubectl patch deployment tiller-deploy -n kube-system --patch '{"map": {"to": {"the": {"key": {"automountServiceAccountToken": "true"}}}}}'
Спасибо, @suren за то, что дал то, что я действительно искал, но вам не нужно сохранять это в файле. вы можете сделать прямоkubectl replace
из трубы
kubectl get deploy test-deploy -o yaml | sed "s/find/replace/g" | kubectl replace -f -
Я не знаю kubectl, но doc, кажется, объясняет, что он извлекает данные, редактирует из редактора, а затем отправляет обратно, не уверен, что в этом случае работает 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