Проверить манифест, не применяя его

server-side dry-run ловит то, что клиентский пропускает: неизвестные поля, отсутствующие CRD и отказы вебхуков

kubectl apply --dry-run=server -f apps/image-updater.yaml
kubectl diff -f apps/image-updater.yaml
kubectl apply --server-side=true -f apps/

Разница принципиальная. --dry-run=client проверяет только синтаксис локально: опечатка в имени поля пройдёт незамеченной, потому что клиент не знает схему ресурса. --dry-run=server отправляет манифест на кластер, где его валидирует API — с той же схемой, теми же admission-вебхуками и теми же CRD, но без записи.

Что ловится только серверной проверкой: неизвестные и переименованные поля, отсутствующий CRD (манифест ссылается на ресурс, которого в кластере нет), отказ admission-вебхука, нарушение квоты неймспейса.

kubectl diff полезнее, когда манифест точно валиден, а вопрос в другом — что именно поменяется. Он показывает построчную разницу с тем, что сейчас в кластере, и хорошо вылавливает случайные откаты: локальный файл отстал от того, что кто-то поправил руками.

--server-side=true — не про проверку, а про способ применения: владение полями отслеживает сервер, и два разных инструмента могут управлять разными частями одного объекта, не затирая друг друга. Для манифестов, которые параллельно правит контроллер вроде ArgoCD или image updater, это снимает бесконечные перезаписи.