如何从一个容器访问另一个容器的 Kubernetes pod 内的 stdout 和 stderr

nas*_*rel 7 logging openshift fluentd kubernetes

我有一个带有两个容器的 Pod。

\n\n
apiVersion: v1\nkind: Pod\nmetadata:\n  name: test\nspec:\n  containers:\n  - name: my-container\n    image: google/my-container:v1\n  - name: third-party\n    image:  google/third-party:v1\n
Run Code Online (Sandbox Code Playgroud)\n\n

第一个容器是我的映像,第二个容器是第三方映像,我可以\xe2\x80\x99t 控制其标准输出/标准错误。
\n我需要 my-container 能够访问第三方容器中写入的日志。
\n在“my-container”内部,我想从“第三方”容器收集所有 stdout 和 stderr,添加一些元数据并用我的记录器写入它。

\n\n

我无法将特权容器与volumeMounts一起使用。

\n\n

如果我能做这样的事情那就太好了。

\n\n
 containers:\n  - name: my-container\n    image: google/my-container:v1\n    volumeMounts:\n    - name: varlog\n      mountPath: /var/log\n\n  - name: third-party\n    image:  google/third-party:v1 \n    stdout: /var/log/stdout\n    stderr: /var/log/stderr\n\n volumes:\n  - name: varlog\n    emptyDir: {}\n\n
Run Code Online (Sandbox Code Playgroud)\n

yyy*_*hir 0

由于 Pod 内的容器共享相同的持久层,因此您可以挂载共享卷以使两者都可以访问该数据。

出于您的特定目的,您需要将两个流 (stderrstdout) 记录到卷中的文件中。然后,您需要将它们从主容器导出到您在集群中运行的任何日志记录驱动程序。

不过,规范中没有具体说明将这些输出写入文件。

  • 我期待 stdout/stderr,我想我将使用 Pod 中容器之间共享进程命名空间的方法。在第三方容器的 /proc/PID/fd1 上使用 tail。https://kubernetes.io/docs/tasks/configure-pod-container/share-process-namespace/ (3认同)