gpt4 book ai didi

python - 如何在 kubernetes 中运行从另一个启动的 docker 镜像并传递参数

转载 作者:行者123 更新时间:2023-12-01 02:19:25 26 4
gpt4 key购买 nike

我有两个需要在 kubernetes 中运行的 dockerized 应用程序。

这是需要实现的场景。

Docker-1,是 Flask 应用程序。

Docker-2 是 python 脚本,将从 Docker-1 获取输入并执行,并且需要在 Docker-1 容器的共享卷中写入一些文件。

这是 Flask Web 应用程序代码。

from flask import Flask, request, Response, jsonify
app = Flask(__name__)

@app.route('/')
def root():
return "The API is working fine"

@app.route('/run-docker')
def run_docker_2():
args = "input_combo"
query = <sql query>
<initiate the docker run and pass params>
exit
#No return message need run as async

if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=8080, threaded=True)

Docker 文件

FROM ubuntu:latest
MAINTAINER Abhilash KK "abhilash.kk@searshc.com"
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential python-tk
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["/usr/bin/python"]
CMD ["app.py"]

需求.txt

flask

第二个 docker 的 Python 脚本。 start_docker.py

import sys

input_combo = sys.argv[1]
query = sys.argv[2]

def function_to_run(input_combination,query):
#starting the model final creating file

function_to_run(input_combo, query)

Docker 文件 2

FROM python

COPY . /script
WORKDIR /script

CMD ["python", "start_docker.py"]

请帮助我连接 docker 镜像。或者让我知道解决这个问题的任何其他方法。基本需求是向某个队列添加一条消息,该队列按照一定的时间间隔进行监听,并以先进先出的方式启动进程。

GCP 服务中启动异步作业的任何其他方法都将从客户端获取输入并创建一个可从网络应用程序 python 访问的文件。

最佳答案

首先,创建一个运行“Docker-1”应用程序的 Pod。然后Kubernetes python client使用“Docker-2”生成第二个 Pod。您可以在 Pod 之间共享卷,以便将数据返回到 Docker1。在我的代码示例中,我使用的是 host_path 卷,但您需要确保两个 pod 位于同一节点上。为了便于阅读,我添加了该代码。

apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: docker1
labels:
app: docker1
spec:
replicas: 1
selector:
matchLabels:
app: docker1
template:
metadata:
labels:
app: docker1
spec:
containers:
- name: docker1
image: abhilash/docker1
ports:
- containerPort: 8080
volumeMounts:
- mountPath: /shared
name: shared-volume
volumes:
- name: shared-volume
hostPath:
path: /shared

run_docker_2处理程序的代码:

from kubernetes import client, config

...

args = "input_combo"
config.load_incluster_config()
pod = client.V1Pod()
pod.metadata = client.V1ObjectMeta(name="docker2")
container = client.V1Container(name="docker2")
container.image = "abhilash/docker2"
container.args = [args]
volumeMount = client.V1VolumeMount(name="shared", mount_path="/shared")
container.volume_mounts = [volumeMount]
hostpath = client.V1HostPathVolumeSource(path = "/shared")
volume = client.V1Volume(name="shared")
volume.host_path = hostpath
spec = client.V1PodSpec(containers = [container])
spec.volumes = [volume]
pod.spec = spec
v1.create_namespaced_pod(namespace="default", body=pod)
return "OK"

读取返回结果的处理程序:

@app.route('/read-results')
def run_read():
with open("/shared/results.data") as file:
return file.read()

请注意,添加 watcher 可能会很有用。等待 pod 完成工作,然后进行一些清理(例如删除 pod)

关于python - 如何在 kubernetes 中运行从另一个启动的 docker 镜像并传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com