0Pricing
DevOps Bootcamp · Урок

Метki и допускающие правила

Запрещайте размещение Pods на определённых узлах с помощью меток и разрешайте отдельным Pods игнорировать эти ограничения.

«Метki и допускающие правила» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Что такое запреты?

Представьте, что в Вашем кластере Kubernetes есть специальные узлы, например с определённым оборудованием вроде GPU или зарезервированные для некоторых рабочих нагрузок. Вы ведь не захотите, чтобы на них размещался любой под?

Именно для этого нужны запреты! Запрет — это свойство, применённое к узлу, которое не позволяет планировать на нём поды, если только эти поды явно не «допускают» данный запрет.

Зачем использовать запреты

Запреты очень полезны для управления размещением подов:

  • Выделенные узлы: резервирование узлов для определённых команд или приложений.
  • Специальное оборудование: изоляция узлов с GPU или высокопроизводительными SSD для подов, которым они необходимы.
  • Обслуживание: пометка узла как находящегося на обслуживании, чтобы временно не планировать на нём новые поды.

Как работают запреты

Представьте запрет как знак «посторонним вход воспрещён» на узле. Под может проигнорировать этот знак, только если у него есть соответствующий «пропуск» — допуск.

Запрет состоит из ключа, значения и эффекта. Например: key=value:effect.

Разбираемся с эффектами запретов

Часть «эффект» запрета указывает Kubernetes, что делать с подами, которые его не допускают. Существует три основных эффекта:

  • NoSchedule
  • PreferNoSchedule
  • NoExecute

Рассмотрим каждый из них.

Эффект запрета: NoSchedule

Эффект NoSchedule является самым строгим. Если на узле установлен запрет с эффектом NoSchedule, ни один под не будет запланирован на этом узле без соответствующего допуска.

Поды, уже работающие на узле, НЕ затрагиваются новым запретом NoSchedule.

Эффект запрета: PreferNoSchedule

PreferNoSchedule — это «мягкая» версия NoSchedule. Kubernetes постарается не планировать поды на узле с запретом, но это не является жёстким требованием.

Если других подходящих узлов нет, под всё же может быть запланирован на узле с запретом PreferNoSchedule даже без допуска.

Эффект запрета: NoExecute

Эффект NoExecute уникален тем, что влияет на *уже работающие* поды. Если на узле установлен запрет NoExecute:

  • Поды без соответствующего допуска *немедленно выселяются*.
  • Новые поды без соответствующего допуска не могут быть запланированы.

Это часто используется для освобождения узлов или обработки сбоев узлов.

Знакомство с допусками

Если запреты применяются к узлам, то допуски применяются к подам. Допуск пода позволяет запланировать его на узле с соответствующим запретом.

Без соответствующего допуска под не может быть запланирован на узле с запретом (или планировщик предпочитает этого не делать).

Допуски в манифестах подов

Допуски задаются в YAML-манифесте пода, в разделе spec. Вот как под допускает запрет key=value:NoSchedule:

apiVersion: v1
kind: Pod
metadata:
  name: my-tolerated-pod
spec:
  containers:
  - name: nginx
    image: nginx
  tolerations:
  - key: "special-purpose"
    operator: "Equal"
    value: "gpu"
    effect: "NoSchedule"

Как сопоставляются запреты и допуски

Чтобы под можно было запланировать на узле с запретом, его допуск должен соответствовать запрету узла. Сопоставление включает:

  • Ключ: должен совпадать.
  • Значение: должно совпадать, если используется operator: Equal.
  • Эффект: должен совпадать.
  • Оператор: может быть Equal или Exists (то есть допускается любое значение ключа).

Специальный допуск key: "" operator: Exists допускает *любой* запрет.

Быстрая проверка: запреты

На узле установлен запрет env=production:NoSchedule. Какая конфигурация пода позволит запланировать его на этом узле?

Итоги: запреты и допуски

Вы изучили запреты и допуски!

  • Запреты применяются к узлам, чтобы не допускать на них поды.
  • Допуски применяются к подам и позволяют планировать их на узлах с запретами.
  • Основные эффекты запретов: NoSchedule, PreferNoSchedule и NoExecute.
  • Для планирования пода допуск должен соответствовать ключу, значению и эффекту запрета.

Эти инструменты обеспечивают точный контроль над размещением подов!

Часто задаваемые вопросы

Урок «Метki и допускающие правила» бесплатный?

Да — полный текст урока «Метki и допускающие правила» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Метki и допускающие правила»?

Запрещайте размещение Pods на определённых узлах с помощью меток и разрешайте отдельным Pods игнорировать эти ограничения. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Метki и допускающие правила»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Запросы и ограничения ресурсов
  2. Селекторы узлов и аффинность
  3. Метki и допускающие правила
  4. Приоритет и вытеснение подов
← Назад к DevOps Bootcamp