Всем привет!
Когда схематично отображают архитектуру Kubernetes, зачастую рисуют всего один «квадратик» для обозначения API Server. Но так ли это?
Есть две статьи, которые отлично описывают, что происходит, когда выполняется команда
kubectl apply -f pod.yaml.
В первой меньше деталей, но очень наглядно и понятно описываются шаги:🍭 Получение запроса HTTP Handler’ом
🍭 Аутентификация (есть ли у вас доступ к кластеру)
🍭 Авторизация (можете ли вы делать то, что собрались)
🍭 Mutation Admission Controller (добавление «недостающего», например, ImagePullPolicy: always, если вы не указали иное)
🍭 Schema Validation (убеждаемся, что «все на своих местах и ничего не забыто»)
🍭 Validation Admission Controller (можно ли создать то, что вы просите? А если указан валидный, но не существующий Namespace?)
🍭 Resource Handler (десериализация сущности, создание объекта в памяти и помещение в etcd)
При этом многие из указанных «уровней» можно расширять – Mutating (например, Istio или Vault, которые добавляют свои параметры на основе аннотаций), Validating (тот самый OPA Gatekeeper и Kyverno), можно даже регистрировать собственные API. Да, k8s по факту – это большой «конструктор».
Во второй статье в разы больше деталей. Она дает еще большее представление о том, что происходит «под капотом»!!!
Поэтому, для беглого ознакомления рекомендуем прочесть первую статью (~ 4 минуты), а для вдумчивого погружения, когда есть достаточно времени – вторую.