Крупные Kubernetes -кластеры получили заметный запас прочности при сбоях и пиковых нагрузках. Команда проекта выпустила Kubernetes 1.37 под кодовым названием Garhwal, добавив 67 улучшений. Из них 16 функций перешли в стабильный статус, 23 добрались до бета-версии, ещё 27 появились в экспериментальном режиме.
Одним из главных изменений стала более устойчивая инициализация watch cache, который API-сервер использует, чтобы быстро обслуживать запросы к состоянию кластера. Раньше запуск или повторная инициализация кеша могли резко увеличить поток запросов к распределённому хранилищу etcd. В Kubernetes 1.37 механизм ограничивает нагрузку, а лишние запросы отклоняет с кодом HTTP 429 вместо накопления очереди. Разработчики рассчитывают, что такой подход снизит риск отказа управляющего контура в крупных кластерах.
Серьёзные изменения затронули и то, как система управляет цифровыми удостоверениями рабочих нагрузок. Механизмы Pod Certificates и ClusterTrustBundles получили стабильный статус. Kubernetes теперь предоставляет штатный способ передавать подам закрытые ключи, сертификаты X.509 и наборы доверенных сертификатов. Контроллер может автоматически выпускать и обновлять сертификаты, а приложение получает их через подключаемый том – без необходимости самостоятельно хранить долговременные учётные данные.
В стабильную ветку также перешёл StorageVersionMigration API. Механизм помогает автоматически переписывать сохранённые объекты после того, как API переходит на новую версию, и может пригодиться после изменения настроек шифрования данных. Раньше администраторам приходилось запускать собственные сценарии через kubectl либо устанавливать отдельный компонент. Теперь миграцией занимается встроенный контроллер Kubernetes.
Kubernetes 1.37 продолжил развивать средства для ресурсоёмких задач, включая машинное обучение и высокопроизводительные вычисления. Gang scheduling перешёл в бета-статус и позволяет планировщику рассматривать связанную группу подов как единое целое. Вместо того чтобы запускать задание частично, Kubernetes может дождаться, пока в кластере появится достаточно ресурсов для всей группы. Такой подход помогает избежать ситуации, когда часть подов уже заняла процессоры или ускорители, а остальные бесконечно ждут свободных ресурсов.
Горизонтальный автоскейлер HorizontalPodAutoscaler теперь умеет по умолчанию уменьшать число реплик до нуля при работе с внешними или объектными метриками. Когда нагрузка возвращается, Kubernetes снова запускает необходимые поды. Возможность особенно полезна для пакетных заданий, обработчиков очередей и задач с графическими ускорителями, где простаивающие ресурсы напрямую увеличивают расходы. Масштабировать до нуля по загрузке процессора или памяти пока нельзя, поскольку для получения таких метрик нужны работающие поды.
Разработчики также перевели в бета-статус поддержку качества обслуживания памяти Memory QoS на базе cgroups v2. Kubernetes может защищать зарезервированную память от вытеснения и ограничивать приложения до достижения жёсткого лимита. Функция включена по умолчанию, но стандартные настройки подобраны так, чтобы обновление существующих кластеров не приводило к неожиданному ограничению рабочих нагрузок.
Ещё одно изменение постепенно снижает зависимость kubelet от cAdvisor при сборе статистики контейнеров и подов. Kubernetes расширил Container Runtime Interface (CRI), то есть интерфейс взаимодействия с контейнерной средой, чтобы kubelet мог получать необходимые показатели непосредственно от среды выполнения. Пока функция находится в бета-статусе и отключена по умолчанию.
Стабильный статус получил и KYAML – более строгий и однозначный вариант YAML для Kubernetes. Формат остаётся совместимым с YAML, поэтому менять существующие манифесты, инструменты и конвейеры не требуется. Одновременно, после почти девяти лет в бета-статусе, стабильным стал metrics.k8s.io API, через который Kubernetes получает показатели процессора и памяти для подов и узлов.
Цикл разработки Kubernetes 1.37 начался 18 мая и завершился 26 августа. Название Garhwal разработчики выбрали в честь горного региона Гархвал в индийском штате Уттаракханд. Новая версия уже доступна для загрузки, а публикация подробных материалов о вошедших в релиз функциях началась 27 августа.