Как Kubernetes управляет требованиями к ресурсам для модулей или контейнеров?

Когда дело доходит до разработки требований к вашей системной инфраструктуре в качестве облачного архитектора или системного архитектора, вам нужен эффективный инструмент оркестровки, который поможет вам достичь необходимой гибкости и масштабируемости. Платформа оркестровки Kubernetes дает вам эту возможность и упрощает процесс управления ресурсами без проблем.

Каковы ресурсы уровня узла в кластере Kubernetes?

В любом кластере с несколькими узлами существует определенный набор ресурсов в виде

  • ЦП
  • Память
  • Дисковое пространство

ЦП и память вместе называются вычислительными ресурсами или просто ресурсами. Эти ресурсы представляют собой измеримые количества, которые можно запрашивать, выделять и использовать.

Тип Единицы Ресурсов:

Каждый из вышеперечисленных типов ресурсов имеет базовую единицу, давайте подробно рассмотрим каждый из них.

  1. ЦП:

ЦП представляет собой вычислительную обработку и указывается в единицах ЦП Kubernetes.

1 ЦП в Kubernetes эквивалентен 1 виртуальному ЦП на ядро ​​ для облачных провайдеров и 1 гиперпоточность для процессоров Intel без операционной системы.

Если это не указано в запросе ресурса, по умолчанию Kubernetes выделяет 0,5 ЦП модулю или контейнерам в модуле.

Некоторые примеры для упрощения юнит-экономики для процессора Kubernetes.

  • 0,1 ЦП = 100 м = 100 млн ЦП

Мы также можем представить его как 0,2, 0,3, 0,4, но он не может опускаться ниже 1 м.

  • 1 виртуальный ЦП = 1 виртуальный ЦП на AWS, ядро ​​I GCP, 1 ядро ​​Azure, 1 гиперпоток

2. Память:

В запросах Kubernetes на память ресурсы измеряются в байтах. Память может быть представлена ​​как в виде

  • простые целочисленные значения
  • Числа с фиксированной точкой

Оба этих типа представленных могут использовать любое указанное: E, P, T, G, M, K

or,

Также можно использовать эквиваленты степени двух: Ei, Pi, Ti, Gi, Mi, Ki.

Давайте разберемся на простом примере:

  • 256 Mi или также может быть представлено как 26843546
  • 123 MI =129 M = 129e6=128974848

По умолчанию Kubernetes предполагает, что любому модулю или контейнеру в данном модуле потребуется 256 Мбайт памяти узла, в котором они находятся.

Если вы используете Kubernetes v1.14 или новее, вы можете указать ресурсы огромной страницы. Огромные страницы - это особенность Linux, в которой ядро ​​узла выделяет блоки памяти, которые намного больше размера страницы по умолчанию.

Как Kubernetes управляет запросом ресурсов?

Каждому модулю, развернутому на узле кластера, можно дополнительно выделить ресурсы, такие как ЦП, ОЗУ и т. Д., Либо по умолчанию, либо на основе предоставления ресурсов, определенных в определении модуля. Каждый такой запрос, поступающий из вновь созданного модуля, обрабатывается планировщиком узлов, поэтому, если вы выбрали определение требований к ресурсам самостоятельно как администратор или разработчик Kubernetes, планировщик будет действовать в соответствии с параметрами запроса ресурсов вашего модуля и решает, какой узел будет этот контейнер будет размещен.

Если администратор определил какое-либо ограничение ресурсов для контейнера в модуле, кубелет, лежащий в узле, применяет эти ограничения, так что работающему контейнеру не разрешается использовать больше этого ресурса, чем установленный вами предел.

Пример определения модуля Чтобы понять, как можно управлять ресурсами и ограничениями:

Создайте образец модуля с помощью команды

$ атом образца-pod.yaml

атом: вот текстовый редактор, вы можете любой текстовый редактор по вашему выбору создать файл. После создания этого файла откройте этот файл в редакторе атомов и введите указанный ниже код YAML. Пожалуйста, не стесняйтесь создавать собственные ресурсы на уровне ресурсов по своему усмотрению.

apiVersion: v1
kind: Pod
metadata:
  name: web-app
spec:
  containers:
  - name: app
    image: nginx
    resources:
      requests:
        memory: "128Mi"
        cpu: 0.5
      limits:
        memory: "256Mi"
        cpu: 1

Характеристики ресурсов в файле sample-pod.YAML:

Как видно из YAML-файла выше, мы выделили параметр запроса ресурса вместе с лимитом, определив в нашем контейнере pod

ресурсы:

resources:
      requests:
        memory: "128Mi"
        cpu: 0.5

и определив

ограничения:

limits:
        memory: "256Mi"
        cpu: 1

Давайте создадим этот модуль.

Создайте этот модуль:

  • $ kubectl применить -f образец-pod.yaml

Давайте просмотрим созданное веб-приложение модуля с помощью команды description:

  • $ kubectl описывает веб-приложение po

Объяснение :

В соответствии с нашими предоставленными ресурсами и ограничениями, наш контейнерный модуль был создан, как показано на рис. 2.

Итак, что происходит, когда происходит выделение ресурсов:

В тот момент, когда Kubernetes получает любой запрос на создание Pod, планировщик K8S берет на себя ответственность за оценку текущей емкости узлов, лежащих в данном кластере Kubernetes, что помогает планировщику определять ЦП и память, доступные в распоряжении узла.

Планировщик отвечает за то, чтобы для каждого типа ресурса сумма запросов ресурсов запланированных Контейнеров была меньше, чем емкость узла. Планировщик отказывается разместить Pod на узле, если проверка емкости доступных ресурсов не удалась на этом узле.

Эта защита от нехватки ресурсов на узле, когда использование ресурсов позже увеличивается, например, во время дневного пика частоты запросов.

Когда для контейнера заданы ограничения ЦП и памяти, Kubernetes регулирует vCPU, чтобы контейнер не выходил за пределы указанного лимита в случае ЦП. Но когда дело доходит до памяти, Kubernetes позволяет контейнеру / поду выходить за пределы установленного порогового лимита памяти, но если под продолжает нарушать ограничение, Kubernetes удаляет поды из узлов.

Резюме:

Подводя итог всему, что мы узнали

  • Как управлять выделением ресурсов контейнера в Kubernetes?
  • Как определить запросы к ресурсам?
  • Как определить лимит ресурсов?
  • Как планировщик обрабатывает выделение ресурсов?
  • Что произойдет, если некоторые модули или контейнеры попытаются выйти за пределы указанного лимита ресурсов, определенного в определении модуля?

Что дальше?

Мы рассмотрим, как Kubernetes использует дисковые ресурсы, и еще несколько примеров управления ресурсами в кластере Kubernetes.

Спасибо за вашу поддержку и не забывайте подписываться на меня здесь….