【问题标题】:skaffold dev: no output to terminal (or delayed output)skaffold dev:没有输出到终端(或延迟输出)
【发布时间】:2022-01-10 17:54:15
【问题描述】:

上下文

我正在努力学习脚手架。我已经安装了 skaffold、kubectl 和 minikube。我创建了一个打印“Hello, World!”的 Python 脚本。在一个循环中。我创建了一个简单的 Dockerfile 和 Kubernetes 清单。我使用skaffold init 生成了一个 skaffold.yaml。

问题

在使用 minikube start 启动 minikube 并运行 skaffold dev 后,我的应用程序已按预期构建并部署到 minikube。然而,没有进一步的输出:“你好,世界!”不是每一秒都在终端中打印,因为它应该有。

也就是说,我注意到如果我等了 5 分钟,就会出现一堆“Hello,World!”。会一下子出现。然后 5 分钟没有任何反应。然后是更多的“Hello,Worlds!”,一次。简而言之,它似乎每 5 分钟左右跟踪一次日志,而不是实时进行。

我以为问题与我的 Linux 计算机有关,但我随后在我的 Mac 上执行完全相同的步骤,并且发生了几乎相同的事情:唯一的区别是它每 4 分钟左右输出一次,而不是每 5 分钟输出一次.

问题

你能帮我弄清楚这里发生了什么吗?我查看了文档,据我所知,预期的默认行为应该是实时输出到终端。

不管怎样,将 minikube 的 CPU 和 RAM 加倍并没有改变。但是尝试skaffold quickstart(涉及一个类似的应用程序但用 Go 编写)效果很好:输出没有延迟。

文件

这里是重现上述步骤的所有应用和配置文件。

app.py

import time

start = time.time()

while True:
    print("Hello, World!")
    now = time.time()
    print(f"Time elapsed: {round(now - start)}")
    time.sleep(1)

Dockerfile

FROM python:3.9-slim
COPY . .
CMD ["python", "app.py"]

k8s.yaml

apiVersion: v1
kind: Pod
metadata:
  name: hello
spec:
  containers:
    - name: hello
      image: hello

skaffold.yaml

apiVersion: skaffold/v2beta26
kind: Config
metadata:
  name: hello-app
build:
  artifacts:
  - image: hello
    docker:
      dockerfile: Dockerfile
deploy:
  kubectl:
    manifests:
    - k8s.yaml

谢谢。

【问题讨论】:

  • 你试过--tail吗? Log tailing
  • skaffold dev 默认情况下应该尾部。但我确实尝试添加标志,我也尝试了skaffold run --tail。问题仍然存在:它每 4/5 分钟只拖尾一次,而不是实时拖尾。

标签: python stdout kubectl minikube skaffold


【解决方案1】:

更改您的 app.py:

import time

start = time.time()

while True:
    print("Hello, World!\n")
    now = time.time()
    print(f"Time elapsed: {round(now - start)}\n")
    time.sleep(1)

在打印数据时添加 \n 应该会有所帮助。虽然我不确定引擎盖背后的原因是什么,但可能是一些缓冲(?)。

【讨论】:

    【解决方案2】:

    问题不在于 Skaffold 或 Minikube。 Python 正在缓冲输出,并且只有在缓冲区已满时才将其写入标准输出。

    有许多ways to avoid this,包括使用-u 标志或flush 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 2021-02-27
      相关资源
      最近更新 更多