1. Архитектура Kubernetes и ключевые концепции
Архитектура Kubernetes и ключевые концепции
Kubernetes — это платформа оркестрации контейнеров, которая управляет развертыванием, масштабированием и жизненным циклом приложений в кластере. В этой статье мы разберем архитектуру Kubernetes и ключевые концепции, без которых невозможно уверенно работать с кластером в роли DevOps инженера.
Что такое кластер Kubernetes
Кластер Kubernetes — это набор машин (виртуальных или физических), объединенных для запуска контейнеризованных нагрузок.
В кластере есть две большие части:
!Общая карта компонентов Kubernetes и их связей
Control Plane: компоненты и их роли
Control Plane реализует управление кластером через набор компонентов.
kube-apiserver
kube-apiserver — входная точка в Kubernetes.
kubectl, CI/CD, операторов, контроллеров.Официально: Компоненты Kubernetes
etcd
etcd — распределенное key-value хранилище, где лежит истина о состоянии кластера.
Важно понимать практику:
Официально: Администрирование кластера — etcd
kube-scheduler
kube-scheduler выбирает, на какую ноду поставить Pod.
Он учитывает:
kube-controller-manager
kube-controller-manager запускает набор контроллеров, которые постоянно приводят фактическое состояние к желаемому.
Типичные контроллеры:
Ключевая идея: Kubernetes — это контроллерная система с циклом согласования (reconciliation loop).
cloud-controller-manager
cloud-controller-manager (если кластер в облаке) интегрирует Kubernetes с API облачного провайдера.
Примеры задач:
LoadBalancer.Официально: Cloud Controller Manager
Worker Node: что запускает ваши контейнеры
Каждая рабочая нода содержит компоненты, которые реализуют запуск Pod и сетевую связанность.
kubelet
kubelet — агент на ноде.
Container runtime
Container runtime — движок, который реально запускает контейнеры.
containerd или CRI-O.Официально: Container Runtime Interface (CRI)
kube-proxy
kube-proxy реализует сетевую абстракцию Service на нодах.
iptables или ipvs) для балансировки трафика к Pod.Официально: Service
Декларативная модель и объектная модель Kubernetes
Kubernetes управляется через объекты (resources). Вы описываете желаемое состояние, а контроллеры добиваются его выполнения.
Практический вывод для DevOps:
kubectl apply важна не команда, а согласование состояния.Официально: Объекты Kubernetes
Метаданные: labels, selectors, annotations
Labels — ключ-значение для классификации объектов.
Selectors — правила отбора объектов по labels.
Annotations — произвольные метаданные, обычно не для выборки, а для интеграций.
Официально: Labels и Selectors
Namespace
Namespace — логическая изоляция объектов внутри одного кластера.
Официально: Namespaces
Базовые workload-объекты
Workload-объекты описывают, как запускать приложения.
Pod
Pod — минимальная единица запуска.
Официально: Pods
ReplicaSet и Deployment
ReplicaSet поддерживает заданное число реплик Pod.
Deployment управляет ReplicaSet и предоставляет:
Типичный выбор для stateless-приложений — Deployment.
Официально: Deployments
StatefulSet
StatefulSet предназначен для stateful-нагрузок.
Официально: StatefulSets
DaemonSet
DaemonSet гарантирует запуск Pod на каждой (или выбранной) ноде.
Официально: DaemonSet
Job и CronJob
Job запускает Pod до успешного завершения.
CronJob запускает Job по расписанию.
Официально: Jobs
Сетевые концепции: Service, Ingress и модель сети
Сетевая модель Kubernetes
Kubernetes следует простой модели:
Это реализуется через CNI-плагин (Calico, Cilium, Flannel и т.д.).
Официально: Модель сети в Kubernetes
Service
Service — стабильная точка доступа к группе Pod.
Основные типы:
ClusterIP — доступ внутри кластера.NodePort — порт на каждой ноде.LoadBalancer — внешний балансировщик (обычно через облако).Service выбирает Pod через selector по labels.
Официально: Service
Ingress и Ingress Controller
Ingress — правила L7-маршрутизации HTTP/HTTPS до Service.
Важно различать:
Официально: Ingress
NetworkPolicy
NetworkPolicy ограничивает сетевые взаимодействия между Pod.
Официально: Network Policies
Хранилище: PV, PVC и CSI
Kubernetes отделяет запрос хранилища от реализации хранилища.
Ключевые объекты:
Подключение хранилищ делается через CSI (Container Storage Interface).
Официально:
Конфигурация и секреты: ConfigMap и Secret
ConfigMap хранит некритичную конфигурацию.
Secret хранит чувствительные данные.
Практические замечания:
Официально:
Планирование и изоляция: requests/limits, QoS, taints, affinity
Requests и limits
Requests — гарантируемый минимум ресурсов для Pod при планировании.
Limits — верхняя граница, которую контейнер не должен превышать.
Это влияет на:
Официально: Managing Resources for Containers
QoS-классы
На основе requests/limits Kubernetes назначает Pod класс качества сервиса (QoS), что влияет на то, кого вытеснять при нехватке ресурсов.
Официально: Pod Quality of Service Classes
Taints и tolerations
Taint ставится на ноду и говорит: «сюда нельзя планировать Pod, если он не терпит taint».
Toleration ставится на Pod и разрешает ему быть запланированным на tainted-ноду.
Это базовый механизм для:
Официально: Taints and Tolerations
Affinity и anti-affinity
Affinity позволяет предпочитать или требовать размещение Pod рядом с определенными Pod или на определенных нодах.
Anti-affinity помогает разносить реплики по нодам/зонам для отказоустойчивости.
Официально: Affinity and anti-affinity
Надежность приложений: probes и контроллеры
Kubernetes поддерживает автоматическое восстановление за счет контроллеров и проверок.
Проверки контейнеров:
Официально: Probes
Безопасность: RBAC, ServiceAccount и admission
RBAC
RBAC определяет, кто и что может делать в API Kubernetes.
Основные сущности:
Официально: RBAC
ServiceAccount
ServiceAccount — идентичность для процессов внутри Pod.
Официально: Service Accounts
Admission Controllers
Admission — слой, который может валидировать или мутировать запросы перед записью в etcd.
Официально: Admission Controllers
Расширяемость: CRD и Operator
Kubernetes можно расширять.
Официально:
Как все это работает вместе: жизненный цикл типичного деплоя
Ниже — упрощенная цепочка событий от манифеста до работающего приложения.
kubectl apply) и отправляете желаемое состояние в kube-apiserver.Что важно запомнить перед переходом к практике
В следующих материалах курса мы перейдем от теории к практике: развернем кластер или локальное окружение, научимся работать с kubectl, манифестами и базовыми объектами (Pod, Deployment, Service), а затем закрепим это через типовые production-сценарии.