Создание Pod в Kubernetes — простая задача. Но под капотом скрывается сложный рабочий процесс, который затрагивает несколько компонентов кластера. Делимся переводом статьи, где автор рассказывает, что в этот момент происходит в кластере. Статья будет полезна тем, кто изучает Kubernetes, знакомится с его компонентами и абстракциями.

Начнем с очевидного: kubectl отправляет определение YAML на сервер API.

На этом этапе kubectl:

  • Обнаруживает эндпоинты API с помощью OpenAPI (Swagger).

  • Согласовывает версию ресурса.

  • Проверяет YAML.

  • Выдает запрос.

Источник

Когда запрос попадает к API, он проходит следующие этапы:

  • Аутентификация и авторизация.

  • Контроллеры допуска.

На последнем этапе он сохраняется в etcd.

Источник

После этого pod добавляется в очередь планировщика. Планировщик фильтрует и оценивает узлы, чтобы найти лучший. И, наконец, привязывает pod к ноде. Привязка записывается в etcd.

Источник

На данный момент pod существует только в etcd в виде записи. Инфраструктура еще не создала ни одного контейнера. Здесь за дело берется kubelet.

Источник

Kubelet извлекает Pod definition и приступает к делегированию:

  1. Создание сети на CNI (например, Cilium).

  2. Создание контейнера - CRI (например, containerd).

  3. Создание хранилища - 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?

Точно такой же процесс, но в обратном порядке.

Правильная последовательность такова:

  1. Приложение перестает принимать соединения.

  2. Контроллеры (kube-proxy, ingress и т. д.) удаляют конечную точку.

  3. Приложение сливает существующее соединение.

  4. Приложение отключается.

Источник

Если вы только знакомитесь с Kubernetes, то приходите в Слёрм на курс Kubernetes: База. Это стартовый курс для администраторов, после которого вы будете знать его основные компоненты и абстракции, иметь опыт настройки кластера и запуска в нём приложений.

???? Полная программа

Попробуйте бесплатный демо-доступ к курсу по этой ссылке. Вы получите на три дня видеоуроки из первого модуля.

Когда вы полностью пройдете всю теорию и практику и успешно сдадите сертификацию, вы будете готовы к работе с Kubernetes в продакшене.

Комментарии (1)


  1. ALexhha
    29.12.2023 20:30
    +1

    Куплет извлекает Pod definition и приступает к делегированию:

    Может все таки kubelet ?

    Кроме всего прочего, Kubelet будет выполнять зонды Pod и, если Pod запущен, сообщать его IP-адрес в control plane.

    А тут я сдаюсь, но явно там не зонды ))