Можно ли масштабировать модули Kubernetes помимо тесной связи с Hana?

У нас есть кластер Kubernetes с серверными службами, которые извлекают данные из внешней Hana и отправляют их в Kafka. Процесс импорта запускается при каждом запуске модуля и занимает около 90 минут. Из-за тесной связи с Hana мы не можем запускать несколько подов этих серверных служб. У меня есть ощущение, что это можно как-то улучшить. Но я не знаю как.

Каким может быть способ иметь несколько модулей для серверных служб, не загружая одни и те же данные три раза в Kafka?

Любые другие мысли об этой установке?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обычно рекомендуется иметь контейнеры, выполняющие только одно действие.

Я бы рассмотрел следующее, если вы хотите запустить загрузку и отправку параллельно:

  1. Работающий контейнер, который загружает данные.
  2. Работающий контейнер, который отправляет данные.
  3. Общий объем между двумя для данных.

Каждый из этих контейнеров будет иметь свои собственные ресурсы и датчики готовности.

Если загрузка и отправка не могут выполняться параллельно, вы можете:

  1. Контейнер инициализации для загрузки данных
  2. Работающий контейнер для передачи данных.
  3. Общий объем между двумя для данных.

Каждый из этих контейнеров будет иметь свои собственные ресурсы и датчики готовности. Это будет иметь дополнительное преимущество: если что-то пойдет не так с отправкой данных, вам не нужно будет загружать все снова, и отправка данных будет повторяться столько раз, сколько вы хотите (в зависимости от конфигурации зонда готовности)

В K8ns есть концепция инициализирующих контейнеров, пожалуйста, ознакомьтесь с документацией.

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

Пример pod.yml приведен ниже - это просто примерный пример, чтобы дать вам представление.

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
  app: myapp
spec:
   containers:
     - name: myapp-container
     image: busybox:1.28
     command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
     - name: init-myservice
     image: busybox:1.28
     command: ['sh', '-c', "until nslookup myservice.$(cat 
   /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; 
    do echo waiting for myservice; sleep 2; done"]
    - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat 
  /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; 
  do echo waiting for mydb; sleep 2; done"]

По его окончании вам придется разбить функционал импорта данных на отдельную функцию — post, которую вы сможете масштабировать по горизонтали.

Другие вопросы по теме