我正在运行一个python脚本,它只有一个print语句。
print("Completed")
Python代码将使用Dockerfile和Deployment YAML文件部署在kubernetes上。
Dockerfile:
FROM python:3.9
WORKDIR /app
COPY Test.py /app/Test.py
RUN python3 -m pip install --upgrade pip
ENTRYPOINT ["python"]
CMD ["Test.py"]
部署YAML文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-01
spec:
replicas: 1
selector:
matchLabels:
bb: web
template:
metadata:
labels:
bb: web
spec:
containers:
- name: test-01
image: testrepo/testingpy:latest
pod将被创建,将成功运行,并显示终止的原因是因为它已完成,退出代码为0(在浏览pod的描述时)。
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: Completed
Exit Code: 0
几秒钟后,pod将进入CrashLoopBackOff警告状态,原因为“Back-off restarting failed container”。pod的日志仅在运行代码时出现任何打印语句或错误时才提供信息。
kubectl logs etl-patient-c5d44fcc-scc9s --all-containers
Completed
kubernetes pod没有理由进入CrashLoopBackOff状态。pod必须执行脚本并保持完成状态。
尝试的更改。
1.尝试使用restartPolicy操作YAML文件:OnFailure,但在部署时引发错误。
1.尝试了不同的Python版本,也没有改变结果。
P.S YAML文件的缩进不可见,但YAML文件的缩进是正确的。
1条答案
按热度按时间owfi6suc1#
K8的
Deployment
、StatefulSet
和DaemonSet
资源用于处理长时间运行的应用程序(例如后端、前端、微服务、Web服务器等),这就是为什么它只支持restartPolicy
和Always
。在您的例子中,Pod内运行的容器在运行print("Completed")
语句后结束,而不是连续运行for。你有三个选择
1.使用
Job
类型资源,而不是Deployment
。K8s作业仅运行1次,即完成后完成。1.使用简单的
Pod
资源,将restartPolicy
设置为Never
1.添加一些额外的代码,以保持Python脚本在运行状态,如sleep,while循环或HTTP服务器(Flask,Django等)
查看这些链接以了解更多详情: