Ответ
В ежедневной работе с Kubernetes мы оперируем набором основных ресурсов для развёртывания, управления и поддержки приложений.
Основные рабочие сущности:
-
Pod
- Для чего: Минимальная deployable unit. В реальности редко создаём Pod напрямую, используем контроллеры.
- Пример из практики: Pod с sidecar-контейнером (например,
fluentdдля сбора логов илиvault-agentдля инжекта секретов).
-
Deployment
- Для чего: Основной ресурс для stateless-приложений. Управляет репликами Pod'ов, обеспечивает rolling updates и rollbacks.
- Практика: Всегда настраиваем
readinessProbeиlivenessProbe.apiVersion: apps/v1 kind: Deployment metadata: name: api-deployment spec: replicas: 3 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 template: spec: containers: - name: api image: my-registry/api:v1.2.3 readinessProbe: httpGet: path: /health port: 8080
-
StatefulSet
- Для чего: Для stateful-приложений (базы данных, Kafka, Redis с персистентностью). Гарантирует порядок и уникальность Pod'ов, стабильные сетевые идентификаторы и томы.
-
Service (ClusterIP, NodePort, LoadBalancer)
- Для чего: Абстракция для доступа к группе Pod'ов.
ClusterIP— для внутренней коммуникации,LoadBalancer— для внешнего трафика (часто интегрируется с облачным LB).
- Для чего: Абстракция для доступа к группе Pod'ов.
-
Ingress & IngressController
- Для чего: Управление внешним HTTP/HTTPS доступом, роутинг, SSL/TLS termination. Используем с контроллерами (nginx-ingress, traefik).
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: tls: - hosts: - app.mycompany.com secretName: tls-secret rules: - host: app.mycompany.com http: paths: - path: /api pathType: Prefix backend: service: name: api-service port: number: 80
- Для чего: Управление внешним HTTP/HTTPS доступом, роутинг, SSL/TLS termination. Используем с контроллерами (nginx-ingress, traefik).
-
ConfigMap & Secret
- Для чего: Хранение конфигурации и чувствительных данных отдельно от образов. Secrets храним зашифрованными (используя Sealed Secrets или внешние хранилища типа HashiCorp Vault).
-
PersistentVolume (PV) & PersistentVolumeClaim (PVC)
- Для чего: Предоставление персистентного хранилища Pod'ам. Настраиваем
StorageClassдля динамического provisioning (например,gp2в AWS,standardв GKE).
- Для чего: Предоставление персистентного хранилища Pod'ам. Настраиваем
-
Namespace
- Для чего: Логическое разделение кластера (по командам, окружениям:
dev,staging,prod). Используем ResourceQuotas и LimitRanges для контроля потребления.
- Для чего: Логическое разделение кластера (по командам, окружениям:
-
HorizontalPodAutoscaler (HPA)
- Для чего: Автоматическое масштабирование нагрузки на основе CPU, памяти или кастомных метрик из Prometheus.
-
CustomResourceDefinition (CRD) & Operators
- Для чего: Расширение Kubernetes для управления сложными stateful-приложениями (например, операторы для PostgreSQL, Elasticsearch).
Рабочий процесс: Мы описываем эти ресурсы в виде манифестов (Helm charts, Kustomize), которые проходят через CI/CD пайплайн, где применяются с помощью kubectl apply или GitOps-инструментов (ArgoCD, Flux).