Ограничение диапазонов в Kubernetes
На этой странице
- Предварительные условия
- Что будем делать?
- Создайте LimitRange в пространстве имен по умолчанию.
- Создавайте модули с лимитом ЦП и диапазоном в пространстве имен по умолчанию.
- Пакет с ограничением
- Под с большим количеством ЦП:
- Под с меньшим количеством ЦП:
- Под без ЦП:
С помощью Limit Range мы можем ограничить потребление и создание ресурсов, поскольку по умолчанию контейнеры работают с неограниченными вычислительными ресурсами в кластере Kubernetes. Pod может потреблять столько ЦП и памяти, сколько определено предельным диапазоном.
Предельный диапазон устанавливает ограничения на:
- Минимальные и максимальные ресурсы
- Минимальный и максимальный запрос на хранение на PersistentVolumeClaim
- Соотношение между запросом и ограничением для ресурса в пространстве имен.
- Установить запрос/ограничение по умолчанию для вычислительных ресурсов
Чтобы узнать больше о предельных диапазонах, посетите официальную документацию Kubernetes здесь.
В этой статье мы создадим диапазон ограничений и посмотрим, как установить минимальные и максимальные значения ресурсов ЦП, используемых контейнерами и модулями. Мы увидим разные сценарии с Limit и Request на ЦП.
Предпосылки
- Кластер Kubernetes по крайней мере с 1 рабочим узлом.
Если вы хотите научиться создавать кластер Kubernetes, нажмите здесь. Это руководство поможет вам создать кластер Kubernetes с 1 мастером и 2 узлами на инстансах AWS Ubuntu EC2.
Что мы будем делать?
- Создайте LimitRange в пространстве имен по умолчанию.
- Создавайте модули с лимитом ЦП и диапазоном в пространстве имен по умолчанию.
Создайте 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 м, что предел, указанный в пределе диапазона
Заключение
В этой статье мы увидели шаги по созданию диапазона ограничений в пространстве имен по умолчанию. Затем мы испробовали разные сценарии ограничения ЦП и запроса в модуле.