Что происходит, когда вы сливаете узлы в кластере Kubernetes? - PullRequest
0 голосов
/ 03 июля 2019

Я хотел бы получить некоторые пояснения для подготовки к обслуживанию, когда вы сливаете узлы в кластере Kubernetes:

Вот что я знаю, когда вы запускаете kubectl drain MY_NODE:

  • Узел заблокирован
  • Стручки изящно закрыты
  • Вы можете игнорировать стручки Daemonset, потому что, если они выключены, они просто снова появятся снова.

Я не совсем понимаю, что происходит, когда узел дренируется.

Вопросы:

  • Что происходит сстручки?Насколько я знаю, в Кубернетесе нет «живой миграции» стручков.
  • Будет ли модуль выключен, а затем автоматически запущен на другом узле?Или это зависит от моей конфигурации?(т. е. можно ли отключить модуль через сток и не запускать его на другом узле)

Буду признателен за разъяснения по этому поводу, а также за любые рекомендации или советы.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Я просто хочу добавить несколько вещей к ответу eamon1234 :

Вы также можете найти это полезным:

  1. Ссылка на официальную документацию (в случае изменения флагов по умолчанию и т. Д.).В соответствии с этим:

    «Слив» высвобождает или удаляет все модули, кроме зеркальных (которые нельзя удалить через сервер API).Если существуют модули, управляемые DaemonSet, сток не будет выполняться без --ignore-daemonsets, и независимо от этого он не удалит все модули, управляемые DaemonSet, потому что эти модули будут немедленно заменены контроллером DaemonSet, который игнорирует неперестраиваемые маркировки.Если есть какие-либо модули, которые не являются ни зеркальными, ни управляемыми с помощью ReplicationController, ReplicaSet, DaemonSet, StatefulSet или Job, то функция dump не удалит эти модули, если вы не используете --force.--force также позволит продолжить удаление, если отсутствует управляющий ресурс одного или нескольких модулей.

  2. Простой график , иллюстрирующий, что на самом деле происходит при использованииkubectl drain.

  3. Использование опции kubectl drain с --dry-run также может быть хорошей идеей, поэтому вы можете увидеть ее результат до того, как будут применены какие-либо фактические изменения, например:

    kubectl drain foo --force --dry-run

    , однако он не будет отображать никаких ошибок о существующих локальных данных или наборах демонов, которые можно увидеть без использования флага --dry-run: ... error: cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore) ...

0 голосов
/ 03 июля 2019

По умолчанию kubectl drain является неразрушающим, вы должны переопределить, чтобы изменить это поведение.Он работает со следующими значениями по умолчанию:

  --delete-local-data=false
  --force=false
  --grace-period=-1
  --ignore-daemonsets=false
  --timeout=0s

Каждая из этих мер безопасности имеет дело с различной категорией потенциального уничтожения (локальные данные, открытые модули, изящное завершение, наборы демонов).Он также учитывает бюджеты разрушения стручков для обеспечения доступности рабочей нагрузки.Любой не-пустой модуль будет воссоздан на новом узле соответствующим контроллером (например, daemonset controller, replication controller).

Вам решать, хотите ли вы переопределить это поведение (например, у вас может бытьпустой модуль при выполнении задания jenkins. Если вы переопределите, установив --force=true, он удалит этот модуль и не будет воссоздан).Если вы не переопределите его, узел будет находиться в режиме стока неограниченно (--timeout=0s)).

...