← Назад к вопросам

Какие знаешь манифесты Kubernetes?

1.0 Junior🔥 241 комментариев
#Kubernetes

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

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные типы манифестов Kubernetes

Kubernetes использует манифесты (обычно в формате YAML или JSON) для декларативного описания состояния кластера. Вот основные типы ресурсов, которые описываются манифестами:

1. Основные рабочие нагрузки (Workloads)

  • Pod: Наименьшая и простейшая единица в Kubernetes, представляющая один или несколько контейнеров.
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
    
  • Deployment: Контроллер для управления репликами Pod'ов, обеспечивающий обновления, откаты и масштабирование.
  • StatefulSet: Для stateful-приложений (как БД), гарантирует уникальность и устойчивость идентификаторов Pod'ов, стабильные сетевые имена и постоянное хранилище.
  • DaemonSet: Гарантирует, что Pod будет работать на всех (или некоторых) узлах кластера (например, для агентов мониторинга).
  • Job / CronJob: Запускает Pod'ы для выполнения разовой задачи или задач по расписанию.

2. Конфигурация и хранение (Configuration & Storage)

  • ConfigMap: Хранит конфигурационные данные в формате "ключ-значение", которые можно монтировать в Pod'ы.
  • Secret: Аналогичен ConfigMap, но предназначен для хранения конфиденциальных данных (пароли, токены) в закодированном виде.
  • PersistentVolume (PV) / PersistentVolumeClaim (PVC): Абстракции для управления постоянным хранилищем. PV описывает ресурс хранилища в кластере, а PVC — запрос на его использование.
  • StorageClass: Описывает "класс" хранилища (например, SSD, медленные диски), позволяя динамически создавать PV по требованию PVC.

3. Сетевые ресурсы (Networking)

  • Service: Абстракция, определяющая логический набор Pod'ов и политику доступа к ним. Основные типы: ClusterIP (внутренний), NodePort (внешний через порт ноды), LoadBalancer (внешний через облачный балансировщик).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 9376
      type: ClusterIP
    
  • Ingress: Управляет внешним доступом к сервисам, обычно через HTTP/HTTPS, обеспечивая маршрутизацию, SSL-терминацию и виртуальные хосты. Часто требует контроллера Ingress (nginx, traefik).
  • IngressClass: Описывает класс контроллера Ingress для использования разными контроллерами в одном кластере.
  • NetworkPolicy: Определяет правила входящего и исходящего сетевого трафика для Pod'ов (файервол на уровне Pod).

4. Мета-ресурсы и безопасность (Meta & Security)

  • Namespace: Логическая изоляция ресурсов внутри кластера (виртуальные подкластеры).
  • ServiceAccount: Предоставляет идентификацию для процессов, работающих внутри Pod, для аутентификации в API Kubernetes.
  • Role / ClusterRole: Определяет набор разрешений (правил) внутри Namespace или всего кластера соответственно.
  • RoleBinding / ClusterRoleBinding: Связывает субъекта (User, Group, ServiceAccount) с Role или ClusterRole, назначая таким образом права.

5. Расширенные ресурсы и CRD

  • CustomResourceDefinition (CRD): Позволяет расширять API Kubernetes, создавая собственные, доменно-специфичные ресурсы. Например, Certificate от cert-manager или ArgoCD Application.
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: myresources.stable.example.com
    spec:
      group: stable.example.com
      versions:
        - name: v1
          served: true
          storage: true
          schema: {...}
      scope: Namespaced
      names:
        plural: myresources
        singular: myresource
        kind: MyResource
    

6. Прочие важные ресурсы

  • HorizontalPodAutoscaler (HPA): Автоматически масштабирует количество реплик Pod'ов (например, в Deployment) на основе наблюдаемой метрики (CPU, memory, custom).
  • PodDisruptionBudget (PDB): Ограничивает количество одновременных добровольных нарушений работы Pod'ов при операциях обслуживания нод, обеспечивая доступность.
  • LimitRange / ResourceQuota: LimitRange задает ограничения по умолчанию на ресурсы (CPU, memory) для Pod'ов/контейнеров в Namespace. ResourceQuota устанавливает общий лимит на потребление ресурсов в Namespace.

Важность понимания манифестов для DevOps-инженера невозможно переоценить. Это основа инфраструктуры как кода (IaC) в Kubernetes. Умение писать, читать и отлаживать манифесты, понимать их взаимосвязи (например, Deployment -> ReplicaSet -> Pod, или Ingress -> Service -> Pod) и использовать инструменты вроде kubectl apply, kustomize или helm для их управления — ключевой навык. Знание этих ресурсов позволяет эффективно проектировать, разворачивать и поддерживать отказоустойчивые, масштабируемые и безопасные приложения в Kubernetes.