Введение
В этом лабораторном занятии (lab) вы узнаете о Kubernetes LimitRange, который используется для установки ограничений на потребление ресурсов в подах (pods) Kubernetes. LimitRange - это функция Kubernetes, которая помогает вам управлять ресурсами, выделяемыми подам, и предотвращать проблемы с конкуренцией за ресурсы.
Вы пройдете через серию пошаговых инструкций, чтобы понять различные аспекты LimitRange, начиная с простых примеров и постепенно переходя к более сложным сценариям. Каждый шаг будет включать примеры кода в виде манифестов YAML, которые вы можете применить к своему кластеру Kubernetes, чтобы увидеть, как LimitRange работает на практике.
Запустите кластер Minikube
Перед созданием ресурсов вам нужен работающий кластер Kubernetes. Minikube - это легковесная среда Kubernetes, которая запускается на вашем локальном компьютере.
Перейдите в рабочую директорию:
Откройте терминал и перейдите в папку проекта по умолчанию:
cd /home/labex/projectЗапустите Minikube:
Запустите Minikube для инициализации кластера Kubernetes:
minikube start- Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
- В зависимости от производительности вашей системы Minikube может потребовать несколько минут для запуска.
Проверьте, что Minikube запущен:
Проверьте статус кластера Minikube:
minikube status- Найдите компоненты, такие как
kubeletиapiserver, перечисленные какRunning. - Если кластер не запущен, запустите команду
minikube startснова.
- Найдите компоненты, такие как
Если у вас возникли проблемы с запуском Minikube, используйте minikube delete для сброса среды при необходимости.
Создание простого LimitRange
На этом шаге вы создадите простой LimitRange, который устанавливает ограничения на ресурсы ЦПУ и памяти для подов (pods) в пространстве имен (namespace). Вот как это можно сделать:
- Создайте новый файл YAML с именем
limitrange.yamlсо следующим содержимым:
apiVersion: v1
kind: LimitRange
metadata:
name: example-limitrange
spec:
limits:
- type: Container
max:
cpu: "1"
memory: "1Gi"
min:
cpu: "100m"
memory: "100Mi"
default:
cpu: "500m"
memory: "500Mi"
Этот LimitRange устанавливает следующие ограничения:
- Максимальное количество ЦПУ: 1 ядро
- Максимальный объем памяти: 1 ГиБ
- Минимальное количество ЦПУ: 100 миллиядер (100m)
- Минимальный объем памяти: 100 МиБ
- Значение ЦПУ по умолчанию: 500 миллиядер (500m)
- Значение памяти по умолчанию: 500 МиБ
- Примените файл
limitrange.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f limitrange.yaml
- Проверьте, что LimitRange был успешно создан, выполнив следующую команду:
kubectl describe limitrange example-limitrange
Вы должны увидеть LimitRange example-limitrange в списке с ограничениями, указанными в разделе spec.
Применение LimitRange к подам (Pods)
На этом шаге вы создадите под (pod), который будет подчиняться LimitRange, созданному вами в разделе "Создание простого LimitRange". Вот как это можно сделать:
- Создайте новый файл YAML с именем
pod.yamlсо следующим содержимым:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: nginx
image: nginx
В этом определении пода создается простой под с одним контейнером, запускающим образ Nginx.
- Примените файл
pod.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f pod.yaml
- Проверьте, что под был успешно создан, выполнив следующую команду:
kubectl get pods example-pod
Вы должны увидеть под example-pod в списке со статусом Running.
- Проверьте ограничения ресурсов, примененные к поду, выполнив следующую команду:
kubectl describe pod example-pod
Вы должны увидеть ограничения по ЦПУ и памяти для пода, как они были определены.
Тестирование применения LimitRange
На этом шаге вы протестируете применение LimitRange, попробовав создать под (pod), который превышает ограничения ресурсов, определенные в LimitRange. Вот как это можно сделать:
- Создайте новый файл YAML с именем
pod-exceeding-limits.yamlсо следующим содержимым:
apiVersion: v1
kind: Pod
metadata:
name: example-pod-exceeding-limits
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: "2"
memory: "2Gi"
В этом определении пода создается под с контейнером, который запрашивает ресурсы, превышающие ограничения, установленные в LimitRange (ЦПУ: 2 ядра, память: 2 ГиБ).
- Примените файл
pod-exceeding-limits.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f pod-exceeding-limits.yaml
Вы увидите, что операция создания пода отклонена. Сообщение об ошибке звучит так: Error from server (Forbidden): error when creating "pod-exceeding-limits.yaml": pod "example-pod-exceeding-limits" Forbidden: [Maximum cpu usage per container is 1, but limited to 2, maximum memory usage per container is 1Gi, but limited to 2Gi].
Обновление LimitRange
На этом шаге вы обновите LimitRange, созданный в разделе "Создание простого LimitRange", чтобы изменить ограничения ресурсов. Вот как это можно сделать:
- Измените файл
limitrange.yaml, чтобы обновить ограничения ресурсов в соответствии с вашими требованиями. Например:
apiVersion: v1
kind: LimitRange
metadata:
name: example-limitrange
spec:
limits:
- type: Container
max:
cpu: "2"
memory: "2Gi"
min:
cpu: "200m"
memory: "200Mi"
default:
cpu: "1"
memory: "1Gi"
Обновленный LimitRange устанавливает следующие ограничения:
- Максимальное количество ЦПУ: 2 ядра
- Максимальный объем памяти: 2 ГиБ
- Минимальное количество ЦПУ: 200 миллиядер (200m)
- Минимальный объем памяти: 200 МиБ
- Значение ЦПУ по умолчанию: 1 ядро
- Значение памяти по умолчанию: 1 ГиБ
- Примените обновленный файл
limitrange.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f limitrange.yaml
- Проверьте, что LimitRange был успешно обновлен, выполнив следующую команду:
kubectl describe limitranges example-limitrange
В выводе вы должны увидеть обновленные ограничения ресурсов.
Резюме
В этом практическом занятии (lab) вы узнали, как использовать LimitRange в Kubernetes для установки ограничений на потребление ресурсов в подах (pods). Вы начали с создания простого LimitRange, применили его к поду, проверили его применение, а затем обновили LimitRange, чтобы изменить ограничения ресурсов. LimitRange - это мощный инструмент для управления ресурсами в Kubernetes и обеспечения эффективного использования ресурсов в вашем кластере.


