Ответ
Публикация приложения в Kubernetes — это его деплой и предоставление доступа. Вот ключевые способы и ресурсы:
1. Ресурсы для управления рабочими нагрузками (Deployment)
- Deployment: Основной ресурс для stateless-приложений. Управляет ReplicaSet, обеспечивает rolling updates, откаты и масштабирование.
apiVersion: apps/v1 kind: Deployment metadata: name: frontend spec: replicas: 3 selector: matchLabels: app: frontend template: metadata: labels: app: frontend spec: containers: - name: nginx image: nginx:1.21 - StatefulSet: Для stateful-приложений (БД, Kafka). Гарантирует устойчивые идентификаторы подов, стабильные сетевые имена и упорядоченный деплой/масштабирование.
- DaemonSet: Гарантирует, что копия пода будет работать на всех (или некоторых) нодах. Идеально для агентов мониторинга (Prometheus Node Exporter) или логирования (Fluentd).
- Job / CronJob: Для разовых задач (миграция БД) или периодических (бэкапы).
2. Ресурсы для предоставления доступа (Service & Ingress)
- Service: Абстракция, определяющая логический набор подов и политику доступа к ним. Создает стабильный DNS-имя и IP (ClusterIP).
- ClusterIP: Доступ только внутри кластера.
- NodePort: Открывает порт на каждой ноде.
- LoadBalancer: Создает внешний балансировщик нагрузки у облачного провайдера.
- Ingress: Управляет внешним HTTP/HTTPS доступом к сервисам внутри кластера. Один Ingress может маршрутизировать трафик на множество сервисов на основе хоста или пути. Требует Ingress Controller (например, nginx-ingress).
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress spec: rules: - host: app.mycompany.com http: paths: - path: / pathType: Prefix backend: service: name: frontend-service port: number: 80
3. Инструменты упаковки и управления (Helm, Kustomize)
- Helm: Менеджер пакетов для Kubernetes. Позволяет упаковывать приложение (чарт) со всеми зависимостями, параметризировать конфиги и управлять жизненным циклом.
helm install my-app ./my-chart --values production-values.yaml - Kustomize: Декларативный инструмент для кастомизации конфигураций через оверлеи (база + патчи для dev/stage/prod). Интегрирован в
kubectl(kubectl apply -k ./overlays/prod/).