Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные объекты Kubernetes (API Resources)
Kubernetes оперирует объектами (resources), которые представляют собой записи в базе данных (etcd), описывающие желаемое состояние кластера. Эти объекты создаются, управляются и отслеживаются через Kubernetes API. Вот ключевые категории и объекты, которые я использую в ежедневной работе:
1. Рабочие нагрузки (Workloads)
Объекты для развертывания и управления контейнеризированными приложениями.
-
Pod: Наименьшая и самая простая единица. Контейнер (или несколько тесно связанных контейнеров) с общими сетевыми пространствами и хранилищем. Является эфемерным ("расходным").
apiVersion: v1 kind: Pod metadata: name: my-app-pod spec: containers: - name: app image: nginx:alpine ports: - containerPort: 80 -
Deployment: Наиболее распространенный контроллер для управления stateless-приложениями. Обеспечивает декларативное обновление, откат и масштабирование набора Pod'ов через ReplicaSet.
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21 -
StatefulSet: Для stateful-приложений (БД, очереди), где важны устойчивые идентификаторы, стабильное сетевое имя и постоянное хранилище. Pod'ы создаются и удаляются в строгом порядке.
-
DaemonSet: Гарантирует, что Pod будет запущен на всех (или некоторых) узлах кластера. Идеален для системных сервисов (логирование, мониторинг, сетевые плагины).
-
Job и CronJob: Для задач, которые должны выполняться один раз (Job) или по расписанию (CronJob), и завершиться.
-
ReplicaSet: Обеспечивает работу заданного количества идентичных Pod'ов. Обычно им управляет Deployment, и вручную его создают редко.
2. Сеть и сервисы (Network & Service Discovery)
Объекты для организации сетевого взаимодействия.
-
Service: Абстракция, определяющая логический набор Pod'ов (по селекторам) и политику доступа к ним. Обеспечивает стабильный IP/DNS-имя и балансировку нагрузки.
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 9376 type: ClusterIP # Также бывают: NodePort, LoadBalancer, ExternalName -
Ingress: Управляет внешним HTTP/HTTPS доступом к Service'ам внутри кластера через правила маршрутизации (хосты, пути). Для работы требует Ingress Controller (nginx, traefik).
-
NetworkPolicy: Определяет правила входящего (ingress) и исходящего (egress) трафика для Pod'ов, реализуя "сетевую микросегментацию".
3. Конфигурация и хранение (Configuration & Storage)
Объекты для инжекции конфигурации и данных в приложения.
-
ConfigMap: Хранит конфигурационные данные в формате "ключ-значение" (файлы, переменные), не содержащие чувствительной информации.
-
Secret: Аналогичен ConfigMap, но предназначен для хранения чувствительных данных (пароли, токены, ключи). Данные хранятся в base64-кодировке (не шифрование!).
apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: username: YWRtaW4= # admin password: cGFzc3dvcmQ= # password -
Volume: Абстракция для предоставления Pod'ам директории с данными. Существуют различные типы:
emptyDir,hostPath, сетевые (NFS, CSI). -
PersistentVolume (PV) и PersistentVolumeClaim (PVC): Модель управления хранилищем. PV — ресурс в кластере (кусок хранилища), PVC — запрос пользователя на это хранилище. Позволяет отделить детали физического хранения от рабочей нагрузки.
4. Мета-объекты (Meta)
Объекты, которые не описывают сами приложения, а влияют на их поведение.
- Namespace: Виртуальный кластер внутри физического. Позволяет разделять ресурсы между командами, проектами (логическое группирование).
- ServiceAccount: Предоставляет удостоверение личности для Pod'ов, чтобы взаимодействовать с Kubernetes API.
- Role и RoleBinding / ClusterRole и ClusterRoleBinding: Реализуют RBAC (Role-Based Access Control) для управления правами доступа пользователей и ServiceAccount'ов к ресурсам API.
5. Другие важные объекты
- HorizontalPodAutoscaler (HPA): Автоматически масштабирует количество Pod'ов в Deployment/StatefulSet на основе метрик CPU, памяти или кастомных метрик.
- PodDisruptionBudget (PDB): Ограничивает количество добровольных нарушений работы (voluntary disruptions) при обслуживании узлов, гарантируя доступность приложения.
- CustomResourceDefinition (CRD): Расширяет Kubernetes API, позволяя создавать собственные, доменно-специфичные объекты. Основа для операторов (Operators).
На практике взаимодействие с этими объектами происходит через их манифесты в формате YAML (реже JSON) и команды kubectl. Понимание их иерархии, жизненного цикла и взаимосвязей (например, Deployment -> ReplicaSet -> Pod -> Node или PVC -> PV) критически важно для проектирования отказоустойчивых, масштабируемых и безопасных приложений в Kubernetes. Современные практики (GitOps) часто предполагают хранение этих манифестов в Git как "единый источник истины".