Ответ
Стандартный процесс деплоя приложения в Kubernetes включает создание образов и применение манифестов. Вот как я это делаю:
-
Сборка и публикация образа: Сначала приложение упаковывается в Docker-образ и отправляется в registry (например, Docker Hub, GitLab Container Registry, ECR).
docker build -t myregistry.com/myapp:v1.0 . docker push myregistry.com/myapp:v1.0 -
Создание основных манифестов: Основные ресурсы — это Deployment (управление подами) и Service (доступ к ним).
deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myregistry.com/myapp:v1.0 ports: - containerPort: 8080 resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m" livenessProbe: httpGet: path: /health port: 8080service.yaml:
apiVersion: v1 kind: Service metadata: name: myapp-service spec: selector: app: myapp ports: - port: 80 targetPort: 8080 type: ClusterIP # Или LoadBalancer/NodePort для внешнего доступа -
Применение конфигурации:
kubectl apply -f deployment.yaml -f service.yaml -
Проверка:
kubectl get pods,svc,deploy kubectl logs -f deployment/myapp-deployment
Для production-среды я всегда добавляю:
- ConfigMaps/Secrets для конфигурации.
- Horizontal Pod Autoscaler (HPA) для автоматического масштабирования.
- Ingress для маршрутизации HTTP/HTTPS трафика.
- Использую Helm или Kustomize для управления сложными конфигурациями и разными окружениями (dev/staging/prod).