Управление квотами ресурсов Kubernetes

KubernetesKubernetesBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии (Lab) вы научитесь использовать Kubernetes ResourceQuota для установки ограничений на потребление ресурсов в кластере Kubernetes. ResourceQuota позволяет контролировать и управлять распределением ресурсов, таких как CPU и память, для пространств имен (namespaces) в кластере Kubernetes. Вы начнете с простых примеров и постепенно перейдете к более сложным сценариям. Каждый шаг будет сопровождаться примерами кода и инструкциями по их применению в вашем кластере Kubernetes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["Troubleshooting and Debugging Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicsGroup(["Basics"]) kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("Initialization") kubernetes/BasicCommandsGroup -.-> kubernetes/get("Get") kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("Describe") subgraph Lab Skills kubernetes/initialization -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} kubernetes/get -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} kubernetes/create -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} kubernetes/edit -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} kubernetes/apply -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} kubernetes/describe -.-> lab-15823{{"Управление квотами ресурсов Kubernetes"}} end

Запуск кластера Minikube

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

  1. Перейдите в рабочую директорию:

    Откройте терминал и перейдите в папку проекта по умолчанию:

    cd /home/labex/project
  2. Запустите Minikube:

    Запустите Minikube для инициализации кластера Kubernetes:

    minikube start
    • Эта команда настраивает однодневный кластер Kubernetes на вашем локальном компьютере.
    • В зависимости от производительности вашей системы Minikube может потребовать несколько минут на запуск.
  3. Проверьте, что Minikube запущен:

    Проверьте статус кластера Minikube:

    minikube status
    • Проверьте, чтобы компоненты, такие как kubelet и apiserver, были перечислены как Running (работающие).
    • Если кластер не запущен, запустите команду minikube start снова.

Если у вас возникли проблемы с запуском Minikube, используйте команду minikube delete для сброса среды при необходимости.

Создание ResourceQuota

На этом шаге вы создадите простой ResourceQuota (квота ресурсов), который ограничивает количество CPU и памяти, которое может быть использовано в пространстве имен (namespace). Вот как это можно сделать:

  1. Создайте файл с именем resourcequota.yaml со следующим содержимым:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "1"
    memory: "1Gi"

Этот ResourceQuota устанавливает следующие жесткие ограничения:

  • CPU: 1 ядро
  • Память: 1 ГиБ
  1. Примените файл resourcequota.yaml к вашему кластеру Kubernetes с помощью команды kubectl apply:
kubectl apply -f resourcequota.yaml
  1. Проверьте, что ResourceQuota успешно создана, выполнив следующую команду:
kubectl describe resourcequota example-resourcequota

В выводе вы должны увидеть детали ResourceQuota.

Применение ResourceQuota к пространству имен (namespace)

На этом шаге вы примените ResourceQuota (квоту ресурсов), созданную в Шаг: Создание ResourceQuota, к пространству имен (namespace). Вот как это можно сделать:

  1. Создайте файл с именем namespace.yaml со следующим содержимым:
apiVersion: v1
kind: Namespace
metadata:
  name: example-namespace

Это определение пространства имен создает пространство имен с именем example-namespace.

  1. Примените файл namespace.yaml к вашему кластеру Kubernetes с помощью команды kubectl apply:
kubectl apply -f namespace.yaml
  1. Примените ResourceQuota к пространству имен example-namespace с помощью команды kubectl apply:
kubectl apply -f resourcequota.yaml -n example-namespace
  1. Проверьте, что ResourceQuota была применена к пространству имен, выполнив следующую команду:
kubectl describe namespace example-namespace

В выводе вы должны увидеть детали ResourceQuota, примененной к пространству имен.

Тестирование применения ResourceQuota

На этом шаге вы создадите под (pod), который превышает лимиты ресурсов, определенные в ResourceQuota (квоте ресурсов), и убедитесь, что ResourceQuota применяет эти ограничения. Вот как это можно сделать:

  1. Создайте файл с именем 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 ГиБ).

  1. Примените файл 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 (квоту ресурсов) для обновления лимитов ресурсов. Вот как это можно сделать:

  1. Отредактируйте файл resourcequota.yaml, чтобы увеличить лимиты CPU и памяти:
apiVersion: v1
kind: ResourceQuota
metadata:
  name: example-resourcequota
spec:
  hard:
    cpu: "2"
    memory: "2Gi"

Это обновляет ResourceQuota, чтобы разрешить более высокие лимиты CPU и памяти (соответственно 2 ядра и 2 ГиБ).

  1. Примените обновленный файл resourcequota.yaml к вашему кластеру Kubernetes с помощью команды kubectl apply:
kubectl apply -f resourcequota.yaml
  1. Проверьте, что ResourceQuota была обновлена, выполнив следующую команду:
kubectl describe resourcequotas example-resourcequota

В выводе вы должны увидеть обновленные лимиты CPU и памяти.

Итог

В этом практическом занятии вы узнали, как использовать ResourceQuota (квоты ресурсов) Kubernetes для установки ограничений на потребление ресурсов в кластере Kubernetes. Вы начали с создания простой ResourceQuota, применения ее к пространству имен (namespace) и тестирования ее применения путем создания пода (pod), который превышает лимиты ресурсов. Вы также узнали, как изменить существующую ResourceQuota для обновления лимитов ресурсов. ResourceQuota - это мощный инструмент для управления ресурсами в кластере Kubernetes и обеспечения того, чтобы приложения не использовали избыточное количество ресурсов.