【问题标题】:Kubernetes: Redirecting pod STDOUT, STDERR and pod termination log to a PVC fileKubernetes:将 pod STDOUT、STDERR 和 pod 终止日志重定向到 PVC 文件
【发布时间】: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


【解决方案1】:

tee 命令读取标准输入并将其写入标准输出和一个或多个文件##

  • 您的cmd 应修改为 ,以便demo_stdout.py 的输出将记录到/usr/share/test.logstdin and stdout

python demo_stdout.py | tee /usr/share/test.log

【讨论】:

    猜你喜欢
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多