如何使用 Kubernetes 从 pod 定义中显示带有 /dev/console 的容器?

How to manifest a container with /dev/console from a pod definition with Kubernetes?

我们在容器中使用 systemd 来管理容器中的进程 运行。 我们在容器中配置 journald,以便它将所有日志发送到 /dev/console。 为了在容器中包含 /dev/console,我们必须在部署容器时使用 Docker 的“-t”选项。

请问,Kubernetes 的等效方式是什么。我们可以在 pod 清单中的何处声明我们需要容器中的 /dev/console? 我知道,使用 kubectl 是可能的(使用“--tty”或“-t”)。但是我们不想用 kubectl 启动容器。

kubectl --tty 选项仅适用于 kubectl exec --tty,它适用于 运行 已部署在 pod 中的容器内的进程。因此它不会帮助您部署 pods 并定义 /dev/console

据我所知,目前的 Kubernetes 无法使 pods 与定义了 /dev/console 的容器一起启动。

我想更进一步地说,这些容器的定义方式(多个进程由 systemd 管理并由 journald 记录)超出了 Kubernetes 的通常用例。 Kubernetes 的价值在于容器是简单的、单独的进程,运行 作为守护进程。 Kubernetes 管理每个 pod 多个不同容器的启动,and/or 多个 pods 作为副本,包括监控、日志记录、重启等。每个容器内有一个单独的 launch/init 和日志方案不会不适合通常的 Kubernetes 用例。

我们在 kubernetes v1.1 中支持 TTY 容器,但不支持没有输入的 tty。如果你想看到那个,我认为 GitHub issue 是合适的。

我同意 Spencer 的观点,运行 容器中的 systemd 不是 "best practice",但这样做有充分的理由,其中最重要的是 "that's what we know how to do"。人们对容器的使用会随着时间的推移而发展。