除了与 Hana 的紧密耦合之外,Kubernetes pods 还能扩展吗?
Can Kubernetes pods be scaled besides tight coupling to Hana?
我们有一个带有后端服务的 Kubernetes 集群,可以从外部 Hana 提取数据并将它们发送到 Kafka。导入过程在 pod 启动时开始,大约需要 90 分钟。由于与 Hana 的紧密耦合,我们不能 运行 多个 Pods 这些后端服务。我觉得这可以以某种方式改进。但是我不知道怎么办。
在不将相同数据三次导入 Kafka 的情况下,如何为后端服务提供多个 pods?
关于此设置还有其他想法吗?
让容器只执行一项操作通常是个好主意。
如果您想 运行 并行下载和推送,我会考虑以下内容:
- 一个 运行ning 容器,用于下载数据。
- 一个推送数据的运行ning容器。
- 两者共享数据量。
这些容器中的每一个都有自己的资源和就绪探测器。
如果下载和推送不能并行完成,您可以:
- 用于下载数据的初始化容器
- 一个 运行ning 容器来推送数据。
- 两者共享数据量。
这些容器中的每一个都有自己的资源和就绪探测器。
这将有一个额外的好处,如果数据推送出现问题,那么您不需要再次下载所有内容,并且数据推送将根据需要重试多次(取决于就绪探针配置)
K8ns中有init containers的概念,请看文档
简而言之,如果成功将导入过程作为单独的例程移动到 init 容器,则实际服务可以在多个实例中启动。
下面给出了一个示例 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 您可以水平扩展。
我们有一个带有后端服务的 Kubernetes 集群,可以从外部 Hana 提取数据并将它们发送到 Kafka。导入过程在 pod 启动时开始,大约需要 90 分钟。由于与 Hana 的紧密耦合,我们不能 运行 多个 Pods 这些后端服务。我觉得这可以以某种方式改进。但是我不知道怎么办。
在不将相同数据三次导入 Kafka 的情况下,如何为后端服务提供多个 pods?
关于此设置还有其他想法吗?
让容器只执行一项操作通常是个好主意。
如果您想 运行 并行下载和推送,我会考虑以下内容:
- 一个 运行ning 容器,用于下载数据。
- 一个推送数据的运行ning容器。
- 两者共享数据量。
这些容器中的每一个都有自己的资源和就绪探测器。
如果下载和推送不能并行完成,您可以:
- 用于下载数据的初始化容器
- 一个 运行ning 容器来推送数据。
- 两者共享数据量。
这些容器中的每一个都有自己的资源和就绪探测器。 这将有一个额外的好处,如果数据推送出现问题,那么您不需要再次下载所有内容,并且数据推送将根据需要重试多次(取决于就绪探针配置)
K8ns中有init containers的概念,请看文档
简而言之,如果成功将导入过程作为单独的例程移动到 init 容器,则实际服务可以在多个实例中启动。
下面给出了一个示例 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 您可以水平扩展。