python - 在本地运行的 Python 代码在 Kubernetes 集群上不起作用
问题描述
我正在一个带有 Python 烧瓶的 Web 服务器上工作,并将数据传递给 post 方法。
假设您的 Python 烧瓶 Web 服务器是 A,B 是一个 Python 文件,它将数据作为帖子发送到服务器 A。
我计划通过将 A 和 pod 部署为作业来创建一个 pod。
在本地计算机上测试时,它运行没有问题,并且仅将 ip 地址替换为 Kubernetes 服务名称(以使用 dns 服务)。
但问题是 A 500 错误。
我不知道出了什么问题...请帮助我。
class Influx_Request3(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('carlist', type=str)
parser.add_argument('cardataframe', type=str)
parser.add_argument('cardict', type=str)
args = parser.parse_args()
print(args.carlist)
print("args")
_carlist = args['carlist']
_cardataframe = args['cardataframe']
_cardict = args['cardict']
print(_carlist)
print("_carlist")
Analysis_Extraction_post(2019, 10, 14, 1, _carlist, _cardataframe, _cardict)
except Exception as e:
return {'error':str(e)}
这是从 Web 服务器接收数据的部分。
尝试打印 '_carlist' 和 'args' 打印将不会打印。
如果你尝试 kubectl logs pod(A)
10.244.1.46--[10 / Jan / 2020 08:17:50]" POST / extraction3 HTTP / 1.1 "500-
只有这样的输出
NAME READY STATUS RESTARTS AGE
pod/analysis-extraction-6477dcc645-vcfdw 1/1 Running 0 10m
pod/analysis-influxinput-588d458f87-j48ls 1/1 Running 0 3h2m
pod/analysis-mongo-7p6sd 0/1 Completed 0 10m
pod/busybox 1/1 Running 27 27h
pod/influx-695b89d797-h2fck 1/1 Running 0 3h
pod/webserver-589dd46884-mzq5d 1/1 Running 0 3h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/extraction-svc ClusterIP 10.96.40.221 <none> 3000/TCP 3h1m
service/influxinput-svc ClusterIP 10.96.153.210 <none> 5000/TCP 3h2m
service/influxservice ClusterIP 10.96.212.119 <none> 8086/TCP 3h
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h3m
service/webserverservice ClusterIP 10.96.33.170 <none> 3000/TCP 3h
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/analysis-extraction 1/1 1 1 10m
deployment.apps/analysis-influxinput 1/1 1 1 3h2m
deployment.apps/influx 1/1 1 1 3h
deployment.apps/webserver 1/1 1 1 3h
NAME DESIRED CURRENT READY AGE
replicaset.apps/analysis-extraction-6477dcc645 1 1 1 10m
replicaset.apps/analysis-influxinput-588d458f87 1 1 1 3h2m
replicaset.apps/influx-695b89d797 1 1 1 3h
replicaset.apps/webserver-589dd46884 1 1 1 3h
NAME COMPLETIONS DURATION AGE
job.batch/analysis-mongo 1/1 2m24s 10m
您请求的代码。
carlist = json.dumps(carList, cls=NumpyEncoder)
cardataframe = df_service.to_json()
cardict = json.dumps(col_dict)
data = {'carlist':carlist, 'cardataframe':cardataframe, 'cardict':cardict}
res = requests.post('http://extraction-svc:3000/extraction3', data=data)
print("request success")
https://www.programcreek.com/python/example/104294/flask_restful.reqparse.RequestParser
这是我引用的网站。
见第三个例子。
再试一次并返回响应码 200。但仍然没有输出。
10.244.1.53 - - [13/Jan/2020 02:31:46] "POST /extraction3 HTTP/1.1" 200 -
kubectl 描述服务提取-svc
Name: extraction-svc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"extraction-svc","namespace":"default"},"spec":{"ports":[{"port":3...
Selector: app=analysis-extraction
Type: ClusterIP
IP: 10.96.8.131
Port: <unset> 3000/TCP
TargetPort: 3000/TCP
Endpoints: 10.244.1.63:3000
Session Affinity: None
Events: <none>
解决方案
在 python 代码中将 flush 放入打印输出中的效果令人惊讶。不知道原理是什么。
print ("", flush = True)
推荐阅读
- php - php debug_backtrace 在 CodeIgniter4 中找不到当前文件
- cmake - 如何使用组件创建 cmake 项目
- javascript - Javascript内存分配:堆和栈
- c++ - 为什么访问已删除的指针不会使程序崩溃?
- typescript - 如何检查两个属性是否同时为真或假
- javascript - 当页面上有很多项目时,Vuejs 似乎与 v-model 斗争
- javascript - 选择选项值未达到 if 语句
- python - 使用 web3.py 通过块哈希获取 Avalanche 块数据
- sql - 格式化 SQL 查询的输出
- google-apps-script - 从 Google AppScript 调用经过身份验证的云函数