用于读取kubernetes中超过1个pod中的文件和请求的Python



我正在Python中开发一个应用程序,该应用程序将通过请求通过一批文件进行查询。

def get_func(line):
print (line)
def main():
file_read = open('file.txt', 'r')
for line in file_read:
get_func(line)

此应用程序将托管在Kubernetes上。但是,如果我在应用程序中放入1个以上的pod,对于同一个文件,它将多次运行同一个查询,重复这些行。我想在多个pod上运行这个应用程序,但我想让每个pod在文件中运行不同的行,而不会重复协商。有人有解决方案吗?

Edit:正如评论中所说,这不是一个生产级解决方案,只是一种满足您确切需求的智能方式。

你可以把你的应用程序作为一个状态集——每个pod都会得到一个从0到你的副本编号-1的数字。

因此,如果你要设置3个副本,你就会有吊舱:

files-reader-0files-reader-1files-reader-2

然后你可以把2 env-vars:传给你的吊舱

  1. 使用该示例的pod名称:https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/pods/inject/dapi-envars-pod.yaml
  2. 可以在部署文件中硬编码的复制副本计数

然后在代码中读取这些env-var,并使用公式:

FileLines / replicaCount * podNameSuffix(which is the pod number)+1

例如,对于一个有1000行和10个pod的文件,第三个pod应该读取哪些行?简单:

1000 / 10 * 31000 / 10 * 3-1

您可以使用DaemonSet。

DaemonSet允许您在每个集群节点上运行相同的pod。

https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/

最新更新