【问题标题】:How can one pipe stdin into a container in a pod in Kuberentes?如何将标准输入通过管道传输到 Kubernetes 的 pod 中的容器中?
【发布时间】:2015-09-11 21:55:56
【问题描述】:

我有一个在 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

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

【问题讨论】:

    标签: pipe kubernetes journal


    【解决方案1】:

    这将让您将标准输入发送到容器:

    kubectl exec -i POD_NAME COMMAND

    或者

    kubectl attach -i POD_NAME

    但是没有一个好的方法来定义标准输入发送到一个 pod 中的所有容器,或者复制控制器产生的所有容器

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多