Как мое контейнерное приложение может определить собственное текущее использование ресурсов, а также максимальное ограничение, выделенное Kubernetes? Есть ли API для получения этой информации от cAdvisor и/или Kubelet?
Например, моему контейнеру разрешено использовать максимум 1 ядро, и в настоящее время он потребляет 800 миллиядер. В этой ситуации я хочу отбросить/отклонить все входящие запросы, помеченные как «низкий приоритет».
-Как я могу увидеть использование и ограничение ресурсов в моем контейнере?
Обратите внимание, что это предполагает, что автоматическое масштабирование недоступно, например. когда ресурсы кластера исчерпаны или нашему приложению не разрешено автоматическое масштабирование (далее).
Пока действует автоматическое масштабирование, все в порядке. Когда мы достигнем предела (ов) автоматического масштабирования, мы будем перегружены, и нам нужно будет начать отклонять, например. низкоприоритетные запросы. Спасибо за вопрос, я должен был уточнить это в своем вопросе выше.
Вы можете использовать Kubernetes Нисходящий API для получения лимитов и запросов. Синтаксис:
volumes:
- name: podinfo
downwardAPI:
items:
- path: "cpu_limit"
resourceFieldRef:
containerName: client-container
resource: limits.cpu
divisor: 1m
Спасибо! Кроме того, как узнать загрузку ЦП ток? (что в сочетании с моим лимитом должно дать моему ЦП%)
Я не знаю прямого способа получить информацию. Метрики, которые вы ищете, собираются cadvisor и пересылаются на сервер метрик. Чтобы получить эту информацию изнутри контейнера, я бы извлек ее с помощью API metrics.k8s.io. Вот немного документация за это.
Большое спасибо за этот совет. Я буду следить за этим и посмотреть, как это идет.
Вы хотите, чтобы ваш сервис не перегружался при большом объеме запросов. Почему бы не использовать горизонтальное автомасштабирование модулей в зависимости от загрузки ЦП? Зачем конкретно нужно, чтобы контейнер перестал обрабатывать низкоприоритетные запросы при перегрузке системы. Горизонтальное автомасштабирование pod обеспечивается kubernetes из коробки.