【发布时间】:2022-03-20 00:15:25
【问题描述】:
我正在尝试将 pod 的 STDOUT 和 STDERR 写入 PVC 挂载位置的文件中。
以下是我部署的模板内容:
"template": {
"metadata": {
"name": "python-stdout-app",
"creationTimestamp": null,
"labels": {
"k8s-app": "python-stdout-app"
}
},
"spec": {
"volumes": [
{
"name": "task-pv-volume",
"persistentVolumeClaim": {
"claimName": "task-pv-claim"
}
}
],
"containers": [
{
"name": "python-stdout-app",
"image": "trideep/demo-stdout-app",
"resources": {},
"volumeMounts": [
{
"name": "task-pv-volume",
"mountPath": "/usr/share"
}
],
"terminationMessagePath": "/usr/share/1fed8c03-bc30-4889-952e-46f4c19b6ac1.log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always",
"securityContext": {
"privileged": false
}
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {},
"schedulerName": "default-scheduler"
}
}
我可以在 pod 内看到正在写入的文件。但在挂载的主机位置上看不到输出。
下面是执行命令
python demo_stdout.py >> /usr/share/1fed8c03-bc30-4889-952e-46f4c19b6ac1.log 2>&1
我做的一件事是输出文件,“terminationMessagePath”与我希望 pod 终止足迹和 stdout/stderr 在同一个文件中相同。
Dockerfile如下:
FROM python:2.7.15-alpine3.9
WORKDIR /usr/src/app
COPY . .
CMD ["sh", "-c", "tail -f /dev/null"]
尝试了以下方法:
python demo_stdout.py >> /usr/share/test.log 2>&1
以上内容在 PVC 中生成日志。但需要在同一个文件中获取 pod 终止日志。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
拜托,你能展示你的 dockerfile 吗?
-
我已经添加了dockerfile,请看一下。
-
我认为你需要在你的 CMD 中放入你的 python 应用程序。
-
-
就是这个思路,容器需要在应用程序执行完毕后终止,如果你想继续运行应用程序你需要在应用程序代码中管理这个,执行这个 CMD ["sh ", "-c", "tail -f /dev/null"] 你只是在容器内运行tail命令
标签: docker kubernetes kubernetes-pvc