Kubernetes выпустил версию 1.36 с новой функцией серверного шардирования, которая упрощает управление крупными кластерами, позволяя контроллерам получать только те данные, которые необходимы. Это решение важно для разработчиков, поскольку позволяет значительно сократить затраты на процессинг.
Почему это решение актуально
С увеличением количества узлов в кластере до десятков тысяч, традиционный подход к обработке этих становится неэффективным. Каждый экземпляр контроллера получает полный поток событий от API-сервера, что приводит к ненужным затратам на десериализацию и обработку данных, которые не нужны конкретному контроллеру.
С новым шардированием API-сервер фильтрует события уже на этапе их генерации, отправляя каждому контроллеру только необходимые данные, что снижает нагрузку на сеть и процессоры. Это особенно важно для проектов с высокой численностью ресурсов, таких как Pods.
Технические детали нового подхода
В соответствии с нововведениями, в Kubernetes добавлено поле shardSelector в ListOptions. Это позволяет контроллерам определять диапазон хешей, по которым они хотят получать данные, используя функцию shardRange(). Теперь API сервер рассчитывает детерминированный 64-битный хеш для запрашиваемых объектов и отсылает только те, хеш которых попадает в указанный диапазон.
Например, для развертывания с двумя репликами, каждый экземпляр сможет обрабатывать свою половину хеш-пространства, что значительно упрощает нагрузку и ресурсы, затрачиваемые на обработку данных. Также поддерживается использование нескольких непрерывных диапазонов для реплик.
Что это значит для разработчиков
С введением этой функции, разработчики могут ожидать заметное сокращение потребляемых ресурсов в своих приложениях. Это важно для проектирования масштабируемых решений в облаке и оптимизации работы с данными в условиях ограниченных ресурсов. В российских реалиях, где использование облачных ресурсов активно прирастает, эта функция поможет командам дольше удерживать расходы на инфраструктуру.
Взяв в расчет предстоящие обновления Kubernetes, команды разработки могут значительно повысить эффективность своих приложений и уменьшить затраты до 50% на ресурсы в некоторых сценариях. Следующее обновление ожидается в конце года, и это может открыть новые возможности для оптимизации.
