Рубрики
Uncategorized

Как Kubernetes обрабатывает автономные узлы

Kubernetes — отличный инструмент для оркестроировки контейнерных рабочих нагрузок на кластере узлов. Если вы … помечены DevOps, Kubernetes.

Kubernetes — отличный инструмент для оркестроировки контейнерных рабочих нагрузок на кластере узлов. Если вы когда-либо испытали внезапное время простоя узема, вы, возможно, пришли к связи с перенесенными стратегиями развертываний Kubernetes, которые выгнали через некоторое время. В этом сообщении я хочу выделить, как такие ситуации распознаются системой. Это может быть полезно понять и настроить перенесенную механику или при разработке своих собственных операторов и ресурсов.

Процесс

Чтобы продемонстрировать этот процесс более привлекательным образом, следующая графика будет использоваться для визуализации ключевых действий и решений. Мы будем иметь дело с системой, состоящей из одного мастера и одного узла.

В здоровой системе Kublet работает на узле постоянно сообщает о своем состоянии для мастера (1). Это управляется путем установки CLI MARAY - node-status-update-Частота кублета, чей по умолчанию составляет 10 лет. Таким образом, мастер остается в курсе здоровья узлов кластера и может правильно запланировать стручки.

Сейчас (2) Кублет теряет свое соединение с мастером. Например, узел может быть разбойник или сеть неисправен. Мастер, очевидно, не может быть проинформирован по этой причине, но при мониторинге узлов тайм-аут - Монитор-мониторинг-период Проверено (3). По умолчанию этот тайм-аут установлен на 40 секунд в диспетчере контроллера Отказ Это означает, что узел имеет 40 секунд, чтобы восстановить и отправить его состояние для мастера до следующего шага (4).

Если узел может успешно восстановиться, система остается здоровой и продолжается с циклом (1). Если узел не мог ответить в заданный тайм-аут, его состояние установлено на Неизвестно и второй тайм-аут (5) начинается. Это время ожидания, называется --pod-exiction-timeout , контролирует, когда стручки на узле готов к высеблению (а также «потрясающие и толерации» в следующем разделе). Значение по умолчанию установлено на 5 минут. Как только узлы реагируют в этот таймфрейм (6), мастер устанавливает свой статус обратно в Готовый И процесс может продолжаться с обычным циклом в начале. Но когда этот тайм-аут превышен с неадреагирующим узлом, стручки наконец отмечены для удаления (7). Следует отметить, что эти стручки не удаляются мгновенно. Вместо этого узел должен снова выходить в Интернете и подключаться к мастеру, чтобы подтвердить это удаление ( 2-фазное подтверждение ). Если это невозможно, например, когда узел покинул кластер постоянно, вы должны удалить эти стручки вручную.

Отделы и терпимости

Даже если вы устанавливаете тайм-аут выселения --pod-exiction-timeout Для более низкого значения вы можете заметить, что стручки по-прежнему нужно 5 минут, чтобы быть удалены. Это связано с контроллером приема, который устанавливает толерацию по умолчанию на каждый POD, что позволяет ему оставаться на не готовом или недоступном узле в течение периода времени.

tolerations:
- key: node.kubernetes.io/not-ready
  effect: NoExecute
  tolerationSeconds: 300
- key: node.kubernetes.io/unreachable
  operator: Exists
  effect: NoExecute
  tolerationSeconds: 30

Как вы можете видеть в настройке по умолчанию выше, значение устанавливается в 300 секунд/5 минут. Одним из возможных решений является применение пользовательской конфигурации на каждый POD, где это значение настроено на ваши потребности. Вы также можете Отрегулируйте эту настройку глобально Отказ Например, если выбрано значение ( To ToREnationseconds ) 20 секунд, в целом займет 60 секунд для удаления POD 60 секунд, потому что - Монитор-мониторинг-период стоимость учитывается ранее.

Упаковывать его вверх

Я надеюсь, что теперь вы получите грубую идею о том, как Kubernetes распознает и обрабатывает автономные узлы. Особенно два тайм-аута, а также по умолчанию Taints и конфигурация терпимости могут быть предостережением. Это может пригодиться, когда вы разрабатываете собственный оператор, который должен иметь дело с неуверенным узлами. Например, контроллер развертывания Kubernetes распознает эти ситуации автоматически и переносит настроенные стручки. Это также одна из причин, по которой вам следует избегать использования «голых» стручков, потому что это полезное обращение должно быть реализовано вами в этом случае.

Оригинал: «https://dev.to/duske/how-kubernetes-handles-offline-nodes-53b5»