Поиск по сайту:

Ограничение диапазонов в Kubernetes


На этой странице

  1. Предварительные условия
  2. Что будем делать?
  3. Создайте LimitRange в пространстве имен по умолчанию.
  4. Создавайте модули с лимитом ЦП и диапазоном в пространстве имен по умолчанию.
    1. Пакет с ограничением
    2. Под с большим количеством ЦП:
    3. Под с меньшим количеством ЦП:
    4. Под без ЦП:

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

    Предельный диапазон устанавливает ограничения на:

    • Минимальные и максимальные ресурсы
    • Минимальный и максимальный запрос на хранение на PersistentVolumeClaim
    • Соотношение между запросом и ограничением для ресурса в пространстве имен.
    • Установить запрос/ограничение по умолчанию для вычислительных ресурсов

    Чтобы узнать больше о предельных диапазонах, посетите официальную документацию Kubernetes здесь.

    В этой статье мы создадим диапазон ограничений и посмотрим, как установить минимальные и максимальные значения ресурсов ЦП, используемых контейнерами и модулями. Мы увидим разные сценарии с Limit и Request на ЦП.

    Предпосылки

    1. Кластер Kubernetes по крайней мере с 1 рабочим узлом.
      Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.

    Что мы будем делать?

    1. Создайте LimitRange в пространстве имен по умолчанию.
    2. Создавайте модули с лимитом ЦП и диапазоном в пространстве имен по умолчанию.

    Создайте LimitRange в пространстве имен по умолчанию.

    Создайте файл для определения диапазона ограничений в пространстве имен по умолчанию.

    vim set-limit-range.yml
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: set-limit-range
    spec:
      limits:
      - max:
          cpu: "800m"
        min:
          cpu: "200m"
        type: Container

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

    kubectl get limitrange
    kubectl create -f set-limit-range.yml
    kubectl get limitrange
    kubectl describe limitrange set-limit-range

    На приведенном выше снимке экрана видно, что мы создали предельный диапазон, который определяет ЦП как «Мин.=200 м» и «Макс.=800 м».

    Это означает, что блоки в пространстве имен по умолчанию не могут иметь ЦП «меньше, чем минимум=200 млн\» и \больше, чем макс.=800 млн\.

    Создавайте поды с пределом и диапазоном ЦП в пространстве имен по умолчанию.

    Пакет с лимитом

    Создайте определение модуля, которое запрашивает ЦП больше 200 м и меньше 800 м.

    vim pod-with-cpu-within-range.yml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-cpu-within-range
    spec:
      containers:
      - name: pod-with-cpu-within-range
        image: nginx
        resources:
          limits:
            cpu: "800m"
          requests:
            cpu: "500m"

    Перечислите существующие модули и создайте новый модуль с файлом, созданным на предыдущем шаге.

    kubectl get pods
    kubectl create -f pod-with-cpu-within-range.yml
    kubectl get pods
    kubectl describe pod pod-with-cpu-within-range

    На приведенном выше снимке экрана видно, что модуль был создан с определенным запросом ЦП и ограничением.

    Pod с большим количеством процессоров:

    На этот раз давайте создадим pod с ограничением ЦП 1,5, т. е. более 800 м.

    vim pod-with-cpu-more-than-limit.yml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-cpu-more-than-limit
    spec:
      containers:
      - name: pod-with-cpu-more-than-limit
        image: nginx
        resources:
          limits:
            cpu: "1.5"
          requests:
            cpu: "500m"

    Получите список существующих модулей и попытайтесь создать новый модуль с ограничением ЦП на «1,5 м» больше, чем на «800 м\», которое мы определили в диапазоне ограничений.

    kubectl get pods
    kubectl create -f pod-with-cpu-more-than-limit.yml

    На приведенном выше снимке экрана видно, что модуль не создан.

    Pod с меньшим количеством процессоров:

    Теперь давайте попробуем создать модуль, который запрашивает \CPU=100m\, что меньше, чем \200m\, которые мы определили в предельном диапазоне.

    vim pod-with-cpu-less-than-limit.yml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-cpu-less-than-limit
    spec:
      containers:
      - name: pod-with-cpu-less-than-limit
        image: nginx
        resources:
          limits:
            cpu: "800m"
          requests:
            cpu: "100m"

    Теперь получите список существующих модулей и попробуйте создать модуль с указанным выше файлом определения.

    kubectl get pods
    kubectl create -f pod-with-cpu-less-than-limit.yml

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

    Pod без процессора:

    В этом сценарии позволяет не определять какие-либо запросы или ограничения для ЦП.

    vim pod-with-no-cpu.yml
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-no-cpu
    spec:
      containers:
      - name: pod-with-no-cpu
        image: vish/stress

    Теперь давайте попробуем создать pod и посмотрим его описание.

    kubectl get pods
    kubectl create -f pod-with-no-cpu.yml
    kubectl describe pods pod-with-no-cpu

    На приведенном выше снимке экрана видно, что если мы не указываем какой-либо запрос или ограничение для ЦП, то POD получает выделенный ЦП, равный лимиту, указанному в диапазоне лимита, т.е. в этом примере под получил лимит ЦП и запрос равно 800 м, что предел, указанный в пределе диапазона

    Заключение

    В этой статье мы увидели шаги по созданию диапазона ограничений в пространстве имен по умолчанию. Затем мы испробовали разные сценарии ограничения ЦП и запроса в модуле.