kubernetes python正在aws eks中缓冲它的stdout

vc6uscn9  于 2023-04-11  发布在  Kubernetes
关注(0)|答案(1)|浏览(117)

我在AWS eks(托管kubernetes服务)的pod容器中运行了一个python脚本。我的脚本如下:

from model import startRunner
import time
while 1:
    startRunner()
    time.sleep(3600)
    print("waited for 1 hour", flush=True)

我只在进程崩溃时获取日志。如果我不使用循环运行,我只在它崩溃或退出时获取日志。我的期望是在运行时刷新日志,而不是缓冲它。
我还在pod中添加了环境变量,如下所示(true是字符串,因为我还没有在kubernetes configmap的manifest中找到转换为boolean的方法):

PYTHONUNBUFFERED : true

此外,由于我正在使用conda运行脚本,因此我有以下命令来运行脚本:

CMD ["conda", "run", "-n", "pymc3_env", "python", "-u", "sqs-poll.py"]

在上面的命令中,我使用了-u来取消缓冲日志,但是,它仍然在缓冲。
感觉就像,我的伎俩.我是一个纽比在python和使用python 3.5或以上运行脚本.如果有人能帮助我解决这个问题,那将是惊人的.提前感谢您的任何建议.

wbgh16ku

wbgh16ku1#

尝试在脚本中转储PYTHONUNBUFFERED的值,使用以下命令

import os

print(os.environ["PYTHONUNBUFFERED"])

如果你的脚本错误地说“missing key”之类的话,那么你就没有正确地将这个值传递给你的pod。
下面是从我自己的部署中截取的,它也运行了一个python脚本:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    ...
  name: my-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app-deployment
  template:
    metadata:
      labels:
        app: my-app-deployment
    spec:
      imagePullSecrets:
        - name: gitlab-pull-secrets
      containers:
      - name: my-app
        image: {{ .Values.deployment.image }}
        imagePullPolicy: Always
        env:
        ...
        - name: PYTHONUNBUFFERED
          value: "1"
        ...

相关问题