Многочисленные запросы, вызывающие Pod к Cra sh из-за OOM - разве это не работа балансировщика нагрузки? - PullRequest
0 голосов
/ 29 января 2020

У меня 2-3 модели машинного обучения, которые я пытаюсь разместить через Kubernetes. Сейчас я не пользуюсь моделями, но они критически важны и должны быть доступны при вызове.

Я предоставляю доступ к моделям через приложение flask и использую нагрузку. балансировщик для маршрутизации traffi c в приложение flask.

Обычно все работает нормально, поскольку запросы выполняются только с перерывами, но я пришел к выводу, что если несколько запросов выполняются одновременно, мой модуль вылетает из-за ООМ. Разве это не работа балансировщика нагрузки? Чтобы убедиться, что запросы направляются соответствующим образом? (в этом случае направить следующий запрос после завершения предыдущих?)

Ниже мое развертывание:

apiVersion: v1
kind: Service
metadata:
  name: flask-service
  labels:
    run: flask-service
spec:
  selector:
    app: flask
  ports:
  - protocol: "TCP"
    port: 5000
    targetPort: 5000
  type: LoadBalancer
---  
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask
spec:
  selector:
    matchLabels:
      app: flask  
  replicas: 1
  template:
    metadata:
      labels:
        app: flask
    spec:
      containers:
      - name: flask
        imagePullPolicy: Always
        image: gcr.io/XXX/flask:latest
        ports:
        - containerPort: 5000
        resources:
          limits:
            memory: 7000Mi
          requests:
            memory: 1000Mi

1 Ответ

1 голос
/ 29 января 2020

Разве это не работа балансировщика нагрузки? Чтобы убедиться, что запросы правильно маршрутизируются?

Да, вы правы. Но ...

реплик: 1

Вы используете только одну реплику, поэтому у балансировщика нагрузки нет параметров для маршрутизации на другие экземпляры вашего приложения. Дайте ему несколько экземпляров.

Я пришел к выводу, что если несколько запросов выполняются одновременно, мой модуль аварийно завершает работу из-за OOM

Звучит как ваше приложение имеет очень ограниченные ресурсы.

    resources:
      limits:
        memory: 7000Mi
      requests:
        memory: 1000Mi

Когда ваше приложение использует более 7000Mi, оно будет уничтожено OOM (также рассмотрите возможность увеличения значения запроса). Если вашему приложению нужно больше, вы можете выделить ему больше памяти (масштабировать по вертикали) или добавить больше экземпляров (масштабировать по горизонтали).

Horizontal Pod Autoscaler

Обычно все работает нормально, так как запросы выполняется только с перерывами

Рассмотрите возможность использования Горизонтальная автоподстройка стручка , это может увеличить ваше приложение до большего количества случаев, когда у вас больше запросов, и уменьшить при меньшем количестве запросов. Например, это может быть основано на использовании памяти или ЦП.

Использовать очередь

направить следующий запрос после завершения предыдущих?

Если вы хотите именно такое поведение, вам нужно использовать очередь , например, RabbitMQ или Kafka, для обработки ваших запросов по одному.

...