如何将标准输入通过管道导入 Kuberentes 中 pod 中的容器?

Chr*_*ski 6 pipe journal kubernetes

我有一个在 coreos 上运行的 kubernetes 集群。我希望在我称为日志记录的 pod 中的容器中运行 journal2gelf https://github.com/systemd/journal2gelf。(我在这个 pod 中还有一个 fluentd 容器,效果很好,我强烈推荐它用于在其他地方流式传输日志)。是否可以配置一个 pod 以允许以下内容:

journalctl -o json -f | docker run <my journal2gelf image> -d -p $GRAYLOG_PORT
Run Code Online (Sandbox Code Playgroud)

但是在containers:复制控制器配置中的密钥内?总的来说,kubernetes 可以允许管道连接到容器吗?

Jor*_*itt 6

这将让您将 stdin 发送到容器:

kubectl exec -i POD_NAME COMMAND

或者

kubectl attach -i POD_NAME

但是没有一个很好的方法来定义发送到 pod 中所有容器或由复制控制器产生的所有容器的 stdin


Ale*_*son 5

首先,不,Kubernetes 目前没有任何机制来为容器指定标准输入。传递信息的主要方式是环境变量、秘密和卷,这些似乎可以处理大多数用例。

此外,这个请求不仅仅是为了能够将信息传递给标准输入,而是为了能够在主机上运行任意命令并将该信息通过管道输入,这会带来一些非常严重的安全问题。

在这种特殊情况下,您可以通过将 journalctl 使用的目录作为hostDir卷安装到容器中,然后将 journalctl 命令作为容器的入口点运行在您的节点上,从而获得您想要的内容。当然,这里可能存在更困难的问题,需要您将其作为特权容器运行。

如果您想完全按照您在问题中指定的内容进行操作,最好直接在每个节点上设置该进程,而不是通过 Kubernetes。