我们有一个kubernetes集群,其后端服务从外部hana提取数据并将其发送到kafka。导入过程在pod启动时开始,大约需要90分钟。由于与hana的紧密耦合,我们无法运行这些后端服务的多个pod。我觉得这是可以改进的。但我不知道怎么做。有什么办法可以为后端服务提供多个pod,而不必将相同的数据三次拉入kafka?关于这个设置还有其他想法吗?
p8h8hvxi1#
通常,最好让容器只执行一个操作。如果您想并行运行下载和推送,我会考虑以下几点:下载数据的运行容器。推送数据的正在运行的容器。两个数据的共享卷。每个容器都有自己的资源和准备就绪探测器。如果下载和推送不能并行进行,您可以:用于下载数据的init容器用于推送数据的正在运行的容器。两个数据的共享卷。每个容器都有自己的资源和准备就绪探测器。这将有一个额外的优势,即如果数据推送出现问题,则不需要再次下载所有内容,并且数据推送将根据需要重试多次(取决于就绪探测配置)
zbdgwd5y2#
k8ns中有init容器的概念,请仔细阅读文档。在gist中,如果导入过程作为一个单独的例程移动到init container,那么实际服务可以在多个示例中启动。下面给出了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,您可以水平扩展它。
2条答案
按热度按时间p8h8hvxi1#
通常,最好让容器只执行一个操作。
如果您想并行运行下载和推送,我会考虑以下几点:
下载数据的运行容器。
推送数据的正在运行的容器。
两个数据的共享卷。
每个容器都有自己的资源和准备就绪探测器。
如果下载和推送不能并行进行,您可以:
用于下载数据的init容器
用于推送数据的正在运行的容器。
两个数据的共享卷。
每个容器都有自己的资源和准备就绪探测器。这将有一个额外的优势,即如果数据推送出现问题,则不需要再次下载所有内容,并且数据推送将根据需要重试多次(取决于就绪探测配置)
zbdgwd5y2#
k8ns中有init容器的概念,请仔细阅读文档。
在gist中,如果导入过程作为一个单独的例程移动到init container,那么实际服务可以在多个示例中启动。
下面给出了pod.yml的一个示例—它只是一个指示性示例,可以给您提供一些想法。
最后,您必须将导入数据的功能分解为一个单独的函数post,您可以水平扩展它。