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

Как развернуть Docker-образ в Kubernetes

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

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

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

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

Развертывание Docker-образа в Kubernetes: Полное руководство

Развертывание Docker-образа в Kubernetes — это фундаментальная операция, которая включает создание и управление Pod'ами (наименьшими развертываемыми единицами) через объекты более высокого уровня, такие как Deployments, Services и Ingress. Вот детальный процесс и лучшие практики.

1. Подготовка Docker-образа

Перед развертыванием убедитесь, что ваш Docker-образ доступен в реестре контейнеров (Docker Hub, Google Container Registry, Amazon ECR, частный реестр). Пример сборки и публикации:

# Сборка образа
docker build -t myapp:1.0.0 .

# Тегирование для реестра
docker tag myapp:1.0.0 myregistry.com/myapp:1.0.0

# Пуш в реестр (требуется аутентификация)
docker push myregistry.com/myapp:1.0.0

2. Создание манифеста развертывания (Deployment)

Deployment — основной объект для управления Pod'ами. Он обеспечивает обновления, откаты и масштабирование. Пример deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 3  # Количество Pod'ов
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myregistry.com/myapp:1.0.0  # Ваш Docker-образ
        ports:
        - containerPort: 8080  # Порт приложения
        env:
        - name: ENV_VAR
          value: "production"
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10

Ключевые аспекты:

  • image: Указывает Docker-образ из реестра.
  • replicas: Опредерует количество реплик Pod'ов для отказоустойчивости.
  • resources: Управляет запросами и лимитами CPU/памяти.
  • livenessProbe: Проверяет работоспособность контейнера.

3. Развертывание и управление

Примените манифест и управляйте развертыванием:

# Применение Deployment
kubectl apply -f deployment.yaml

# Проверка статуса
kubectl get deployments
kubectl get pods -l app=myapp

# Просмотр логов
kubectl logs -f deployment/myapp-deployment

# Масштабирование
kubectl scale deployment myapp-deployment --replicas=5

# Обновление образа (например, на версию 1.0.1)
kubectl set image deployment/myapp-deployment myapp-container=myregistry.com/myapp:1.0.1

4. Экспозиция сервиса

Чтобы сделать приложение доступным, создайте Service (ClusterIP для внутреннего доступа, NodePort/LoadBalancer для внешнего). Пример service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer  # Или ClusterIP/NodePort

Примените: kubectl apply -f service.yaml. Для внешнего доступа в облачных средах LoadBalancer автоматически создаст внешний IP.

5. Использование Ingress для маршрутизации

Для сложной маршрутизации HTTP/HTTPS используйте Ingress с контроллером (nginx, Traefik). Пример ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp-service
            port:
              number: 80

6. Лучшие практики и продвинутые сценарии

  • Секреты и конфигурации: Храните чувствительные данные в Secrets, а конфиги — в ConfigMaps. Не встраивайте их в образ.
  • Управление томами: Используйте PersistentVolumes для данных, переживающих перезапуск Pod'ов.
  • Helm: Для сложных приложений используйте Helm charts для управления манифестами как пакетами.
  • CI/CD: Интегрируйте развертывание в пайплайны (GitLab CI, GitHub Actions, ArgoCD).
  • Мониторинг: Настройте Prometheus и Grafana для сбора метрик, используйте EFK-стек для логов.

7. Пример полного workflow

# 1. Сборка и публикация образа
docker build -t myregistry.com/myapp:1.0.0 .
docker push myregistry.com/myapp:1.0.0

# 2. Развертывание в Kubernetes
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

# 3. Проверка
kubectl get all -l app=myapp

Развертывание Docker-образа в Kubernetes — это не просто kubectl run, а целостный процесс, требующий учета отказоустойчивости, безопасности, мониторинга и жизненного цикла приложения. Использование Deployments как основного инструмента, дополненное Services и Ingress, обеспечивает надежную и масштабируемую инфраструктуру. Для production-сред всегда добавляйте Probes, Resource Quotas и Network Policies.