Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные типы манифестов 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.