Архитектура Kubernetes: узлы (Nodes)
Узел - это рабочая машина в Kubernetes, ранее известная как minion. Узел может быть виртуальной машиной или физической машиной, в зависимости от кластера. Каждый узел содержит службы, необходимые для запуска модулей (pods), и управляется мастер компонентами (master components). Службы (services) на узле включают среду выполнения контейнера (container runtime), kubelet и kube-proxy.
Статус узла
Статус (состояние) узла содержит следующую информацию:
- Addresses (Адреса)
- Conditions (Условия)
- Capacity и Allocatable (Емкость и Распределение)
- Info (Информация)
Статус узла и другие подробности об узле могут быть отображены с помощью следующей команды:
kubectl describe node <имя-узла>
Каждый раздел подробно описан ниже.
Addresses (Адреса)
Использование этих полей варьируется в зависимости от вашего облачного провайдера или конфигурации физического сервера.
- HostName: имя хоста, сообщаемое ядром узла. Может быть переопределено с помощью параметра kubelet --hostname-override.
- ExternalIP: как правило, это IP-адрес узла, который может маршрутизироваться извне (доступен снаружи кластера).
- InternalIP: обычно IP-адрес узла, который маршрутизируется только внутри кластера.
Conditions (Условия)
Поле conditions описывает состояние всех Running (работающих) узлов. Примеры conditions включают в себя:
-
Node Condition: OutOfDisk
Описание: True, если на узле недостаточно свободного места для добавления новых модулей (pods), в противном случае False
-
Node Condition: Ready
Описание: True, если узел исправен и готов к приему pod'ов, False, если узел не исправен и не принимает pod'ы, и Unknown, если контроллер узла не получал сообщений от узла в последний node-monitor-grace-period (период мониторинга узла) (по умолчанию 40 секунд)
-
Node Condition: MemoryPressure
Описание: True, если существует давление на память узла - то есть, если память узла мала; в противном случае False
-
Node Condition: PIDPressure
Описание: True, если существует давление на процессы - то есть, если на узле слишком много процессов; в противном случае False
-
Node Condition: DiskPressure
Описание: True, если существует давление на размер диска - то есть, если емкость диска мала; в противном случае False
-
Node Condition: NetworkUnavailable
Описание: True, если сеть для узла настроена неправильно, в противном случае - False
Условия узла (node conditions) представляются в виде объекта JSON. Например, следующий ответ описывает исправный узел.
"conditions": [
{
"type": "Ready",
"status": "True",
"reason": "KubeletReady",
"message": "kubelet is posting ready status",
"lastHeartbeatTime": "2019-06-05T18:38:35Z",
"lastTransitionTime": "2019-06-05T11:41:27Z"
}
]
Если Status условия Ready остается Unknown или False дольше, чем время ожидания pod-eviction-time, в kube-controller-manager передается аргумент, и все модули в узле планируются для удаления контроллером узла. По умолчанию время ожидания выселения составляет пять минут. В некоторых случаях, когда узел недоступен, apiserver не может связаться с kubelet на узле. Решение об удалении модулей (pods) не может быть передано в kubelet до тех пор, пока связь с apiserver не будет восстановлена. В то же время pods, которые запланированы для удаления, могут продолжать работать на разделенном (partitioned) узле.
В версиях Kubernetes до 1.5 контроллер узла принудительно удалял эти недоступные модули (pods) с apiserver. Однако в версии 1.5 и выше контроллер узла не принуждает удаление модулей (pods), пока не будет подтверждено, что они прекратили работу в кластере. Вы можете видеть модули (pods), которые могут быть запущены на недоступном узле, как находящиеся в состоянии Terminating или Unknown. В тех случаях, когда Kubernetes не может сделать вывод из базовой инфраструктуры, если узел навсегда покинул кластер, администратору кластера может потребоваться удалить объект узла вручную. При удалении объекта узла из Kubernetes все объекты Pod, работающие на узле, удаляются с apiserver и освобождают их имена.
В версии 1.12 функция TaintNodesByCondition переведена в бета-версию, поэтому контроллер жизненного цикла узла автоматически создает taints (загрязнения), которые представляют условия (conditions). Аналогично планировщик игнорирует условия (conditions) при рассмотрении узла; вместо этого он смотрит на taints узла и tolerations (допуски) Pod'а.
Теперь пользователи могут выбирать между старой моделью планирования и новой, более гибкой моделью планирования. Pod, у которого нет никаких допусков (tolerations), запланирован согласно старой модели. Но на этом узле может быть запланирован Pod, который допускает загрязнения (taints) определенного узла.
Предостережение: включение этой функции создает небольшую задержку между временем, когда наблюдается условие (condition), и созданием загрязнения (taint). Эта задержка обычно составляет менее одной секунды, но она может увеличить количество модулей (Pods), которые успешно запланированы, но отклонены kubelet'ом.
Capacity и Allocatable (Емкость и Распределение)
Описывает ресурсы, доступные на узле: процессор, память и максимальное количество модулей (pods), которые можно запланировать на узле.
Поля в блоке capacity указывают общее количество ресурсов, которые имеет узел. allocatable блок указывает количество ресурсов, которые на узле (Node) доступны для использования обычными модулями (Pods).
Info (Информация)
Общая информация об узле, такая как версия ядра, версия Kubernetes (версия kubelet и kube-proxy), версия Docker (если используется), имя ОС. Информация собрана Kubelet с узла.
Читайте также:
- Объекты Kubernetes
- Управление Kubernetes объектами
- Kubernetes компоненты: узловые компоненты (Node Components), Addons (дополнения)
Комментарии
Отправить комментарий