В Kubernetes 1.21 отключили вывод managed fields для kubectl get
Сегодня наши инженеры заметили, казалось бы, незначительное изменение в Kubernetes 1.21…, но оно порадовало столь многих внутри компании, что сразу было решено написать про него для более широкой аудитории.
В выводе команды kubectl get
, которая используется для поиска и просмотра ресурсов Kubernetes, теперь по умолчанию не будут показываться поля managedFields
. Чтобы включить вывод этих полей, пользователю требуется добавить к команде флаг --show-managed-fields
.
Это долгожданное изменение активно обсуждалось. Главная проблема с managed fields в том, что они очень объемны и не очень полезны. Например, в выводе команды kubectl get deployment -oyaml
поля managedFields могут занимать сотни строк, хотя эта информация нужна скорее для специфических задач.
Поэтому не стало большим удивлением увидеть на GitHub радостные комментарии к этому pull request’у:
«Это замечательно. Я ненавижу managed fields».Зачем нужны managed fields
Эти поля появились вместе с релизом фичи server-side apply (в Kubernetes 1.18), которая призвана решить проблемы использования kubectl apply
для декларативного управления ресурсами K8s. Server-side apply отслеживает изменения в полях объектов и записывает метаданные в managedFields
. При этом записываются любые изменения, даже незначительные — отсюда и такой объем. Подробнее о механизме управления полями можно почитать в документации по Server-side apply.
Предложение убрать managedFields
по умолчанию из вывода kubectl get
появилось еще год назад, и у него нашлось много сторонников. Противники этой идеи хоть и согласились с тем, что вывод объемный, но настаивали, что информация всё-таки может быть полезна. Поведение по умолчанию, принятое для K8s 1.21, доказывает, что эта польза актуальна для меньшинства.