How We Found 7 TiB of Memory Just Sitting Around
Инженеры Render обнаружили 7 TiB памяти, которая простаивала в их Kubernetes-класторе из-за неэффективного использования namespace'ов. Проблема заключалась в том, что daemonset'ы (особенно Calico для сетевой конфигурации и Vector для сбора логов) выполняли listwatch операций для namespace'ов на каждом узле. Это создавало огромную нагрузку на apiserver и потребляло значительные ресурсы, так как количество namespace'ов у Render достигло аномально высокого уровня по сравнению с другими кластерами.
Команда уже оптимизировала Calico, сотрудничая с разработчиками проекта, и обнаружила аналогичную проблему с Vector. Оказалось, Vector отслеживал namespace'ы только для проверки принадлежности pod'ов пользовательским namespace'ам. Инженеры нашли способ обойти эту необходимость, что позволило освободить колоссальные 7 TiB памяти. Это решение подчеркивает важность масштабирования не только по количеству узлов или pod'ов, но и по namespace'ам, которые могут стать скрытым узким местом в инфраструктуре.