我有一个Kubernetes集群,在其中创建了一个运行Pod的部署。不幸的是,在运行它之后,pod不想自行终止,而是进入了重新启动/ CrashLoopBackOff周期的连续状态。
第一次部署时,该命令(在入口点上)正确运行,我希望它仅运行一次。
我正在使用Python K8s API以编程方式部署配置了入口点的docker映像。这是我的部署YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: kio
namespace: kmlflow
labels:
app: kio
name: kio
spec:
replicas: 1
selector:
matchLabels:
app: kio
name: kio
template:
metadata:
labels:
app: kio
name: kio
spec:
containers:
- name: kio-ingester
image: MY_IMAGE
command: ["/opt/bin/kio"]
args: ["some", "args"]
imagePullPolicy: Always
restart: Never
backofflimit: 0
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
来自kubectl pod的输出是:
Name: ingest-160-779874b676-8pgv5
Namespace: kmlflow
Priority: 0
PriorityClassName: <none>
Node: 02-w540-02.glebe.kinetica.com/172.30.255.205
Start Time: Thu, 11 Oct 2018 13:31:20 -0400
Labels: app=kio
name=kio
pod-template-hash=3354306232
Annotations: …Run Code Online (Sandbox Code Playgroud) 我已经仔细阅读过Kubernetes文档,但是仍然无法通过在K8作业启动的pod中运行的应用程序与主机文件系统上的文件进行交互。即使使用最简单的实用程序也会发生这种情况,因此我提供了一个简化的yaml配置示例。此处引用的本地文件'hello.txt'确实存在于主机上的/ tmp中(即,在Kubernetes环境之外),我什至chmod 777也已将其保存。我还在主机文件系统中尝试过/ tmp以外的其他位置。
Kubernetes作业启动的Pod以Status = Error终止并生成日志 ls: /testing/hello.txt: No such file or directory
因为我最终希望以编程方式将其用作更复杂的工作流程的一部分,所以实际上确实需要将其作为工作而不是部署。我希望那是可能的。我正在使用kubectl启动的仅用于测试的当前配置文件是:
apiVersion: batch/v1
kind: Job
metadata:
name: kio
namespace: kmlflow
spec:
# ttlSecondsAfterFinished: 5
template:
spec:
containers:
- name: kio-ingester
image: busybox
volumeMounts:
- name: test-volume
mountPath: /testing
imagePullPolicy: IfNotPresent
command: ["ls"]
args: ["-l", "/testing/hello.txt"]
volumes:
- name: test-volume
hostPath:
# directory location on host
path: /tmp
# this field is optional
# type: Directory
restartPolicy: Never
backoffLimit: 4
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的协助。
我有 tf.example 形式的数据,并试图以预测形式(使用 gRPC)向保存的模型发出请求。我无法确定实现此目的的方法调用。
我从众所周知的汽车定价 DNN 回归模型(https://github.com/tensorflow/models/blob/master/samples/cookbook/regression/dnn_regression.py)开始,我已经通过 TF Serving 导出并安装了该模型码头集装箱
import grpc
import numpy as np
import tensorflow as tf
from tensorflow_serving.apis import predict_pb2, prediction_service_pb2_grpc
stub = prediction_service_pb2_grpc.PredictionServiceStub(grpc.insecure_channel("localhost:8500"))
tf_ex = tf.train.Example(
features=tf.train.Features(
feature={
'curb-weight': tf.train.Feature(float_list=tf.train.FloatList(value=[5.1])),
'highway-mpg': tf.train.Feature(float_list=tf.train.FloatList(value=[3.3])),
'body-style': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b"wagon"])),
'make': tf.train.Feature(bytes_list=tf.train.BytesList(value=[b"Honda"])),
}
)
)
request = predict_pb2.PredictRequest()
request.model_spec.name = "regressor_test"
# Tried this:
request.inputs['inputs'].CopyFrom(tf_ex)
# Also tried this:
request.inputs['inputs'].CopyFrom(tf.contrib.util.make_tensor_proto(tf_ex))
# This doesn't work either:
request.input.example_list.examples.extend(tf_ex)
# If it did work, I would like to inference on it like …Run Code Online (Sandbox Code Playgroud) 我试图让 Uvicorn 在以编程方式启动时自动重新启动检测到的文件更改,就像从命令行--debug启动时一样。以下语句位于我的 api 源代码文件的底部,虽然 Uvicorn 启动并运行良好,但它不会以重新加载模式启动。我尝试将调试参数设置为各种不同的值:uvicorn.run(debug='true'、'True'、'yes' 和 True(python 布尔值),但似乎没有任何效果。
uvicorn.run(app,
host=run_config['api_host'],
port=run_config['api_port'],
log_level=run_config['log_level'],
debug='true')
Run Code Online (Sandbox Code Playgroud)
编辑:参考我对@howderek 的回答的评论:我尝试了建议代码的修改版本。当服务器成功启动时,下面的代码不会打开重新加载器:
import uvicorn
from uvicorn.reloaders.statreload import StatReload
reloader = StatReload('debug')
reloader.run(uvicorn.run(app, host='localhost', port=9187, debug='true'))
Run Code Online (Sandbox Code Playgroud)