У нас есть кластер Kubernetes с серверными службами, которые извлекают данные из внешней Hana и отправляют их в Kafka. Процесс импорта запускается при каждом запуске модуля и занимает около 90 минут. Из-за тесной связи с Hana мы не можем запускать несколько подов этих серверных служб. У меня есть ощущение, что это можно как-то улучшить. Но я не знаю как.
Каким может быть способ иметь несколько модулей для серверных служб, не загружая одни и те же данные три раза в Kafka?
Любые другие мысли об этой установке?
Обычно рекомендуется иметь контейнеры, выполняющие только одно действие.
Я бы рассмотрел следующее, если вы хотите запустить загрузку и отправку параллельно:
Каждый из этих контейнеров будет иметь свои собственные ресурсы и датчики готовности.
Если загрузка и отправка не могут выполняться параллельно, вы можете:
Каждый из этих контейнеров будет иметь свои собственные ресурсы и датчики готовности. Это будет иметь дополнительное преимущество: если что-то пойдет не так с отправкой данных, вам не нужно будет загружать все снова, и отправка данных будет повторяться столько раз, сколько вы хотите (в зависимости от конфигурации зонда готовности)
В 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, которую вы сможете масштабировать по горизонтали.