登录Kubernetes Pod没有显示

Her*_*rch 8 logging kubernetes

我让Kubernetes在pod中设置并运行grpc服务.我成功地在服务端点击了一个端点,其中有一个print()语句,但我在日志文件中看不到任何日志.我之前在Kubernetes中运行(cron)作业时看到过这种情况,日志只在作业完成后出现(而不是在作业运行时).有没有办法让kubernetes立即写入日志文件?我可以放置的任何设置(群集级别还是仅用于pod)?在此先感谢您的帮助!

Her*_*rch 14

找到了根本原因.具体来说,发现它在Python应用程序在docker中运行分离时不会打印任何内容.解决方案是设置以下环境变量:PYTHONUNBUFFERED = 0.这不是print语句没有显示,而是print语句被缓冲了.执行上述操作将解决问题.

  • 作为旁注,您还可以使用'-u'标志启动python以获得无缓冲输出.例如```/ bin/python3 -u/path/to/script.py``` (3认同)
  • 虽然该解决方案有效,但我更喜欢值为“1”,因为任何非空字符串都将启用“PYTHONUNBUFFERED”选项。使用值“0”看起来您想关闭该选项。 (3认同)
  • 万分感谢!同样的事情发生在我的C程序中(用`fflush(stdout)解决;`,感谢/sf/ask/120140751/除非-A-换行符是-内式格式〜应变) (2认同)

小智 5

这是K8S部署yaml的示例,因此您可以从上述答案中复制粘贴解决方案:

root@k8s:~/python_docker$ cat deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa
spec:
  selector:
    matchLabels:
      app: hpa
  template:
    metadata:
      labels:
        app: hpa
    spec:
      containers:
      - name: hpa
        image: my-hpa/py
        env:
        - name: PYTHONUNBUFFERED
          value: "0"
        resources:
          requests:
            cpu: 100m
            memory: 200Mi
Run Code Online (Sandbox Code Playgroud)