Создание Pod в Kubernetes — простая задача. Но под капотом скрывается сложный рабочий процесс, который затрагивает несколько компонентов кластера. Делимся переводом статьи, где автор рассказывает, что в этот момент происходит в кластере. Статья будет полезна тем, кто изучает Kubernetes, знакомится с его компонентами и абстракциями.
Начнем с очевидного: kubectl отправляет определение YAML на сервер API.
На этом этапе kubectl:
Обнаруживает эндпоинты API с помощью OpenAPI (Swagger).
Согласовывает версию ресурса.
Проверяет YAML.
Выдает запрос.
Когда запрос попадает к API, он проходит следующие этапы:
Аутентификация и авторизация.
Контроллеры допуска.
На последнем этапе он сохраняется в etcd.
После этого pod добавляется в очередь планировщика. Планировщик фильтрует и оценивает узлы, чтобы найти лучший. И, наконец, привязывает pod к ноде. Привязка записывается в etcd.
На данный момент pod существует только в etcd в виде записи. Инфраструктура еще не создала ни одного контейнера. Здесь за дело берется kubelet.
Kubelet извлекает Pod definition и приступает к делегированию:
Создание сети на CNI (например, Cilium).
Создание контейнера - CRI (например, containerd).
Создание хранилища - CSI (например, OpenEBS).
Кроме всего прочего, Kubelet будет выполнять проверки Pod и, если Pod запущен, сообщать его IP-адрес в control plane.
Этот IP-адрес и порты контейнеров хранятся в etcd как эндпоинты.
Подождите... эндпоинты?
В Kubernetes:
endpoint - это пара 10.0.0.2:3000 (IP:порт).
Endpoint - это коллекция конечных точек (список пар IP:порт).
Для каждого сервиса в кластере Kubernetes создает объект Endpoint с конечными точками.
Запутанно, не правда ли?
Эндпоинты (IP:порт) используются:
kube-proxy для установки правил iptables.
CoreDNS для обновления записей DNS.
Контроллеры входа для настройки нисходящих потоков.
Сервисные сетки.
И другие операторы.
Как только добавляется конечная точка, компоненты получают уведомления.
Когда конечная точка (IP:порт) будет передана, вы наконец-то сможете начать использовать Pod!
Что происходит, когда вы удаляете Pod?
Точно такой же процесс, но в обратном порядке.
Правильная последовательность такова:
Приложение перестает принимать соединения.
Контроллеры (kube-proxy, ingress и т. д.) удаляют конечную точку.
Приложение сливает существующее соединение.
Приложение отключается.
Если вы только знакомитесь с Kubernetes, то приходите в Слёрм на курс Kubernetes: База. Это стартовый курс для администраторов, после которого вы будете знать его основные компоненты и абстракции, иметь опыт настройки кластера и запуска в нём приложений.
???? Полная программа
Попробуйте бесплатный демо-доступ к курсу по этой ссылке. Вы получите на три дня видеоуроки из первого модуля.
Когда вы полностью пройдете всю теорию и практику и успешно сдадите сертификацию, вы будете готовы к работе с Kubernetes в продакшене.
ALexhha
Может все таки kubelet ?
А тут я сдаюсь, но явно там не зонды ))