gpt4 book ai didi

Kubernetes - 如何读取写入 pod 中的文件而不是 stdout/stderr 的日志?

转载 作者:行者123 更新时间:2023-12-04 02:06:00 25 4
gpt4 key购买 nike

我有一个状态为 CrashLoopBackOff 的 pods ,我从 kubectl logs <pod-name> -p 看到的日志仅展示部分图片。在其他文件中可以找到其他日志(例如 /var/log/something/something.log )。

由于此 pod 已崩溃,我无法 kubectl exec进入 shell 并查看文件。

如何查看不再运行的容器生成的日志文件?

更具体地说,我正在查找 $HOME/logs/es.log 下的日志文件。 (在失败的容器中)

最佳答案

我对这个看似常见的问题没有找到解决方案感到非常沮丧,因此我构建了一个 docker 镜像,它跟踪日志文件并将它们发送到 stdout,用作 sidecar 容器。

这是我所做的:

  • 我添加了一个卷 emptyDir{}到 pods
  • 我将该卷安装到我的主容器中,使用 mountPath是它将日志写入到的目录
  • 我在 pod 中添加了另一个容器,称为“logger”,图像是我编写的日志跟踪器( lutraman/logger-sidecar:v2 ),并将相同的卷安装到 /logs (我编写了脚本以从此目录读取日志)

  • 然后,写入该目录的所有日志都可以通过 kubectl logs <pod-name> -c logger 访问。

    这是一个示例 yaml:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: dummy
    labels:
    app: dummy
    spec:
    selector:
    matchLabels:
    app: dummy
    template:
    metadata:
    labels:
    app: dummy
    spec:
    volumes:
    - name: logs
    emptyDir: {}
    containers:
    - name: dummy-app # the app that writes logs to files
    image: lutraman/dummy:v2
    ports:
    - containerPort: 8080
    name: http
    protocol: TCP
    env:
    - name: MESSAGE
    value: 'hello-test'
    - name: LOG_FILE
    value: '/var/log/app.log'
    volumeMounts:
    - name: logs
    mountPath: /var/log
    - name: logger # the sidecar container tracking logs and sending them to stdout
    image: lutraman/logger-sidecar:v2
    volumeMounts:
    - name: logs
    mountPath: /logs

    对于任何感兴趣的人,以下是我制作边车容器的方法:

    Dockerfile:
    FROM alpine:3.9

    RUN apk add bash --no-cache

    COPY addTail /addTail
    COPY logtrack.sh /logtrack.sh

    CMD ["./logtrack.sh"]


    添加尾:

    #!/bin/sh

    (exec tail -F logs/$3 | sed "s/^/$3: /" ) &
    echo $! >> /tmp/pids

    logtrack.sh:

    #!/bin/bash

    trap cleanup INT

    function cleanup() {
    while read pid; do kill $pid; echo killed $pid; done < /tmp/pids
    }

    : > /tmp/pids

    for log in $(ls logs); do
    ./addTail n logs $log
    done

    inotifyd ./addTail `pwd`/logs:n

    关于Kubernetes - 如何读取写入 pod 中的文件而不是 stdout/stderr 的日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55339396/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com