В качестве обходного пути вы можете использовать стандартную команду GNU / Linux diff
следующим образом:
diff -uN <(kubectl get pods nginx-pod -o yaml) example_pod.yaml
Я знаю, что это не решение, а просто обходной путь, но я думаю, что это все еще может рассматриваться как полноценный инструмент для замены.
Спасибо, но это не работает для меня, потому что мне интересен не один модуль, а целый релиз Helm с развертыванием , услуги, рабочие места и др. c. - dploeger
Но в любом случае вы не сможете сравнить все сразу, не так ли?
Вы можете использовать его для любого ресурса, который вам нравится, а не только для Pods
. Просто замените Pod
любым другим ресурсом, который вам нравится.
В любом случае, под капотом kubectl diff
использует diff command
В kubectl diff --help
вы можете прочитать:
Переменная окружения KUBECTL_EXTERNAL_DIFF может использоваться для выбора вашей собственной команды diff. По умолчанию команда «diff», доступная в вашем пути, будет запускаться с опциями «-u» (унифицированный diff) и «-N» (обрабатывать отсутствующие файлы как пустые).
Настоящая проблема в вашем случае заключается в том, что вы не можете по какой-то причине использовать --dry-run
в своем кластере AKS, что является вопросом для пользователей / экспертов AKS. Может быть, это можно как-то включить, но, к сожалению, я понятия не имею, как.
В основном kubectl diff
сравнивает уже развернутый ресурс, который мы можем получить:
kubectl get resource-type resource-name -o yaml
с результатом:
kubectl apply -f nginx.yaml --dry-run --output yaml
и не с фактическим содержимым вашего файла yaml (для этой цели подойдет простой cat nginx.yaml
).
Вы можете дополнительно использовать:
kubectl get all -l "app.kubernetes.io/instance=<helm_release_name>" -o yaml
для получения yamls
всех ресурсов, относящихся к указанному c релизу руля .
Как вы можете прочитать в man diff
, у него есть следующие опции:
--from-file=FILE1
compare FILE1 to all operands; FILE1 can be a directory
--to-file=FILE2
compare all operands to FILE2; FILE2 can be a directory
, поэтому мы не ограничиваемся сравнением как отдельных файлов, так и файлов, расположенных в каталоге c. Только мы не можем использовать эти две опции вместе.
Таким образом, полная команда diff
для сравнения всех ресурсов, относящихся к указанному c релизу руля , в настоящее время развернута на наших kubernetes кластер с yaml
файлами из указанного каталога c может выглядеть следующим образом:
diff -uN <(kubectl get all -l "app.kubernetes.io/instance=<helm_release_name>" -o yaml) --to-file=directory_containing_yamls/