Введение
В этом лабораторном занятии (Lab) вы научитесь использовать Kubernetes ResourceQuota для установки ограничений на потребление ресурсов в кластере Kubernetes. ResourceQuota позволяет контролировать и управлять распределением ресурсов, таких как CPU и память, для пространств имен (namespaces) в кластере Kubernetes. Вы начнете с простых примеров и постепенно перейдете к более сложным сценариям. Каждый шаг будет сопровождаться примерами кода и инструкциями по их применению в вашем кластере Kubernetes.
Запустите кластер 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 для сброса среды при необходимости.
Создание ResourceQuota (квоты ресурсов)
На этом шаге вы создадите простой ResourceQuota (квота ресурсов), который ограничивает количество CPU и памяти, которое может быть использовано в пространстве имен (namespace). Вот как это можно сделать:
- Создайте файл с именем
resourcequota.yamlсо следующим содержимым:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "1"
memory: "1Gi"
Этот ResourceQuota устанавливает следующие жесткие ограничения:
- CPU: 1 ядро
- Память: 1 ГиБ
- Примените файл
resourcequota.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f resourcequota.yaml
- Проверьте, что ResourceQuota успешно создана, выполнив следующую команду:
kubectl describe resourcequota example-resourcequota
В выводе вы должны увидеть детали ResourceQuota.
Применение ResourceQuota к пространству имен (namespace)
На этом шаге вы примените ResourceQuota (квоту ресурсов), созданную в Шаг: Создание ResourceQuota, к пространству имен (namespace). Вот как это можно сделать:
- Создайте файл с именем
namespace.yamlсо следующим содержимым:
apiVersion: v1
kind: Namespace
metadata:
name: example-namespace
Это определение пространства имен создает пространство имен с именем example-namespace.
- Примените файл
namespace.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f namespace.yaml
- Примените ResourceQuota к пространству имен
example-namespaceс помощью командыkubectl apply:
kubectl apply -f resourcequota.yaml -n example-namespace
- Проверьте, что ResourceQuota была применена к пространству имен, выполнив следующую команду:
kubectl describe namespace example-namespace
В выводе вы должны увидеть детали ResourceQuota, примененной к пространству имен.
Тестирование применения квоты ресурсов (ResourceQuota)
На этом шаге вы создадите под (pod), который превышает лимиты ресурсов, определенные в ResourceQuota (квоте ресурсов), и убедитесь, что ResourceQuota применяет эти ограничения. Вот как это можно сделать:
- Создайте файл с именем
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"
Это определение пода создает под с контейнером, который запрашивает ресурсы, превышающие лимиты, установленные в ResourceQuota, созданной в Шаг: Создание ResourceQuota (CPU: 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": pods "example-pod-exceeding-limits" is forbidden: exceeded quota: example-resourcequota, requested: cpu=2,memory=2Gi, used: cpu=0,memory=0, limited: cpu=1,memory=1Gi.
Изменение квоты ресурсов (ResourceQuota)
На этом шаге вы узнаете, как изменить существующую ResourceQuota (квоту ресурсов) для обновления лимитов ресурсов. Вот как это можно сделать:
- Отредактируйте файл
resourcequota.yaml, чтобы увеличить лимиты CPU и памяти:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
cpu: "2"
memory: "2Gi"
Это обновляет ResourceQuota, чтобы разрешить более высокие лимиты CPU и памяти (соответственно 2 ядра и 2 ГиБ).
- Примените обновленный файл
resourcequota.yamlк вашему кластеру Kubernetes с помощью командыkubectl apply:
kubectl apply -f resourcequota.yaml
- Проверьте, что ResourceQuota была обновлена, выполнив следующую команду:
kubectl describe resourcequotas example-resourcequota
В выводе вы должны увидеть обновленные лимиты CPU и памяти.
Резюме
В этом практическом занятии вы узнали, как использовать ResourceQuota (квоты ресурсов) Kubernetes для установки ограничений на потребление ресурсов в кластере Kubernetes. Вы начали с создания простой ResourceQuota, применения ее к пространству имен (namespace) и тестирования ее применения путем создания пода (pod), который превышает лимиты ресурсов. Вы также узнали, как изменить существующую ResourceQuota для обновления лимитов ресурсов. ResourceQuota - это мощный инструмент для управления ресурсами в кластере Kubernetes и обеспечения того, чтобы приложения не использовали избыточное количество ресурсов.


