我有一个运行在coreos上的kubernetes集群。我希望在一个容器中运行journal2gelf https://github.com/systemd/journal2gelf,我称之为日志记录。(我在这个pod中也有一个fluentd容器,它工作得很好,我强烈推荐它用于其他地方的流日志)。是否有可能配置一个pod以允许以下内容:
journalctl -o json -f | docker run <my journal2gelf image> -d -p $GRAYLOG_PORT
但在复制控制器配置中的containers:
键内?一般来说,kubernetes允许管道到容器吗?
这将允许你发送stdin到一个容器:
kubectl exec -i POD_NAME COMMAND
或
kubectl attach -i POD_NAME
但是没有一个好的方法来定义发送到pod中的所有容器的stdin,或者由复制控制器生成的所有容器
首先,不,Kubernetes目前没有任何为容器指定stdin的机制。传递信息的主要方式是环境变量、秘密和卷,这些似乎可以处理大多数用例。
同样,这个请求不仅仅是为了能够将信息传递给stdin,它还为了能够在主机上运行任意命令并将该信息输入管道,这将带来一些非常严重的安全问题。
在这种特殊情况下,您可以通过将节点上journalctl使用的目录作为hostDir
卷挂载到容器中,然后将journalctl命令作为进入点运行到容器中,从而获得所需的内容。当然,这里可能会有更困难的问题,需要您将其作为特权容器运行。
如果你想做你在问题中指定的事情,你最好直接在每个节点上设置进程,而不是通过Kubernetes。